blavy 发表于 2015-1-4 17:13:07

单片机串口通信数据处理应该放在哪里

最近做到一个关于串口的问题,程序比较大,资源比较紧,做数据处理时串口接收到的数据不知道应该放在哪里了。
位置1、放在主程序循环,由定时器在数据发送完成后开始计时,到返回的数据接收完成结束,用来判定接收超时。
现象,当主循环做的事比较多时,其他的程序耗时比较多,运行到数据处理的时候可能总时间已超出超时标准。
位置2、放在中断里面
放在这里去做比位置1更不合理,因而舍弃。
不知道放在哪里了,难道只能移植通信协议?如modbus。。。

popo_new 发表于 2015-1-4 17:20:54

定义一个数组,尽量不要在中断里处理

blavy 发表于 2015-1-4 17:24:30

popo_new 发表于 2015-1-4 17:20
定义一个数组,尽量不要在中断里处理

是有一个数据缓存,只是处理的时候不知道放哪里。

xtrig 发表于 2015-1-4 17:27:16

前后台结构:中断内接收,后台处理;
RTOS结构:中断内接收,进程内处理。

nome 发表于 2015-1-4 17:35:15

{:lol:} 感觉你这个需要上 具有优先级抢占式的操作系统了。。。

luguobing 发表于 2015-1-4 17:47:30

我还是比较关心楼主的头像      求番号   {:lol:}

sbk100 发表于 2015-1-4 19:16:16

首先你的串口接收数据不能接一个等一个 阻塞操作不行 发送也是 用中断加环形队列 在主程序里用状态机处理数据

ijlc1314 发表于 2015-1-4 19:20:21

能改善现有代码吗

TimCheng 发表于 2015-1-4 19:32:34

耗时长的任务用状态机用时间片处理.

o0pingu0o1 发表于 2015-1-6 06:06:58

最好别在中断中处理

沸火 发表于 2015-1-6 15:18:45

串口接收使用串口中断,在定时器中断里使用两个标志位 一个是接收完成 一个是接收超时 在主循环里判断这两个标志位

blavy 发表于 2015-1-6 20:13:10

luguobing 发表于 2015-1-4 17:47
我还是比较关心楼主的头像      求番号

这个不清楚,我更好奇你的头象{:lol:}

瓶子 发表于 2015-1-6 20:50:35

进来学习,我也不知道怎么做比较好

小柯师傅 发表于 2015-1-6 22:15:07

串口桢,异步处理,基本功啊:-)

blavy 发表于 2015-1-7 14:41:37

小柯师傅 发表于 2015-1-6 22:15
串口桢,异步处理,基本功啊:-)

不懂,能不能讲一下{:handshake:}

babysnail 发表于 2015-1-7 14:43:59

fifo+时间片轮转,妥妥的!      

小柯师傅 发表于 2015-1-7 19:09:33

babysnail 发表于 2015-1-7 14:43
fifo+时间片轮转,妥妥的!

{:victory:}
主要就是要用队列异步

n0831 发表于 2015-1-7 19:25:34

超时,用单字节超时,中断只做简单的帧结构判断,接收够一帧后交给主程序处理。

mangoes 发表于 2015-1-7 19:31:19

接收中断里面跑状态机,用于识别帧头和帧尾以及将数据放到缓存里,同时通知主循环处理数据

shawyao 发表于 2015-1-7 20:10:34

串口中断里把数据放进队列里,主程序判断有数据就进行处理

snhsr 发表于 2015-1-11 11:18:40

急的事在中断里,不急的事在主程序。

xmm 发表于 2015-1-11 12:23:03

放中断里,程序一定要短否则会出问题
页: [1]
查看完整版本: 单片机串口通信数据处理应该放在哪里