TI中文支持网
TI专业的中文技术问题咨询交流网站

zigbee在Task中对数组赋值导致系统死机

我在用cc2652的zigbee做无线传感器节点时,发现在Task中将ADC数据缓存到数组中时偶尔会导致系统死机,数组没有越界。

不知这是代码问题还是操作系统的问题。麻烦TI工程师帮忙解决一下。

typedef struct MsgObj {
uint16_t data[PACKAGE_LEN];
} MsgObj;

Void myTask_Fun(UArg a0, UArg a1)
{//dacADC_Handleadc;ADC_Paramsparams;int_fast16_t res;static int count=0;//dataMsgObj msg;GPIO_init();ADC_init();ADC_Params_init(&params);adc = ADC_open(CONFIG_ADC_0, &params);if (adc == NULL) {UART_write(uart,b1,sizeof(b1));while (1);}while(1){//采样if((GPIO_read(CONFIG_GPIO_1)==0)&&(GPIO_read(CONFIG_GPIO_2)==0)){res = ADC_convert(adc, &adcValue0);if (res == ADC_STATUS_SUCCESS) {msg.data[count]=adcValue0;//数组没有越界,但赋值偶尔会导致系统死机count++;}}if(count>=PACKAGE_LEN){sendflag=1;count = 0;Mailbox_post(mbxHandle, &msg, BIOS_NO_WAIT);Semaphore_post(appSemHandle);GPIO_toggle(CONFIG_GPIO_3);}Task_sleep(3 * (1000 / Clock_tickPeriod));}
}

 

Viki Shi:

你有追踪过代码吗?是不是卡在这段了:
if (adc == NULL) {UART_write(uart,b1,sizeof(b1));while (1);}

Viki Shi:

推荐参考官方的ADC例程:dev.ti.com/…/node

Daoming Liu:

回复 Viki Shi:

您好,UART那里没有问题。确实在赋值部分出现问题,已经调试很多次了,只要有赋值那段就会偶尔出现死机。

YiKai Chen:

回复 Daoming Liu:

你MsgObj的結構定義可以貼上來看看嗎?

Daoming Liu:

回复 YiKai Chen:

typedef struct MsgObj { uint16_t data[PACKAGE_LEN]; } MsgObj; 您好,程序涉及到Task之间的数据传递。只要把数据放赋值到缓存数组就会偶尔出现死机情况。

YiKai Chen:

回复 Daoming Liu:

先不做msg.data[count]=adcValue0;這一行会不会出现死机情况?

Daoming Liu:

回复 YiKai Chen:

不会!

YiKai Chen:

回复 Daoming Liu:

看起來msg.data[count]=adcValue0;這一行不会有什麼問題才是,你程序涉及到Task之间的数据传的部份可以描述一下嗎?

Daoming Liu:

回复 YiKai Chen:

我在ADC采集Task中使用Mailbox_post(mbxHandle, &msg, BIOS_NO_WAIT)传递采集的数据到Zigbee Task,中使用Mailbox_pend(mbxHandle, &adcmsg, BIOS_WAIT_FOREVER)将传入的数据放到adcmsg中。
现在我改使用Queue进行数据传递,使用Queue_put和Queue_get API进行传递,还是有相同的问题,只要进行赋值就会出现问题。

YiKai Chen:

回复 Daoming Liu:

你把msg宣告成全域變數應該就不會有問題

赞(0)
未经允许不得转载:TI中文支持网 » zigbee在Task中对数组赋值导致系统死机
分享到: 更多 (0)