本帖最后由 Jay_Lynn 于 2013-1-12 22:29 编辑
小弟最近做个项目:
两个单片机要串口通信,一个是CC2530,一个是STM8S003
CC2530中有个很小的操作系统,简单的事件驱动机制,这是个带zigbee的单片机
STM8S003就是便宜到死的那种单片机比STC51强点
CC2530是主单片机
STM8S003是从单片机
硬件连接:1.串口RX,
2.串口TX
3. STM8S003忙状态输出,令一头连到CC2530,当STM8S003单片机在忙高于响应串口命令的事件时候,这个线输出为高,CC2530每次发送命令给STM8S003都要检测这根线
4. CC2530正在发送数据状态输出,令一头连到STM8S003,CC2530想发命令就要至高这跟线,发完了立马拉低这跟线,STM8S003检测这跟线的,只有这跟线为高时才运行接收串口数据,这跟线为下降沿时,以这个为信号开始命令解析
当CC2530要发条命令问STMS003 现在LED2的状态是什么样的, STMS003回答:LED是开的状态 CC2530收到数据后把这个数据通过无线发送到PC机
请问这个流程怎么设计比较合理??请大虾斧正?能最高提高系统实时性,能让系统在恶劣环境中生存,我想了几天,现在脑子里一团浆糊
设置这样的规则:CC2530发给STM8S003的命令有两种,一种要应答的一种不要应答的
几个全局变量:要发送的命令数据负载buf, 应答回调函数指针 *pgobal_RX_data_CB(当为NULL时候表示不用应答) 要发送的命令gobal_CMD_send_now(当值为0xff时表示米有命令要发送)
任何一个CC2530中的任务要发数据给STMS003,要先填充发送buf,设置命令码,选择性设置 (应答回调函数指针 *pgobal_RX_data_CB)
CC2530发送时候调用系统的串口发送函数,函数是基于DMA机制的,对于APP层代码来说就是写内存,至于什么时候串口发送完成,APP层不关心
以下小弟想的方案,
设计概念
A.尽力保证系统实时性,因为CC2530内部任务多
B.数据传输过程中一定有可能出现误码,不相信串口传输可靠性
C.STMS003一定会在恶劣环境中死机,不相信STMS003能完全应答
我总觉得会降低系统实时性,(以下代码流程,状态机全部在CC2530中)
|