基于Small-RTOS51的数据采集器设计
引 言
随着嵌入式系统的发展,嵌入式软件设计向软件平台靠近,单片机软件设计不再是单一线程结构方式,而是逐步
采用多任务的设计思想。实时内核也称为实时操作系统或RTOS。它使得实时应用程序的设计、扩展和维护变得更容
易,不需要大的改动就可以增加新的功能。通过应用程序分割成若干独立的任务,RTOS使得应用程序的设计过程大
为简化。使用可剥夺性内核时,所有时间要求苛刻的事件都得到了尽可能快捷、有效的处理。通过有效的服务,如
信号量、、队列、延时、超时等,RTOS使得资源得到更好的利用。
目前8位单片机在嵌入式系统中,应用还是zui广泛的。51多任务系统中,Keil C51 所带的RTX51 Full 太大(6KB
多),且需要外部RAM,又无源代码,很多时候不实用。RTX51 Tiny虽然小(900多字节),但是任务没有优先级和
中断管理,也无源代码,也不太实用。而uC/OSII虽有源代码,但是它太大,又需要外部RAM,所有函数又必须是重
入函数,用在51这类小片内RAM的单片机上有点勉强。Small RTOS为小RAM系统设计,RAM需求小,比较适合51这种
资源比较少的系统上。
1 数据采集器系统设计
1.1 数据采集器原理
数据采集器是将采集到的电表脉冲信号转换为电能量数据整理保存,并与上行设备通信传输到管理单元进行电表
数据的统一管理。[image1]
1.2 硬件设计
主控制器采用AT89C52芯片,利用7032将脉冲信号采样,经过CPU的处理将数据存储到EEPROM芯片中,数据通过红
外信道上传到掌上电脑中。系统框图如图1所示。
2 Small RTOS51多任务操作系统
Small RTOS是一个源代码公开的多任务实时操作系统,Small RTOS 51是其在8051系列处理器上的移植(使用
Keil C51)。Small RTOS可以简化那些复杂而且时间要求严格的工程的软件设计工作。
Small RTOS有以下的特点。
① 公开源代码。只要遵循许可协议,任何人可以免费获得源代码。
② 可移植。尽量把与CPU相关部分压缩到zui小,与CPU无关部分用ANSI C编写。
③ 可固化。Small RTOS为嵌入式系统设计,如果有固化手段,它可以嵌入到产品中成为产品的一部分。
④ 占先式。Small RTOS可以管理17个任务,用户zui多可以使用16个任务,每个任务优先级不同。
⑤ 中断管理。中断可以使正在执行的任务挂起。如果优先级更高的任务被中断唤醒,则高优先级的任务在中断嵌
套全部退出后立即执行。中断嵌套层数可达255 层。如果需要,可以禁止中断嵌套管理。
⑥ RAM需求小。Small RTOS为小RAM系统设计,因而RAM需求小,相应的,系统服务也少。
目前,Small RTOS的版本为1.20.0。可以进行任务的建立、删除、动态内存分配等操作。
3 任务分解设计
数据采集器主要包括采集处理、显示处理、按键处理、通信处理等模块,由中断处理相应采集脉冲信号和串口通
信。因此,将任务分解为按键显示处理、接收数据、命令处理、发送数据、采样滤波处理、系统检测6个任务。
[image2]
主程序进行系统初始化以后,顺序建立6个任务,进入CPU休眠状态。各个任务运行后,首*入任务休眠状态,
等待相应任务的唤醒。任务被唤醒以后,进行相应处理,再次进入休眠状态。这样,可以减少任务切换,减轻系统
负担。
任务框图如图2所示,主程序流程如图3所示。
脉冲到来时,引发相应外部中断,由中断处理程序处理后,置相应信号量,然后唤醒采样滤波处理任务。采样滤
波处理任务将数据整理后,存储到外部存储器中。
串口数据到来时,引发串口中断,串口中断处理程序唤醒数据接收任务。数据接收任务完成数据包的接收,并根
据通信数据包的特点进行错误处理。数据包被正确接收后,唤醒命令处理任务。命令处理任务判断数据包的校验
和,若正确就处理相应的命令。命令处理完成以后,将回应数据打包,然后唤醒发送数据任务,将数据通过串口发
送出去。
每个任务均采用以下结构。
while(1)
{
OSWait(K_SIG, 0); // 任务睡眠,等待任务唤醒处理过程
}
任务的唤醒用OSTaskResume(TASK_ID)完成。
串口接收和发送处理采用队列模式,设立发送和接收两个缓冲区,独立的进出队列处理。数据解包和数据打包采
用单独处理方式,这样单独处理通信协议,以利于今后协议的改动。
串口缓冲I/。
系统节拍设置:将OS_TICKS_PER_SEC设为20,即系统时钟节拍为每秒20次。定义定时器0的中断时间设为50ms。
#define m_Fosc 11059200L
#define m_TIME 65536L - (m_Fosc / (OS_TICKS_PER_SEC *
12L))
void InitTimer0(void) {
TMOD = (TMOD & 0xF0) | 0x01;
TH0 = m_TIME / 256;
TL0 = m_TIME % 256;
ET0 = 1;
TF0 = 0;
}
[image3]
TestSys任务定时检测各任务的回应,若长时间没有回应,则启动复位功能,热启动整个系统,以保证系统的可
靠性。
由于单片机采用AT89C52,片内RAM为256,使用DS12887中的一部分RAM作为扩展。队列长度各为15个字节时,程
序经过9级优化后,RAM占用140字节,XRAM占用106字节。由于系统RAM很小,因此,没有使用信号量和消息进行数
据传输。在其它应用时,可以根据系统资源进行信号量和消息的使用,这样可以更有效地使任务运行。
4 结 论
在嵌入式系统中,使用RTOS是大势所趋,因为在大多数情况下编程效率比执行效率重要。利用Small RTOS多任务
系统设计,可以使51单片机发挥的更有效,并且今后的软件维护和改进更方便,更可靠。
随着嵌入式系统的发展,嵌入式软件设计向软件平台靠近,单片机软件设计不再是单一线程结构方式,而是逐步
采用多任务的设计思想。实时内核也称为实时操作系统或RTOS。它使得实时应用程序的设计、扩展和维护变得更容
易,不需要大的改动就可以增加新的功能。通过应用程序分割成若干独立的任务,RTOS使得应用程序的设计过程大
为简化。使用可剥夺性内核时,所有时间要求苛刻的事件都得到了尽可能快捷、有效的处理。通过有效的服务,如
信号量、、队列、延时、超时等,RTOS使得资源得到更好的利用。
目前8位单片机在嵌入式系统中,应用还是zui广泛的。51多任务系统中,Keil C51 所带的RTX51 Full 太大(6KB
多),且需要外部RAM,又无源代码,很多时候不实用。RTX51 Tiny虽然小(900多字节),但是任务没有优先级和
中断管理,也无源代码,也不太实用。而uC/OSII虽有源代码,但是它太大,又需要外部RAM,所有函数又必须是重
入函数,用在51这类小片内RAM的单片机上有点勉强。Small RTOS为小RAM系统设计,RAM需求小,比较适合51这种
资源比较少的系统上。
1 数据采集器系统设计
1.1 数据采集器原理
数据采集器是将采集到的电表脉冲信号转换为电能量数据整理保存,并与上行设备通信传输到管理单元进行电表
数据的统一管理。[image1]
1.2 硬件设计
主控制器采用AT89C52芯片,利用7032将脉冲信号采样,经过CPU的处理将数据存储到EEPROM芯片中,数据通过红
外信道上传到掌上电脑中。系统框图如图1所示。
2 Small RTOS51多任务操作系统
Small RTOS是一个源代码公开的多任务实时操作系统,Small RTOS 51是其在8051系列处理器上的移植(使用
Keil C51)。Small RTOS可以简化那些复杂而且时间要求严格的工程的软件设计工作。
Small RTOS有以下的特点。
① 公开源代码。只要遵循许可协议,任何人可以免费获得源代码。
② 可移植。尽量把与CPU相关部分压缩到zui小,与CPU无关部分用ANSI C编写。
③ 可固化。Small RTOS为嵌入式系统设计,如果有固化手段,它可以嵌入到产品中成为产品的一部分。
④ 占先式。Small RTOS可以管理17个任务,用户zui多可以使用16个任务,每个任务优先级不同。
⑤ 中断管理。中断可以使正在执行的任务挂起。如果优先级更高的任务被中断唤醒,则高优先级的任务在中断嵌
套全部退出后立即执行。中断嵌套层数可达255 层。如果需要,可以禁止中断嵌套管理。
⑥ RAM需求小。Small RTOS为小RAM系统设计,因而RAM需求小,相应的,系统服务也少。
目前,Small RTOS的版本为1.20.0。可以进行任务的建立、删除、动态内存分配等操作。
3 任务分解设计
数据采集器主要包括采集处理、显示处理、按键处理、通信处理等模块,由中断处理相应采集脉冲信号和串口通
信。因此,将任务分解为按键显示处理、接收数据、命令处理、发送数据、采样滤波处理、系统检测6个任务。
[image2]
主程序进行系统初始化以后,顺序建立6个任务,进入CPU休眠状态。各个任务运行后,首*入任务休眠状态,
等待相应任务的唤醒。任务被唤醒以后,进行相应处理,再次进入休眠状态。这样,可以减少任务切换,减轻系统
负担。
任务框图如图2所示,主程序流程如图3所示。
脉冲到来时,引发相应外部中断,由中断处理程序处理后,置相应信号量,然后唤醒采样滤波处理任务。采样滤
波处理任务将数据整理后,存储到外部存储器中。
串口数据到来时,引发串口中断,串口中断处理程序唤醒数据接收任务。数据接收任务完成数据包的接收,并根
据通信数据包的特点进行错误处理。数据包被正确接收后,唤醒命令处理任务。命令处理任务判断数据包的校验
和,若正确就处理相应的命令。命令处理完成以后,将回应数据打包,然后唤醒发送数据任务,将数据通过串口发
送出去。
每个任务均采用以下结构。
while(1)
{
OSWait(K_SIG, 0); // 任务睡眠,等待任务唤醒处理过程
}
任务的唤醒用OSTaskResume(TASK_ID)完成。
串口接收和发送处理采用队列模式,设立发送和接收两个缓冲区,独立的进出队列处理。数据解包和数据打包采
用单独处理方式,这样单独处理通信协议,以利于今后协议的改动。
串口缓冲I/。
系统节拍设置:将OS_TICKS_PER_SEC设为20,即系统时钟节拍为每秒20次。定义定时器0的中断时间设为50ms。
#define m_Fosc 11059200L
#define m_TIME 65536L - (m_Fosc / (OS_TICKS_PER_SEC *
12L))
void InitTimer0(void) {
TMOD = (TMOD & 0xF0) | 0x01;
TH0 = m_TIME / 256;
TL0 = m_TIME % 256;
ET0 = 1;
TF0 = 0;
}
[image3]
TestSys任务定时检测各任务的回应,若长时间没有回应,则启动复位功能,热启动整个系统,以保证系统的可
靠性。
由于单片机采用AT89C52,片内RAM为256,使用DS12887中的一部分RAM作为扩展。队列长度各为15个字节时,程
序经过9级优化后,RAM占用140字节,XRAM占用106字节。由于系统RAM很小,因此,没有使用信号量和消息进行数
据传输。在其它应用时,可以根据系统资源进行信号量和消息的使用,这样可以更有效地使任务运行。
4 结 论
在嵌入式系统中,使用RTOS是大势所趋,因为在大多数情况下编程效率比执行效率重要。利用Small RTOS多任务
系统设计,可以使51单片机发挥的更有效,并且今后的软件维护和改进更方便,更可靠。
上一篇:如何正确选择低压压力传感器
全年征稿/资讯合作
联系邮箱:1271141964@qq.com
- 凡本网注明"来源:智能制造网"的所有作品,版权均属于智能制造网,转载请必须注明智能制造网,https://www.gkzhan.com。违反者本网将追究相关法律责任。
- 企业发布的公司新闻、技术文章、资料下载等内容,如涉及侵权、违规遭投诉的,一律由发布企业自行承担责任,本网有权删除内容并追溯责任。
- 本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。
- 如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
编辑精选
更多- 国内环境光传感器芯片行业迎来黄金发展期 参数测试提高该类芯片商用品质
- 电气工程施工质量:装配式建筑安全的“生命线”
- 宁德时代北京车展发布神行PLUS:首款1000公里续航+4C超充磷酸铁锂电池
- 工业和信息化部、科学技术部、北京市人民政府印发《中关村世界领先科技园区建设方案(2024—2027年)》
工业和信息化部、科学技术部、北京市人民政府印发《中关村世界领先科技园区建设方案(2024—2027年)》
展望2035年,全面建成世界领先科技园区,中关村的影响力、竞争力、引领力全球领先,为建成科技强国【详细】
- 晶圆守护者!ABB机器人助力半导体精密“智”造
- 为期三年!工信部等六部门部署全面开展绿色建材下乡活动
- 中水集团与上海海洋大学联合研发的海鹰AI系统正式发布
- 2024年一季度工业经济“成绩单”出炉 这9个工业大省成绩亮眼