前些日子写了 MSP430F5438上 利用时间片调度任务的算法,自己测试证明效果还是不错的。当初写这个算法原因是,MCU在执行液晶刷屏时占用时间特别长(60ms左右),妨碍了其他代码对cpu的使用,比如模拟采样要求每隔20ms计算一次;有了调度算法就可以解决这个问题了,我可以定义一个20ms的时间片,1~8ms执行采样的任务,9~13ms执行液晶刷屏的任务,其余的时间留给背景任务。
这个算法的工作原理非常简单,就是利用1ms的中断返回,在退出中断前“偷梁换柱”,将欲切换任务的堆栈指针赋值给SP,这样,退出中断服务程序后任务也就跟着切换了,就好像是这个任务被1ms中断后继续运行一样。“偷换”前要做好的准备,将背景任务的所有寄存器R4~R15压栈,修改了SP后,先将欲切换任务的R4~R15出栈,退出中断时,编译器会做一些出栈的处理,这个就不需我们操心了。
这个简单的任务调度程序系统开销少,编程模式与原来差不多,对于一般的应用来讲应该是够用了,正常编程还是写原来的主循环,需要调度的再把它拿出来放在一个死循环里。
我要赚赏金打赏帖 |
|
|---|---|
| PCF8574功能模块及其使用被打赏¥20元 | |
| 传感器LSM6DSO及LIS3MDL的功能检测被打赏¥18元 | |
| LPS25HB气压传感器及其检测被打赏¥18元 | |
| HTS221温湿度传感器及其检测被打赏¥18元 | |
| 【S32K3XX】HSE FW 版本更新被打赏¥21元 | |
| 基于ArduinoUNO开发板的AT24C02读写测试被打赏¥16元 | |
| TCS3472S传感器及其色彩检测被打赏¥19元 | |
| 【S32DS】S32K3 RTD7.0.1 HSE 组件配置报错问题解决被打赏¥27元 | |
| 【S32K3XX】MCME 启动 CORE1被打赏¥23元 | |
| AG32VH407下温度大气压传感器及其检测被打赏¥20元 | |
我要赚赏金
