基于uC/OS-II的远程多点温度监测系统
来源:21IC 作者:—— 时间:2011-09-30 14:25
XBPSTACK EQU 1 ; //选用LARGE模式
XBPSTACKTOP EQU 1000H ; //设置再入栈栈顶指针
在移植过程中主要完成对以下五个文件的修改:与CPU相关的文件OS_CPU_A.ASM、OS_CPU_C.C、OS_CPU.H和与应用相关的文件OS_CFG.H、INCLUDES.H。
其移植过程在这里不是重点,下面简要介绍与应用相关较紧密的部分设置。
0S-CPU.H:
#define OS_CRITICAL_ METHOD 1 //中断方式1
#if OS_CRITICAL_METHOD == 1
#define OS_ENTER_ CRITICAL() EA=0
//关中断
#define OS_EXIT_CRITICAL() EA=1 //开中断
#endif
OS_CFG.H:
OSTimeDlyHMSM()函数使应用程序无需知道延时时间对应的时钟节拍数,直接按小时、分、秒、毫秒来定义时间,方便对任务运行时间进行管理。
#define OS_TIME_DLY_ HMSM_EN 1
//允许使用函数OSTimeDly HMSM()。
由于每个嵌入式监测系统可以同时与多个PC机连接,向不同用户提供信息,因此可在OS_CFG.H头文件中定义一个包含各种连接信息的结构变量。当TCP报文到时,使用连接状态信息检查是否与已存在的连接相符,如果不存在则建立新的连接。这种处理可以使嵌入式监测系统同时处理来自同一或不同PC机的连接。
typedef struct
{
INT32U ipaddr;
INT16U port;
INT8U timer;
INT8U inactivity;
INT8U state;
char query[20];
} CONNECTION;
在ARP协议部分,嵌入式系统将收到的IP数据报的物理地址存放在一结构变量中。如果是向同一PC机发送数据报,不需要再次发送ARP请求就可得到目的主机的物理地址,减少了建立连接的时间。
typedef struct
{
INT32U ipaddr;
INT8U hwaddr[6];
} ARP_CACHE;
在其中设置每个嵌入式系统的MAC地址、IP地址、子网掩码和网关地址。
uC/OS-II中任务创建及优先级设置
C8051F020的XRAM做输入/输出数据的内部缓冲区,RTL8019AS内部的16K SRAM做单片机的外部数据缓冲区,存储输入/输出以太帧队列。这样C8051020就可以采用查询方式读取以太帧,并有充足的时间处理数据。由于输入帧的大小不定,同时在ARP数据报发送或接收时,输出帧必须存在输出缓冲区中,因此,输入/输出数据缓冲区在C8051F020的XRAM中使用动态分配,由KEIL C51 提供的malloc()和free()函数完成。网页存储于单片机的FLASH存储器中。当嵌入式系统向PC机发送网页时,先将网页从FLASH存储器中取出放入XRAM,再根据用户请求进行整理后放入RTL8019AS的SRAM,并发送到以太网上。
作为网络服务器,C8051F020需要注意以下几点:
1) 服务器向一客户机发送ARP查询分组后,如果在0.5秒内未收到ARP响应分组,则重发。
2) 如果TCP连接在0.5秒内未被激活,则调用初始化断开连接程序,防止两个TCP之间的连接处理长时期空闲。
3) 为了控制丢失数据报,TCP在规定时间(0.5秒)内如果没有收到确认包 ,就重组这个包并发送 ,这样不需要占用存储区来存储包。当收到客户机接收到信息包的确认报后 ,就断开连接。
uC/OS-II对系统的管理是通过对任务的管理来实现的。它把整个程序分成许多任务,每个任务相对独立。然后在每个任务中设置超时函数,一旦任务的延时时间到,任务必须交出 CPU 的使用权。根据需要,系统中创建了5个任务,设置如下:
任务1:OSTaskCreate(eth_ arive,0,&mystack1[0],4);// 查询RTL8019AS,是否有以太帧到达。
OSTimeDlyHMSM(0,0,0,500);// 延时0.5秒
任务2:OSTaskCreate(arp_ retran,0,&mystack2[0],5);//重发ARP分组
OSTimeDlyHMSM(0,0,1,0); // 延时1秒
任务3:OSTaskCreate(tcp_ inact,0,&mystack3[0],6);// 初始化断开连接
OSTimeDlyHMSM(0,0,1,500);// 延时1.5秒
任务4:OSTaskCreate(read _temp,0,&mystack3[0],7);// 读温度值
OSTimeDlyHMSM(0,0,2,0); // 延时7秒
任务5:OSTaskCreate(tcp_ retran,0,&mystack3[0],8);//TCP数据报重发
OSTimeDlyHMSM(0,0,2,500);// 延时2.5秒
结语
将网络功能嵌入到温度监测系统中,可在网络中接入多个节点,每个节点连接多个单总线传感器,以此实现真正的多点温度监测,以满足用户的需要。由于DS18B20是单总线温度传感器,本身的温度测量有些延时,因此在传输温度数据时需要几秒钟的等待时间,但对整个系统的影响不大。采用嵌入式实时操作系统mC/OS-II,提高了系统的实时性和可靠性,有利于用户的管理和对温度的实时监测。
用户可以利用广泛存在的以太网资源,通过浏览器直接访问节点,提高系统的开放性和互操作性,降低监控运行维护成本、提高监控运行维护效率。因此,基于嵌入式实时操作系统的嵌入式网络有着广阔的发展前景。
- •免费直播预告 | 从理论到实操,全面解析ADC/DAC芯片测试前沿方案!2025-06-17
- •摩尔斯微电子携手Gateworks,利用Wi-Fi HaLow革新工业连接2025-06-04
- •重磅!中国或禁止政府采购这类芯片和品牌2024-03-25
- •最新PMIC芯片市场竞争格局、供应商及发展趋势2024-03-19
- •出货量翻50多倍!这类芯片涨价20%!村田/ST/微芯/华邦电等最新现货行情 | 周行情137期2024-03-18
- •对标ST!这家国产厂商的该类芯片加速上车2024-03-15
- •马来西亚芯片的崛起2024-03-14
- •这些芯片,将大幅涨价2024-03-11
- •CITE2024开展倒计时 等你来看大模型、芯片、机器人、智能驾驶……2024-03-04
- •裁员潮!这些品类芯片售罄!ST/微芯/华邦等最新现货行情 | 周行情135期2024-03-04