中级会员
 
- 积分
- 396
- 金钱
- 396
- 注册时间
- 2015-1-23
- 在线时间
- 42 小时
|
5金钱
有个任务功能是向串口发送数据并利用与串口相连的模块以短信的方式发送出去,但是任务执行完后一直不释放CPU,而是在一直执行这个任务,请问是什么原因呢?
//短信发送任务
void TR800_task(void *pdata)
{
u8 sms_count=3;
u8 pData_2[]="53F757307EBF5DF26210529F64584E0BFF01";
u8 pData_3[]="53F757307EBF5DF2630263A56210529FFF01";
u8 pData_4[]="0020002000200020002000300030003053F7652F67F1\x1A\x00";
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
}
|
最佳答案
查看完整内容[请看2#楼]
[mw_shl_code=c,true]void packSms_PDU(u8 phone_count_tmp,u8 tmp[],u8 tmp1[])
{
u8 pOut1[12]="AT+CMGS=69\r";
u8 pOut2[255]="0011000D91688187495163F10008AA36003100320033003400350036003753F757307EBF5DF2630263A56210529FFF010020002000200020002000300030003053F7652F67F1\x1A\x00";//十位,七位+三位的支柱号
OS_ENTER_CRITICAL(); //进入临界区(无法被中断打断)
SendCmm2(pOut1,12); //pOut1[ ...
|