中级会员
 
- 积分
- 256
- 金钱
- 256
- 注册时间
- 2015-1-15
- 在线时间
- 62 小时
|

楼主 |
发表于 2020-5-11 14:11:00
|
显示全部楼层
我找到耗时的地方
第一步:主机发送完一帧数据请求后使能串口接收,设置事件xEventGroupWaitBits
第二步:主机接收到一帧数据,定时器1800US后超时,我在定时器超时 xEventGroupSetBitsFromISR 设置事件
第三步:禁止发送,禁止接收,处理数据
代码如下
mb_port_serial_enable(MB_POLL_FALSE,MB_POLL_TRUE);// /*使能发送*/ // 串口发送一帧数据后 在串口中断中 xEventGroupSetBitsFromISR事件组置位
xEventGroupWaitBits( //等待 串口 发送完一帧数据
mb_poll_events_group,
MB_POLL_SEND_OVER_EVT,
pdTRUE,
pdFALSE,
MODBUS_POLL_SEND_TIMEOUT);
//串口发送完一帧数据后,进行接收从机响应
mb_port_serial_enable(MB_POLL_TRUE,MB_POLL_FALSE); /*使能接收*/ //串口接收完一帧数据,启动定时器,在定时器 1800US超时后 xEventGroupSetBitsFromISR 事件组置位
event = xEventGroupWaitBits(
mb_poll_events_group,
MB_POLL_RESPONSE_EVT,
pdTRUE,
pdFALSE,
MODBUS_POLL_RESPONSE_TIMEOUT);
/*禁止发送,禁止接收*/
mb_port_serial_enable(MB_POLL_FALSE,MB_POLL_FALSE);
我发现是从定时器超时xEventGroupSetBitsFromISR,到上面红色字体xEventGroupWaitBits这里消耗了30-50MS
难道是执行事件通讯消耗大量的时间?
|
|