您的位置 首页 模拟

开发51单片机操作系统时应留意哪些问题

开发51单片机操作系统时应注意哪些问题-Keil C51软件提供丰富的库函数和功能强大的Windows界面集成开发调试工具。

另外重要的一点, Keil C51生成的目标代码效率非常高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时,更能体现高级语言的优势。C编译器能产生可重入代码,而且用C语言可以打开和关闭中断。

51系列单片机是美国Intel公司在1980年推出的高功用8位单片机,在我国的运用十分广泛。现在,在软件规划中需求软件工程师从底层做起,在体系软件规划方面需求做许多的重复性劳作。假如开发一套依据51系列单片机的操作体系,那么用户只需求编写各个使命的程序,不用一起将一切使命运转的各种状况记在心中,不光大大削减了程序编写的作业量,并且削减了犯错的或许性。

1 开发渠道的挑选和证明

开发渠道的挑选至关重要,由于有时它不光影响进展、产品质量、可维护性等一般问题,还涉及到计划的可完结性。

在本体系中,挑选51系列单片机作为操作体系的运转渠道有以下原因。

首要,51系列单片机运用十分广泛,一大批功用优胜的51兼容单片机相继推出。这儿包含:低功耗、高速度和增强型的Philips公司的系列产品;完美地将Flash(非易失闪存技能)EEPROM与80C51内核结合起来的Atmel公司的系列产品;在抗干扰功用,电磁兼容和通讯操控总线功用上别出心裁,其产品常用于作业环境恶劣场合的Siemens公司的系列产品以及一些其它公司的产品。已然产品如此丰厚,功用如此优胜,那么在处理多使命并且对实时性要求严厉的体系规划中,为了充沛发掘单片机的潜能(尤其是在实时性方面),也是为了简化开发的进程,依据51系列单片机的实时操作体系的需求就十分激烈了。Keil公司的RTX51 Full便是一个依据51系列单片机的有有用价值的实时操作体系,但该操作体系是一个源码不揭露的收费软件。

其次,借助于Keil C51的集成开发环境,完全可以开宣布适用于51系列单片机的操作体系代码。

Keil C51软件供给丰厚的库函数和功用强大的Windows界面集成开发调试东西。

别的重要的一点, Keil C51生成的方针代码功率十分高,大都句子生成的汇编代码很紧凑,简单了解。在开发大型软件时,更能表现高档言语的优势。C编译器能产生可重入代码,并且用C言语可以翻开和封闭间断。

2 开发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的肯定占用者,每一个使命都是一个死循环。使命间进行切换的依据便是各自的优先级,一个高优先级的使命可以经过使命调度函数或许间断退出函数等来间断正在运转的使命。被间断的使命只要自己的优先级在当时安排妥当使命表中最高时,才能从被间断处持续运转。这就需求为每个使命分配使命仓库,来保存使命的环境变量。由于每个使命在不一起刻被间断时需求保存的环境变量数目不同,所以使命仓库空间的分配问题也是一门学识。

3 一些处理问题的技巧

(1)片内RAM占用问题的处理

使命仓库最好不要放在片内,假如把使命仓库放在片内的话,用户运用程序可运用的资源就十分有限,运用程序的功用也会受到限制。这便是为什么某些把使命仓库放在片内的依据51系列单片机的实时操作体系只能用来做些演示试验,但并不有用。一个有有用价值的依据51系列单片机的实时操作体系有必要在512字节以上的RAM环境中运转。跟着集成技能的开展,现在现已呈现了许多带有辅佐RAM的51系列单片机,这类单片机把片外的RAM集成到芯片内,运用MOVX指令来访问这些RAM。假如用户不想经过三总线来扩展片外RAM的话,可以选用这种带有辅佐RAM的单片机。此外,由于操作体系要用到一些全局变量,鉴于处理的速度问题又不想把它们悉数的放在片外,那就可以依据这些全局变量运用的频频程度来决议把哪些移到片外,哪些留在片内。别小看这几个字节的节省,在51 系列单片机上作用会很明显。笔者以为在这种资源相对匮乏的单片机上,开发操作体系的最高境地应该是开发一个绿色的操作体系,用户在运用操作体系时可以用的体系资源应该和依据裸机编程差不多。

(2)重入问题的处理

应该尽量使有重入性要求的函数的参数传递经过寄存器来完结,这样可以用一般的办法来编写函数,使得函数具有重入性。假如实在是寄存器不够用的话,可以动用硬件仓库来保存这些局部变量。

(3)仓库分配问题的处理

鉴于各个使命关于使命仓库巨细的要求不同,即便同一个使命在不同的时间被间断,它对仓库巨细的要求也不相同的状况,可以将使命仓库多分配出一个字节,用来计算使命仓库中有用数据的个数。单片机的片内RAM中,仓库的栈底也做一个标志,当使命切换时,把当时使命放在仓库中的环境变量从栈底到栈顶悉数复制到使命的仓库中,然后把即将运转使命的使命仓库中的一切数据康复到栈底标志开端的当地。使命仓库和硬件仓库之间的数据复制如图1所示。

开发51单片机操作体系时应留意哪些问题

其间,Stack(i)和Stack(j)都是指针数组Stack[max_tasks]中的元素,NUM=SP-StkStart,图1中所要进行的操作进程是:①将体系硬件仓库中的内容放到当时使命的仓库中;②把即将运转的使命的仓库内容移到体系的硬件仓库中,并将硬件仓库中的内容弹出到各个寄存器。这个进程就完结了使命的切换。

结 语

本文介绍了在依据51系列单片机的嵌入式操作体系开发中,或许遇到的几个问题和它们的处理办法。这些主意都是笔者在学习和实践中得来的,信任可以对从事相同作业的人员有必定启示。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/moni/345237.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部