اطلاعیه

Collapse
No announcement yet.

مشکل اجرا نشدن تسکهای RTX بعد از وقوع وقفه UART در LPC1788

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل اجرا نشدن تسکهای RTX بعد از وقوع وقفه UART در LPC1788

    سلام دوستان.
    من برای کنترلر 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;
    }

    #2
    پاسخ : مشکل اجرا نشدن تسکهای RTX بعد از وقوع وقفه UART در LPC1788

    سلام .
    من با این مشکل مواجه شدم ،وقتی وقفه استفاده می کردم میکرو هنگ می کرد

    دیدگاه


      #3
      پاسخ : مشکل اجرا نشدن تسکهای RTX بعد از وقوع وقفه UART در LPC1788

      چاره ای براش پیدا نشد؟
      من تو برنامم باید هر 20 میلی ثانیه پورت سریال رو رفرش کنم. بعضی وقتا هم چندین بایت دیتا میاد و من باید اونارو هندل کنم.
      تازه وقفه برای تاچ هم هست
      با این اوصاف باید قید emwin رو تو rtx بزنم؟
      ---------------------------------------------------------
      تو rtx از وقفه استفاده کردم . برنامه اگر چه ساده بود بدون مشکل کار کرد. مونده برنامه با حجم بالاتر رو تست بزنم.
      جدیدترین ویرایش توسط ajapyy; ۲۲:۰۷ ۱۳۹۶/۰۷/۱۴.
      ---------
      .
      .
      ...........

      دیدگاه

      لطفا صبر کنید...
      X