一般在ucos任务里面的常用结构如下
while (DEF_ON) { /* Task body, always written as an infinite loop. */
p_msg = OSQPend(&UsbRxQ,
0, //timeout 0表示永远等待
OS_OPT_PEND_BLOCKING,
&msg_size,
&ts,
&err);
PrintfBuffer("usb rx:",(char *)p_msg, 16);
OSMemPut(&UsbRxMem, (void *)p_msg, &err); //free memory block, pointer is msg, from BTRxMem
usb_send("HELLO", 16);
}
要么是pend到一个event(包括信号量等)
要么是
while (DEF_ON) { /* Task body, always written as an infinite loop. */
LED_LED1_ON();
OSTimeDlyHMSM(0, 0, 0, 100,
OS_OPT_TIME_HMSM_STRICT,
&err);
LED_LED1_OFF();
OSTimeDlyHMSM(0, 0, 0, 100,
OS_OPT_TIME_HMSM_STRICT,
&err);
}
且不论你在CAN总线的操作上有没有什么问题,首先你要先解决你ucos程序结构上的问题,才能再考虑对资源的操作
如果调试CAN,可以先用供应商的代码,其实CAN只要知道那 10几20个寄存器的配置,是相当简单的。
|