完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在使用libmodbus从机,我看论坛上面有道友给了从机的例子,我就想问那个轮询的函数不需要加延时嘛?不加延时,其他的线程怎么运行呢?
static void mb_slave_thread(void *param) { modbus_t *ctx = RT_NULL; int rc = 0; modbus_mapping_t *mb_mapping = NULL; /* 线圈与寄存器 */ uint8_t mb_reply[MODBUS_TCP_MAX_ADU_LENGTH]; ctx = modbus_new_rtu("/dev/uart3", 115200, 'N', 8, 1); /* uart3 */ modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS485); modbus_rtu_set_rts(ctx, RS485_RE, MODBUS_RTU_RTS_UP); modbus_set_slave(ctx, 3); /* 设置从机地址 */ mb_mapping = modbus_mapping_new(16, 16, 10, 10); if (mb_mapping == RT_NULL) { rt_kprintf("modbus_mapping_new failed! n"); modbus_free(ctx); return; } mb_mapping->tab_registers[0] = 'R'; mb_mapping->tab_registers[1] = 'T'; mb_mapping->tab_registers[2] = '-'; mb_mapping->tab_registers[3] = 'T'; mb_mapping->tab_registers[4] = 'h'; mb_mapping->tab_registers[5] = 'r'; mb_mapping->tab_registers[6] = 'e'; mb_mapping->tab_registers[7] = 'a'; mb_mapping->tab_registers[8] = 'd'; modbus_connect(ctx); while (1) { //modbus loop rc = modbus_receive(ctx, mb_reply); if (rc > 0) { modbus_reply(ctx, mb_reply, rc, mb_mapping); } else if (rc == -1) { /* Connection closed by the client or error */ break; } } modbus_close(ctx); modbus_free(ctx); } 这个线程不需要加延时嘛? |
|
相关推荐
1个回答
|
|
modbus_receive 这个函数如果是阻塞的,它内部有让出 cpu 行为,不需要用延时让出 cpu了
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
809 浏览 0 评论
5200 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2672 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
3017 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
32232 浏览 11 评论
73229 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 13:15 , Processed in 0.667318 second(s), Total 42, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号