完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
有个任务功能是向串口发送数据并利用与串口相连的模块以短信的方式发送出去,但是任务执行完后一直不释放CPU,而是在一直执行这个任务,请问是什么原因呢?
//短信发送任务 void TR800_task(void *pdata) { u8 sms_count=3; u8 pData_2[]="53F757307EBF5DF26210529F64584E0BFF01"; u8 pData_3[]="53F757307EBF5DF2630263A56210529FFF01"; u8 pData_4[]="0020002000200020002000300030003053F7652F67F1x1Ax00"; while(1) { if(send_flag2==0x0f) { OSIntEnter(); send_flag2=0x00; sms_count--; packSms_PDU(sms_count,pData_3,pData_4); OSIntExit(); } OStimeDlyHMSM(0,0,1,0); } } void USART2_IRQHandler(void) { u8 temp; #ifdef OS_CRITICAL_METHOD //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了. OSIntEnter(); #endif temp=USART2->DR; rx_buffer2[rx_counter2]=temp; //接收来自的数据 G=temp; // G=0x06; rx_counter2++; if(temp==10) //用C51汉字解决方案转换过来,回车符"0x0D"换行符"0x0A",所以我认为语句 //temp == 10中的10(十六进制的A)代表的就是0x0A,也就是说是换行符 { STA=1; rx_flag2--; if(rx_flag2==0) { rx_len2= rx_counter2; rx_counter2=0; rx_buffer_overflow2=0xff; } } #ifdef OS_CRITICAL_METHOD //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了. OSIntExit(); #endif } |
|
相关推荐
13个回答
|
|
[C] 纯文本查看 复制代码
void packSms_PDU(u8 phone_count_tmp,u8 tmp[],u8 tmp1[]){u8 pOut1[12]="AT+CMGS=69r"; u8 pOut2[255]="0011000D91688187495163F10008AA36003100320033003400350036003753F757307EBF5DF2630263A56210529FFF010020002000200020002000300030003053F7652F67F1x1Ax00";//十位,七位+三位的支柱号OS_ENTER_CRITICAL();//进入临界区(无法被中断打断) SendCmm2(pOut1,12); //pOut1[]="AT+CMGS=43r"; AT+CMGS表示发送信息 delay_ms1(200); SendCmm2(pOut2,148); delay_ms1(3000);OS_ENTER_CRITICAL();//进入临界区(无法被中断打断) // UartPutChar2("0011000D91688187495163F10008AA36003100320033003400350036003753F757307EBF5DF2630263A56210529FFF010020002000200020002000300030003053F7652F67F1x1Ax00",148); }试试 |
|
|
|
OSIntEnter();//这个是进中断才需要用到的中断嵌套用的吧?你task里用这个干啥?
send_flag2=0x00; sms_count--; packSms_PDU(sms_count,pData_3,pData_4); OSIntExit();//这个是进中断才需要用到的中断嵌套用的吧?你task里用这个干啥? |
|
|
|
调用的函数里有延时,不加这个函数执行不下去
|
|
|
|
调用函数有延时那系统不是有问题啊!?延时想办法自己做一个和ostimedly有关的计时即可啊,不影响任务切换
|
|
|
|
自己加了一个延时函数,把OSIntEnter去掉还是不能切换
|
|
|
|
你用的IAR的话看一下任务死在哪里了,还有看看任务优先级以及堆栈大小是否有冲突和过小的。
|
|
|
|
你对这方面很懂吗?可不可以加你,有些问题咨询你。
|
|
|
|
不能叫很懂,但是有问题就一定有原因,有原因就能找到解决方法,主要还是需要多遇到问题才能学到东西。你有什么问题字节论坛留下来不好吗?以后不记得还能找到
|
|
|
|
|
|
|
|
|
|
|
|
原本程序里的delay_ms();也具有任务切换的功能,换成这个也不行。我发现主要是SendCmm2(pOut1,12);SendCmm2(pOut2,148); ,去掉这两句能正常切换,不知道什么原因。
|
|
|
|
非常感谢,可以切换了
|
|
|
|
//彩信
void CAMERA_task(void *pdata) { // OS_CPU_SR cpu_sr=0; while(1) { if(send_flag2==0x0f) { // OS_ENTER_CRITICAL(); //进入临界区(无法被中断打断) send_flag2=0x00; jpg_upload(PIC_BUFFER); //CAMER+MMS BEEP_BL(1000); // OS_EXIT_CRITICAL(); //退出临界区(可以被中断打断) } delay_ms(10); } } 这个任务又切换不了了,您再给看看 实验54 UCOSII实验2-信号量和邮箱.rar (1.29 MB ) |
|
|
|
只有小组成员才能发言,加入小组>>
708 浏览 0 评论
1116 浏览 1 评论
2494 浏览 5 评论
2833 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2675 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
661浏览 9评论
671浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
789浏览 6评论
634浏览 5评论
679浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 03:22 , Processed in 1.491950 second(s), Total 106, Slave 85 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号