本帖最后由 少先队员 于 2015-6-5 11:32 编辑
求助,折腾好几天了。
程序如下,在任务中等待一个信号量,pend信号量之后调用一个函数发送一个数据包,这个数据包发送完毕再post这个信号量。现在的问题是:nfc_cmd_flag为1的时候发送完"cmd has recv.\r\n"之后没有发送 "pack check ok.\r\n",如果在"pack check ok.\r\n"前一句的pend一行打上断点,停一下再继续运行就能发送"pack check ok.\r\n"。
真是奇怪,
第一、为什么打上断点再运行就能发送,直接全速运行就发不出来呢?
第二、为什么第一句的cmd recv还没有发送完,这时信号量还没有释放,为什么没有等待信号量呢?
求指点,谢谢!
void nfc_task(void *p_arg)
{
nfc_hard_init();
sem_u3_tx = OSSemCreate(1);
while(1)
{
if(nfc_cmd_flag==1)
{
nfc_cmd_flag = 0;
OSSemPend(sem_u3_tx,0,&err);
u3_send("cmd has recv.\r\n", sizeof("cmd has recv.\r\n"));
if(nfc_pack_check((&u3_rcv_buf[5]), u3_rcv_cnt-6))
{
OSSemPend(sem_u3_tx,100,&err);
u3_send("pack check ok.\r\n", sizeof("pack check ok.\r\n"));
}
u3_rcv_cnt = 0;
}
OSTimeDlyHMSM(0, 0,0,10);
}
}
void USART3_IRQHandler(void)
{
if(USART_GetITStatus(USART3, USART_IT_TXE) != RESET)
{
USART3->DR = *(u3_tx_ptr+u3_tx_cur);
u3_tx_cur++;
if(u3_tx_cur==u3_tx_size)
{
USART_ITConfig(USART3, USART_IT_TXE, DISABLE);
OSSemPost(sem_u3_tx);
}
USART_ClearITPendingBit(USART3, USART_IT_TXE); //
}
} |