找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6160|回复: 12
收起左侧

在STC8A8K64A4S12单片机芯片移植使用small RTOS 附源程序

  [复制链接]
ID:505284 发表于 2020-9-2 20:22 | 显示全部楼层 |阅读模式
   大好的一个暑假又过去,接触51单片机也有两年多了,从单初的入门到熟悉,再有一个年头就面临就业问题了,最后发现这几年51单片机虽然经典,但是也到了差不多该退出历史的舞台了,尽管8系列的芯片性能还不错,但是较STM32系列的F3就能把它打的落花流水,当然这里也不是贬低STC单片机,只是说物尽其能嘛,什么样的需求,选择什么样的芯片,但是就市场而言STM32无疑是占据了一定优势了,比如速度可以高达百兆,可以搭载诸多RTOS(UCOS/free RTOS等),还可以移植emwin等诸多GUI,使得人机交互界面更上一层楼,DMA、FMSC、DIO硬协议的集成,结合库的开发,功能强大的同时,开发周期也更短,性价比超高。    说了这么多,也就是我也进入那股大潮流中去了,为此还是有许多不甘心的,比如在STC单片机上的应用还比较少,为此在转入学习ucos之前,打算在学习了操作系统的基础上,在让手里的51发挥些余热,为STM32开开路。自从编程从结构化到携带操作系统,特别是复杂的多任务处理,让单片机的并行与并发在多个任务之间处理得淋漓尽致,用过之后就在也回不去了。于是就寻思着 在这个51单片机内核得STC8上带个操作系统跑破玩玩,于是就找到了2004年周立功公司开发的,陈明计工程师编写的开源small RTOS研究使用一番,作为在最后谢幕的结果。他开发的这个操作系统还是有很多优点的,不如说最直接的就是占用SRAM少,堆栈指针比比较精简,支持多达255层中断嵌套,可裁剪,用户自定义配置丰富,支持消息队列、信号量、邮箱等诸多功能。开始使用的时候因为赶时间嘛,就用了它开发了一套简易的系统,其实也不算完整的系统,就是把外部的电路模块集成到一块,加了个操作系统整合了,后面加到NRF24L01和1.8寸TFT液晶驱动时才发现,喔呦,编译出错了,报错信息是“DATA”,内存溢出了,原来该操作系统仅仅支持编译的small模式(DATA),对于XDATA和PDATA模式操作系统是无法引导的,这个就麻烦了呀,所有的变量远离data、idata,希望变量都加上xdata关键字,最后发现还是不行,这样有些值是读不出来的,甚至编译器报错,各种奇葩的bug,原本说支持最多16个任务的,现在就仅仅写了7-8个就已经无法使用了,我猜测,这个也有可能是当年它由轰动一时,到后来的无人问津的原因之一吧。还有要吐槽的是其实对于消息对列和邮箱我个人感觉都是多余的,很多东西一个全局变量就解决了,使用了消息队列反倒占用内存不说,变量定义的更多了,操作系统切换任务的堆栈寄存器都不够用了,还有信号量,都变成使用中断开关了,参考了它的例子,消息队列应用在了键盘发送,和一个值接收进程,好像也没有多大用处,装个逼倒是还不错。最后只能总结得出看样子51还是不适合搭载操作系统了,重要的函数重载都不可以。后来就去使用了RTX-51-tiny去了,一个头文件搞定,对于超出127字节的small区,可以改用XDATA,还可以删除任务,还不错。好了,最后就来看下效果吧,手都酸了,欢迎批评指正。

1.8寸测温度

1.8寸测温度

1.8寸采集光敏电阻

1.8寸采集光敏电阻

0.96寸显示图片

0.96寸显示图片

0.96寸显示温湿度

0.96寸显示温湿度

0.96寸显示ADC

0.96寸显示ADC

显示界面

显示界面

0.96寸显示时间

0.96寸显示时间

关机状态

关机状态

39 TFT_1.8寸全彩.rar

240.43 KB, 下载次数: 69, 下载积分: 黑币 -5

RTX-51-Tiny

37 small_RTOS.rar

282.25 KB, 下载次数: 99, 下载积分: 黑币 -5

small_RTOS

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:108573 发表于 2020-9-3 08:27 | 显示全部楼层
结构化变成感觉风格很好,就是有时候结构不知道怎么去组织
回复

