"); //-->
cogobuy分析 开发51单片机操作系统应注意的问题
1)操作系统软件的代码不能太长
因为51系列单片机的系统硬件资源相对匮乏,如果操作系统的代码比应用程序的代码还大,甚至使得用户的应用程序要考虑给操作系统让出资源,这样的操作系统即使功能再完善,也不实用。现在流行的嵌入式操作系统就不能应用于51系列单片机,原因是代码太大。开发一个5000行的基于裸机的应用程序也就是占用 7~8KB ROM空间,一个操作系统用掉了几十KB,占空间不算,实时性的优势恐怕也没了(执行这么多的指令要时间)。所以,μCOS的作者也不支持将他的代码移植到51系列单片机上,这也就不奇怪了。(2)操作系统不能占用太多的片内RAM空间
51系列单片机只有128个或者256个字节的片内RAM空间,稍微不注意就用完了。如果操作系统把片内的RAM使用得所剩无几,那用户的应用程序用什么? 如果说用户的程序可以把变量定义在片外RAM中的话,那么系统的硬件堆栈放在哪? 众所周知,51系列单片机的硬件堆栈不能放在片外,所以要在51系列单片机上开发操作系统的话就要少用它的片内RAM。但是不用片内RAM是办不到的,因为操作系统也要传递参数,也要使用堆栈。C51单片机的C函数传递参数是通过寄存器和存储器的,不能通过堆栈。但是可以通过一些措施使得操作系统代码少用片内RAM。
(3)解决好函数的重入问题
开发实时占先式的操作系统,可重入函数是非用不可的。可重入函数可以被一个以上的任务调用,而不必担心数据被破坏。可重入函数任何时候都可以被中断,一段时间后又可以运行,而应用数据不会丢失。使得函数具有可重入性必须使得函数能够满足下列三个条件之一:
① 不使用共享资源;
② 在使用共享资源时关中断,使用完毕后再开中断;
③ 在使用共享资源时申请信号量,使用完后释放信号量。
这些条件在标准C中编程很容易实现,但是在Keil C51中就比较麻烦。因为标准C是把局部变量分配到用户堆栈中(动态分配),而Keil C51将局部变量分配到寄存器或内存固定地址(静态分配),并通过变量覆盖分析的方法,使多个函数的局部变量使用相同的内存地址以减少内存占用。在 Keil C51中,如果局部变量分配在寄存器中还好些,如果局部变量分配在内存中就比较麻烦。
(4)堆栈的分配问题
占先式操作系统的主要任务就是进行任务的调度,通过对任务的实时调度来完成系统的功能。任务调度过程中,不可避免的发生任务对系统资源的抢占问题,因为系统中 CPU只有一个,而每个任务都认为自己是CPU的绝对占用者,每一个任务都是一个死循环。任务间进行切换的依据就是各自的优先级,一个高优先级的任务可以通过任务调度函数或者中断退出函数等来中止正在运行的任务。被中断的任务只有自己的优先级在当前就绪任务表中最高时,才能从被中断处继续运行。这就需要为每个任务分配任务堆栈,来保存任务的环境变量。由于每个任务在不同时刻被中断时需要保存的环境变量数目不同,所以任务堆栈空间的分配问题也是一门学问。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
特朗普坚持征收关税 周一美科技股剧烈震荡
助力全电气时代:浩亭亮相2025汉诺威工业博览会
ARM mmu中文祥解
BiTMICRO推出具有Ultra320 SCSI固态闪存盘的模块
Meta 高管澄清:新 AI 模型 Llama 4 训练“作弊”传言不属实
[Android开发视频教学]代码编写(四)(32)
[Android开发视频教学]代码编写(一)下(29)
APS推出高可编程性FPGA与ARM开发系统
最简单的双向晶闸管调光灯电路
最简单的单向晶闸管调光灯电路
[Android开发视频教学]代码编写(二)(30)
allegro基础训练教程
allegro常见问题集锦
ARM开发软件SDT2.51使用教程
Panasonic模组整合Nordic的nRF54L15 SoC
日本半导体巨头Rapidus加速推进2nm工艺 预计2027年实现量产
MIPS与Virage Logic共推低成本333MHz嵌入式处理器
Vishay推出便于裸手或佩戴手套操作的新型控制旋钮
ADS步步学
村田中国将携四大领域创新产品亮相2025慕尼黑上海电子展
Wordsworth的无风扇型单板机采用低功耗CPU
凌华新型PXI系统单板机适合高性能嵌入计算
研华AIMB-292高性能工业主板助力行业新突破
普通三极管触发的单向晶闸管调光灯电路
赶在加税前最后一刻!美国消费者挤爆苹果门店疯抢iPhone
[Android开发视频教学]代码编写(一)(上)(29)
11个黄金定律!轻松搞定DC-DC电源转换电路设计
氖泡触发的双向晶闸管调光灯电路
[Android开发视频教学]代码编写(三)(31)
采用双向触发二极管的单向晶闸管调光灯电路