伪指令DS在rtx51 tiny学习笔记 源代码中的作用

RTX51Tiny任务切换的分析_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
RTX51Tiny任务切换的分析
上传于||文档简介
&&单​片​机​,01​,​嵌​入​式​,​实​时​操​作​系​统
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
你可能喜欢工具类服务
编辑部专用服务
作者专用服务
RTX51tiny实时操作系统在单片机STC12C5A60S2上的移植
  RTX51tiny实时操作系统是Keil C51单片机开发集成环境自带的一个实时操作系统,此操作系统功能强大,简单易用,本文讲解把它移植到单片机STC12C5A60S2上的方法。
作者单位:
530005,南宁市第一职业技术学校 广西 南宁
年,卷(期):
机标分类号:
在线出版日期:
本文读者也读过
相关检索词
京公网安备号
万方数据知识服务平台--国家科技支撑计划资助项目(编号:2006BAH03B01)(C)北京万方数据股份有限公司
万方数据电子出版社随笔 - 289
留言簿(11)
随笔分类(287)
随笔档案(289)
积分与排名
阅读排行榜评论- 248&
&&&&&&&&&&&&&
最近 1 个月一直在利用业余时间研究 STC12A5C60S2 单片机及其应用,用于放松每天搞 SharePoint 后的紧张心情和头脑。(事实证明,能放松那才怪!) 在折腾完了 LCD 1602、LCD 12864(并、串)、PCF 8563(时钟芯片)、nRF24L01(无线通信)、矩阵键盘、LN 298(H 桥电机驱动)、光耦计数器、HC-SR 04(超声波测距)之后,决定放弃“白痴”一样基于中断、定时器循环的“多任务”程序,上操作系统。否则,后面我想写略微复杂的应用是几乎不可能的。 下面这个就是我使用的 STC12A5C60S2 单片机最小系统,自带 U 转串芯片,所有 IO 口引出,烧片调试很方便:
这种小板要说缺点,也是有的,就是没有安装孔,整个板只能“飘”着,靠杜邦线的张力来固定(呃,也就是没有固定:),所以后来用到小车上面时,只能像这样在底部焊“支架”再安装到洞洞板上:
& 操作系统的选择 最开始考虑的是 uc/OS-II。因为名气大(经常看到),功能强(听上去),而且我买的书里面也是介绍这个操作系统。 us/OS-II 的任务调度是完全基于任务优先级的抢占式调度方式,正在执行的低优先级任务可以被处于“READY”状态的高优先级任务打断。这点在 STC12A5C60S2 里面通过设置硬件中断优先级也可以实现,但我不可能任何任务都是中断吧。所以还是得用操作系统。 结果网上翻了翻资料,傻眼了。us/OS-II 太xx复杂了,没有一个网页能够清楚的用几段话说清楚应该怎么用。而且,us/OC-II 到 STC12A5C60S2 需要移植(就是你得改他的源码,从而适应硬件的特殊情况)。呃 … …
然后,开始考虑 RTX-51。因为 C51 开发工具 Keil 里面自带 RTX-51 操作系统,且直接支持在 Keil 中编译调试,颇有吸引力 :) RTX-51 有 2 个版本:Full 和 Tiny。 Full 需要的资源较多,但支持抢占式任务调度和中断任务,以及任务间互发消息;Tiny 不支持抢占式调度,任务间也不能互发消息,但消耗资源少。 Full 版本虽然功能强大,但是占 8K ROM 也就算了,还需要至少 450 字节的 xData!STC12A5C60S2 总共才 1024 字节的片上 xData RAM,而且我还要 xData 当作液晶屏显存用呢。想了想,果断选择 RTX-51 Tiny。 Tiny 版本不占用 xData,RAM 占用也很少(7+3×任务数),比较合适。至于缺点,只能用了才知道。Tiny 版是开源的,源码是汇编。国内有人对照着写自己写了个操作系统,叫做 。 Small RTOS 51 的作者陈明计,当年是因为找不到合适的单片机操作系统,“一怒之下”自己动手写了这个既有 Tiny 版本资源占用少的优点,又能支持抢占式任务调度的操作系统。(自己不爽,就创造一个,这似乎是很多牛人和新技术出现的根本动力啊!所以说,没有好轮子用的时候,就要自己发明新的轮子。) RTX-51 Tiny 使用还是很简便的,网上随便翻翻,马上就找到了可用的指南(),作者写得很好,10 分钟就看懂了,然后开始动手。 & 搭建环境 项目名字叫做 Wave。 首先,建立好项目目录结构。每个子目录放对应的内容,要不然,所有文件都堆在项目文件夹下面,你很快就晕了:
上面图中,
code 放自己的代码
lib 放外部程序库的代码
listing 放 Keil 生成的中间文件(方法、变量的内存地址映射什么的)
output 放 Keil 生成的 HEX 文件
document 放文档 这个目录结构和 Keil IDE 里面的“目录”结构是不一样的(也不需要一样)。 & 然后,开 Keil IDE 新建一个项目,放在刚刚的目录下面:
Keil IDE 有试用版的。试用版有全部功能,唯一的限制是只能编译 2K 以内的目标代码。 & 选择芯片库,我这里用的是 STC:
Keil 默认的芯片库里面,是没有 STC 的芯片的,可以按照下面的步骤将 STC 的芯片库加入到 keil 中:
从下载 UV3.CDB
将UV3.CDB改名为STC.CDB,拷贝到Keil安装目录的UV4子目录下
修改Keil安装目录下的TOOLS.ini文件,在[C51]上方添加:CDB0=UV4\STC.CDB("STC Chip")
建立新项目,然后就可以选择对应的芯片数据库了 然后,选择芯片:
问你是否需要自动包含启动代码,选“否”(除非你要改程序起始地址什么的):
& 改改 Target 的名字,看上去好看些,然后设置项目属性:
写好晶振频率并选择“RTX-51 Tiny”作为操作系统,这样 Keil 会自动将 lib 文件编译到输出中(Memory Model 用 Small 比较好,免得每次声明变量都写 data 修饰):
然后选择 output、listing 目录到前面建立好的目录结构:
然后,忽略调用警告信息(这个警告会提醒你哪些函数定义了但是未被调用,很讨厌!):
设置好调试选项(STC12A5C60S2 支持 ISD-51 进行在线调试,不过,实际用下来用处不大,外围硬件模块根本不会跟着断点等你,还是先用软件模拟调试好了再说):
& 接下来,将常用的库文件拖到 lib 目录中:
ISD51.h,ISD51.A51 用于在线调试和串口 0 冲突,慎用
stc12c51a.h 单片机自带的头文件
Conf_tny.A51RTX-51 Tiny 的配置程序
Conf_tny.A51 还是需要做点儿修改的:
INT_CLOCK,定义每个计时中断对应的时钟周期数,默认 10000,我改成 1000 了 ;)这个值会影响 os_wait 第二个参数的长短。例如,ow_wait(K_TMO, 5, 0) 等待 5 个计时周期,也就是等待 5000 个时钟周期。
TIMESHARING,每个任务分到的时钟中断数量。默认是 5。这样,每个任务都会被分配 5000 个时钟周期的任务时间,到期以后,任务将被挂起,其它处于 READY 状态的任务会运行。如果这个值是 0,那么,Round Robin 的任务轮询算法会停止,必须你自己手动 os_send_signal 或者 os_switch_task 来切换任务。某些时候,这样会提高实时性。
RAMTOP。指定了可用 RAM 的顶部地址,默认是 0FFH,即 256 字节 RAM。就 STC 这块芯片来说,这样的默认设置在任务代码非常短小时没有问题,但是,如果任务代码较长,建议还是改小点儿,比如 0CFH。原因不明,但可能是因为高 128 字节 RAM 的直接存取方式是读写的特殊寄存器,我发现会和 RTX-51 Tiny 冲突,产生 error 65 access violation at 0x3480 之类的运行错误。 & 敲一段代码先跑跑(软件调试,Ctrl+F5):
可以看见监视窗口里面,c0, c1 乱跳:
再来一段代码,看看 Keil 的高级功能(逻辑分析):
现在可以看波形了:
环境搞定,记得提交到配置库。下面就可以开始移植代码到新的基于 RTX-51 Tiny 的项目中了。 ■
阅读(...) 评论()RTX51-Tiny使用说明_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
RTX51-Tiny使用说明
上传于||暂无简介
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩38页未读,继续阅读
你可能喜欢}

我要回帖

更多关于 rtx51 tiny 例程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信