|
本帖最后由 hbchf 于 2013-5-11 11:00 编辑
- #define ucos_debug
- #ifdef ucos_debug
- void uart_printf(uchar *buf,uchar len) //调试串口打印
- {
- OS_ERR err;
- uchar i;
- for(i = 0; i< len; i++)
- {
- USART_SendData(USART1,buf[i]);
- OSTimeDlyHMSM(0,0,0,1,OS_OPT_TIME_HMSM_STRICT,&err);
- }
- }
- #endif
复制代码- //处理用户卡交易流程
- static void Task_DecteCard(void *p_arg) //优先级=14
- {
- OS_ERR err;
- CPU_TS ts;
- uchar buf[50];
- while (1)
- {
- OSSemPend(&Cardflage,
- 0, //无限等待
- OS_OPT_PEND_BLOCKING,
- &ts,
- &err);
- if( err == OS_ERR_NONE)
- {
- sprintf((char*)buf,"Please take off the card!\r");
- #ifdef ucos_debug
- uart_printf(buf,strlen(buf));
- #endif
- }
- OSTimeDlyHMSM(0,0,0,100,OS_OPT_TIME_HMSM_STRICT,&err);
- }
- }
复制代码- static void Task_on_off_antenna(void *p_arg)//优先级 =9
- {
- OS_ERR err;
- static uchar ch;
- uchar buf[50];
- while (1)
- {
- OSTimeDlyHMSM(0,0,0,5,OS_OPT_TIME_HMSM_STRICT,&err);
- FM1715_CloseRF();
- OSTimeDlyHMSM(0,0,0,5,OS_OPT_TIME_HMSM_STRICT,&err);
- FM1715_OpenRF();
-
- memset(buf,0,sizeof(buf));
- ch = mcml_request(buf); //寻卡
- if(ch == FM1715_OK)
- {
- ch = 0x01;
- OSSemPost(&Cardflage,
- OS_OPT_POST_1,
- &err);
- sprintf((char*)buf,"Detected card!\r");
- #ifdef ucos_debug
- uart_printf(buf,strlen(buf));
- #endif
- GPIO_SetBits(GPIOB,GPIO_Pin_13);
- OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_HMSM_STRICT,&err);
- GPIO_ResetBits(GPIOB,GPIO_Pin_13);
- }
- OSTimeDlyHMSM(0,0,0,100,OS_OPT_TIME_HMSM_STRICT,&err);
- }
- }
复制代码 调试结果是,程序进入任务Task_on_off_antenna的L18后 成功释放信号量Cardflage后,任务立马跳到任务Task_DecteCard中了。
调试结果见下图1
按照任务之间优先级来理解 程序应该是执行完高优先级的任务再去别的任务的。很费解,麻烦高手帮我分析下!
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|