ucosii for 51

2020-01-12 17:26发布

ucos在51单片机上的移植,版本为2.51,为一个简单的门禁控制器,只有其框架,4个任务,时间显示,密码验证,任务调度,菜单。主体框架运行良好
是在以前发过的一个状态机改过来的,因发现全部都要改,而目前更想学ucos,故只写了主体框架,即待机界面和菜单。刚学两天,只用了任务管理,想到信号量发现用不上:(。
RAM需求较大,用的是STC89C54RD+,1K的RAM,目前跑4个任务没问题。
电路10简单,就不上传了,也因核心是ucos而不是电路,NOKIA 5110LCD,DS1302,4*4 Keyboard,因时间问题,也未加注释,但编程风格良好。

点击此处下载 ourdev_556873.rar(文件大小:264K) (原文件名:uCOS_C51 V3.0.rar)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
69条回答
APTX4869
1楼-- · 2020-01-18 07:47
总觉得51运行uCOS是不是太累了,资源不够啊。
summerrain19
2楼-- · 2020-01-18 13:20
留待学习
idata
3楼-- · 2020-01-18 15:49
支持楼主这样的做法。
但是有几个疑问,请各位也注意一下:
1、reentrant函数的使用。
楼主的有些函数,需要定义为reentrant,比如DisplayString,这个函数被不同的task调用,Task_ReadKey和Task_KeyFunc,如果在执行的时候,可能会被打断,导致不可重入。
同样的,delay函数要小心用,不要导致重入问题。

重入函数在编译的时候,编译器会把参数、局部变量放到模拟栈中,如果没有定义成reentrant,会按照默认的分配规则,可能会导致内存覆盖的问题。因为多task,编译器对函数调用树可能没有正确建立。

2、OS_ENTER_CRITICAL的使用。
在Task_ShowTime的for(;;)调用不妥,因为这个会关系统中断,知道调用OS_EXIT_CRITICAL,才有可能执行其他的。这两条语句中的过程很多,可能会开中断。
OS_ENTER_CRITICAL,最好只用在非得关中断的地方。一般是驱动操作,对时序有要求的。

3、栈大小的设置。
MaxStkSize,是如何确定的呢?这几个都用到了同样的大小,能否解释一下?谢谢
duzhang
4楼-- · 2020-01-18 18:45
MARK
zhaoliang056
5楼-- · 2020-01-18 21:31
 精彩回答 2  元偷偷看……
wishu520
6楼-- · 2020-01-18 22:56
学习中

一周热门 更多>