|
楼主 |
发表于 2022-7-14 17:53:15
|
显示全部楼层
uint8_t MODH2_ReadParam_03H_addr(uint8_t addr,uint16_t _reg, uint16_t _num)
{
int32_t time1;
uint8_t i;
SlaveAddr_2 = addr;
for (i = 0; i < NUM; i++)
{
MODH2_Send03H (SlaveAddr_2, _reg, _num);
time1 = bsp_GetRunTime(); /* ¼Ç¼Ãüáî·¢ËíμÄ걿ì */
while (1)
{
bsp_Idle_2();
if (bsp_CheckRunTime(time1) > TIMEOUT)
{
break; /* í¨DÅ3¬ê±áË */
}
if (g_tModH2.fAck03H > 0)
{
break;
}
}
if (g_tModH2.fAck03H > 0)
{
break;
}
}
if (g_tModH2.fAck03H == 0)
{
return 0; /* í¨DÅ3¬ê±áË */
}
else
{
return 1; /* D′èë03H2Îêy3é1| */
}
}
完整的函数是这样子的
1.采用事件触发方式,不触发时正常扫描, 触发后还是会在超时时间内等待
2.如果做一个标志,在任务中不断判断超时时间到,程序向下执行会直接返回超时,还有就是循环等待过程中MODH2_ReadParam_03H_addr(1,0x06, 1)一直发送,而不是现在的发送一次等待接收完成后在发送 |
|