使用道具 举报

ID:505284 发表于 2020-9-3 09:12 来自手机 | 显示全部楼层
神出没 发表于 2020-9-3 08:27
结构化变成感觉风格很好,就是有时候结构不知道怎么去组织

其实,结构化的编程是比较考验人的思维的,但为什么后来会发展为面向对象和携带操作系统的编程呢,简单了说,如处理一个按键,在结构化中大循环while1,如果没有开其他中断程序,那程序的执行就会是顺序的,那么就会发生一个现象,按键有些时候不灵,特别难受,解决方法就是要么你加一个外部中断检测口,要么就是携带操作系统,显然后者在软件上处理比较容易,因为操作系统中各任务就像是同时运行的,优先级高的操作系统可以及时响应,很多模块程序以API方式接入,容易纠错,方便引入和替换。结构化的编程是低层的东西,注重思维和逻辑,通常做个东西,你会确定它的需求,从而定位功能,从功能确定大体架构,再从架构细分出模块,各模块做出流程图,最后选择合适的方式编程实现。具体的解决方案可以学习软件工程方面书籍,结合一下比赛,不如电赛题目等,动手实践一波,相信你的结构就会组织起来了,加油!纯属个人见解,各位大佬,高手不喜勿喷哦,欢迎批评指正。
回复

使用道具 举报

ID:691028 发表于 2020-9-3 09:33 | 显示全部楼层
当时为了这个RTOS还专门买了他们出的书,到后来也没有研究明白任务是如何切换的。
回复

使用道具 举报

ID:89217 发表于 2020-9-3 10:30 | 显示全部楼层
TFT没怎么玩过  受教了
回复

使用道具 举报

ID:342197 发表于 2020-10-14 10:13 | 显示全部楼层
大神,请问一下:STC8A8K单片机 同时使用串口1 和 串口2 怎样避免冲突,谢谢
回复

使用道具 举报

ID:505284 发表于 2020-12-14 21:52 | 显示全部楼层
远征之路 发表于 2020-10-14 10:13
大神,请问一下:STC8A8K单片机 同时使用串口1 和 串口2 怎样避免冲突,谢谢

可以考虑从串口优先级入手啊,保障串口1或者串口2中其中一个优先级最高,那么问题来了,不知道你说的同时工作是 一发一收,两发、还是两收、同收发的情况呢?如果是同时接受、同时发送的话,可以考虑优先级调度,进高优先级中断时屏蔽低优先级的,低优先级中断时不是必要不必屏蔽高的;如果是是一发一收,可以考虑,一个正常,另一个用第三方定时器触发,这个是正点原子解决多串口并发工作的极好的解决方式哦。
回复

使用道具 举报

ID:254226 发表于 2021-12-22 10:02 | 显示全部楼层
51内核的MCU从传统编程,到基于OS的编程,跨度很大!
回复

使用道具 举报

ID:476652 发表于 2022-1-1 22:25 | 显示全部楼层
大神,有开发板资料也建议分享出来,毕竟大家玩的人多了,各种移植也就多了,
回复

使用道具 举报

ID:505284 发表于 2022-1-12 12:17 | 显示全部楼层
xylove51 发表于 2021-12-22 10:02
51内核的MCU从传统编程,到基于OS的编程,跨度很大!

从编译角度来说,51编译器底层采用的地址策略是分时复用的,最大的问题就是编写的函数很多是不可重入的,然而你如果使用OS的话,需要的就是可重入的;另外一个方面是51单片机寄存器组是R0-R7,分为0-3个bank,对于上下文切换不太友好。
回复

使用道具 举报

ID:87000 发表于 2023-2-17 10:52 | 显示全部楼层
对学习点屏还是有很大的帮助的
回复

使用道具 举报

ID:87000 发表于 2023-2-17 16:50 | 显示全部楼层
small_RTOS 用了单片机掉电休眠,而 RTX-51-Tiny 里面去掉了,是不是RTX-51-Tiny不支持休眠功能吧?
回复

使用道具 举报

ID:216265 发表于 2023-4-25 15:41 | 显示全部楼层
牛在飞 发表于 2020-9-3 09:12
其实,结构化的编程是比较考验人的思维的,但为什么后来会发展为面向对象和携带操作系统的编程呢,简单了 ...

非常热心的人,技术还很高,又很谦虚,做朋友吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表