完善资料让更多小伙伴认识你,还能领取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了
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1092 浏览 0 评论
3044 浏览 0 评论
图腾柱PFC无法上升至400V,且电感电流为正弦波形,但是幅值极小
9411 浏览 0 评论
飞凌嵌入式ElfBoard-Vim编辑器之静态链接和动态链接
2900 浏览 0 评论
使用 LinkBoy 将程序导出为 C 语言代码并烧录至 Arduino ESP32 开发板
2305 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 14:10 , Processed in 0.519235 second(s), Total 42, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1969