前些日子写了 MSP430F5438上 利用时间片调度任务的算法,自己测试证明效果还是不错的。当初写这个算法原因是,MCU在执行液晶刷屏时占用时间特别长(60ms左右),妨碍了其他代码对cpu的使用,比如模拟采样要求每隔20ms计算一次;有了调度算法就可以解决这个问题了,我可以定义一个20ms的时间片,1~8ms执行采样的任务,9~13ms执行液晶刷屏的任务,其余的时间留给背景任务。
这个算法的工作原理非常简单,就是利用1ms的中断返回,在退出中断前“偷梁换柱”,将欲切换任务的堆栈指针赋值给SP,这样,退出中断服务程序后任务也就跟着切换了,就好像是这个任务被1ms中断后继续运行一样。“偷换”前要做好的准备,将背景任务的所有寄存器R4~R15压栈,修改了SP后,先将欲切换任务的R4~R15出栈,退出中断时,编译器会做一些出栈的处理,这个就不需我们操心了。
这个简单的任务调度程序系统开销少,编程模式与原来差不多,对于一般的应用来讲应该是够用了,正常编程还是写原来的主循环,需要调度的再把它拿出来放在一个死循环里。
我要赚赏金打赏帖 |
|
|---|---|
| 【S32K3XX】LPSPI参数配置说明被打赏¥21元 | |
| 在WT9932C61-TINY上实现超声波测距被打赏¥22元 | |
| 基于WT9932C61-TINY的环境构建及OLED屏驱动测试被打赏¥20元 | |
| 【S32K3XX】Core-to-Core 中断使用被打赏¥21元 | |
| 「AI编程记录--含源码」用一晚上的时间写一个esp32的示波器被打赏¥19元 | |
| STM32C0116DK开发探索记(3)被打赏¥30元 | |
| STM32C0116DK开发探索记(2)被打赏¥24元 | |
| STM32C0116DK开发探索记(1)被打赏¥29元 | |
| 谨防极海G32M3101电机评估板易跌落的陷阱被打赏¥24元 | |
| 【全网首拆】M5STACK ATOM系列开发板拆解 / AtomS3R-CAM摄像头更换方法(提高10倍像素)被打赏¥26元 | |
我要赚赏金
