前些日子写了 MSP430F5438上 利用时间片调度任务的算法,自己测试证明效果还是不错的。当初写这个算法原因是,MCU在执行液晶刷屏时占用时间特别长(60ms左右),妨碍了其他代码对cpu的使用,比如模拟采样要求每隔20ms计算一次;有了调度算法就可以解决这个问题了,我可以定义一个20ms的时间片,1~8ms执行采样的任务,9~13ms执行液晶刷屏的任务,其余的时间留给背景任务。
这个算法的工作原理非常简单,就是利用1ms的中断返回,在退出中断前“偷梁换柱”,将欲切换任务的堆栈指针赋值给SP,这样,退出中断服务程序后任务也就跟着切换了,就好像是这个任务被1ms中断后继续运行一样。“偷换”前要做好的准备,将背景任务的所有寄存器R4~R15压栈,修改了SP后,先将欲切换任务的R4~R15出栈,退出中断时,编译器会做一些出栈的处理,这个就不需我们操心了。
这个简单的任务调度程序系统开销少,编程模式与原来差不多,对于一般的应用来讲应该是够用了,正常编程还是写原来的主循环,需要调度的再把它拿出来放在一个死循环里。
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |