سلام دوستان.
من برای کنترلر LPC1788 یه برنامه ساده نوشتم که یه ماژول gps از طریق وقفه UART هر ثانیه یک بار اطلاعات میفرسته و کنترلر در روتین وقفه evt تسک اول رو فعال میکنه. و داخل تسک اول هم تابع خواندن و دیکد کردن دیتای NMEA اجرا می شه. ولی هر کاری می کنم جواب نمیده و تسک ها اجرا نمی شن. اگر وقفه رو غیر فعال کنم تسکها اجرا می شن ولی وقتی وقفه اومد دگ هیچ تسکی اجرا نمی شه. البته بدون RTX وقفه و تابع دریافت رو چک کردم کامل کار میکنه. الان می خوام تسک هارو اضافه کنم جواب نمیده. اینم کدش :
من برای کنترلر LPC1788 یه برنامه ساده نوشتم که یه ماژول gps از طریق وقفه UART هر ثانیه یک بار اطلاعات میفرسته و کنترلر در روتین وقفه evt تسک اول رو فعال میکنه. و داخل تسک اول هم تابع خواندن و دیکد کردن دیتای NMEA اجرا می شه. ولی هر کاری می کنم جواب نمیده و تسک ها اجرا نمی شن. اگر وقفه رو غیر فعال کنم تسکها اجرا می شن ولی وقتی وقفه اومد دگ هیچ تسکی اجرا نمی شه. البته بدون RTX وقفه و تابع دریافت رو چک کردم کامل کار میکنه. الان می خوام تسک هارو اضافه کنم جواب نمیده. اینم کدش :
OS_TID task_ID1,task_ID2,task_ID3;
/////////////////////////////////////////////
void gds3(char serport){
char str[1000];
int i=0,m=0,n=1;
while(n==1){
str[i]=UARTGetChar(serport);
if(strstr(str,"ANTS"))
m=1;
if(str[i]==13 & m==1)
n=0;
if(str[i]!=13 & str[i]!=10)
i++;
}
GUI_Text(8,300,str,Green,Black);
}
//////////////////////////////////////////////////
__task void task1(void){
os_evt_wait_or(0x0001,0xffff);
while(1){
gds3(UART_0);
}
////////////////////////////////////////////////////
__task void task2(void){
while(1){
}
}
/////////////////////////////////////////////////////
__task void task3(void){
while(1){
}
}
/////////////////////////////////////////////////////
__task void task_init(void){
task_ID1=os_tsk_create(task1,1);
task_ID2=os_tsk_create(task2,1);
task_ID3=os_tsk_create(task3,1);
os_tsk_delete_self();
}
////////////////////////////////////////////////////
void UART0_Init2(){
UART_CFG_Type UART0_CFG;
UART_FIFO_CFG_Type UART0_FIFO_CGF;
UART0_CFG.Parity=UART_PARITY_NONE;
UART0_CFG.Baud_rate=115200;
UART0_CFG.Databits=UART_DATABIT_8;
UART0_CFG.Stopbits=UART_STOPBIT_1;
UART_FIFOConfigStructInit(&UART0_FIFO_CGF);
UART_FIFOConfig(UART_0,&UART0_FIFO_CGF);
PINSEL_ConfigPin(0,2,1);
PINSEL_ConfigPin(0,3,1);
UART_Init(UART_0, &UART0_CFG);
UART_TxCmd(UART_0,ENABLE);
UART_IntConfig(UART_0,UART_INTCFG_RBR,ENABLE);
NVIC_EnableIRQ(UART0_IRQn);
NVIC_SetPriority(UART0_IRQn,10);
}
///////////////////////////////////////////////////////
void UART0_IRQHandler(void){
isr_evt_set(0x0001,task_ID1);
}
/////////////////////////////////////////////////////
int main(void){
SDRAM_32M_16BIT_Init();
GLCD_Init();
GLCD_Clear(Black);
UART0_Init2();
Delay(5000);
os_sys_init(task_init);
while(1){
}
return 0;
}
دیدگاه