欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 求問FreeRtos有沒有某個函數可使程序的線程直接跳轉 [打印本頁]

作者: zhyixi    時間: 2021-6-20 21:53
標題: 求問FreeRtos有沒有某個函數可使程序的線程直接跳轉
小弟最近移植了一個FreeRtos到STM32F103CB系列的芯片中,遇到一個問題,問題如下:
{

    //創建數據發送任務
    xTaskCreate((TaskFunction_t )gsm4_task,            
                (const char*    )"gsm4_task",           
                (uint16_t       )GSM4_STK_SIZE,        
                (void*          )NULL,                  
                (UBaseType_t    )GSM4_TASK_PRIO,        
                (TaskHandle_t*  )&Gsm4Task_Handler);
                              
        //創建數據解析任務
    xTaskCreate((TaskFunction_t )gsm4_data_task,            
                (const char*    )"gsm4_data_task",           
                (uint16_t       )GSM4_DATA_STK_SIZE,        
                (void*          )NULL,                  
                (UBaseType_t    )GSM4_DATA_TASK_PRIO,        
                (TaskHandle_t*  )&gsm4_data_Task_Handler);
                              
    //創建聯網任務
    xTaskCreate((TaskFunction_t )gsm4_check_task,            
                (const char*    )"gsm4_check_task",           
                (uint16_t       )GSM4_CHECK_STK_SIZE,        
                (void*          )NULL,                  
                (UBaseType_t    )GSM4_CHECK_TASK_PRIO,        
                (TaskHandle_t*  )&Gsm4_check_Task_Handler);
                              
    //創建TASK2任務
        //采集數據任務
    xTaskCreate((TaskFunction_t )task2_task,     
                (const char*    )"task2_task",   
                (uint16_t       )TASK2_STK_SIZE,
                (void*          )NULL,
                (UBaseType_t    )TASK2_TASK_PRIO,
                (TaskHandle_t*  )&Task2Task_Handler);




}
    如上是我的一系列任務函數,在task2_task任務中,我有一個使用485采集數據函數。如下:
   {
   xTaskNotifyGive(Task2Task_Handler);//發送采集數據任務通知,采集數據
        while(1)
        {
        NotifyValue=ulTaskNotifyTake(pdTRUE,0);        //獲取任務通知
        xTaskNotifyGive(Task2Task_Handler);//發送采集數據任務通知,采集數據
               
                if(NotifyValue==1)                                                                        //清零之前的任務通知值為1,說明任務通知有效
                {
                        vTaskSuspend(Oled_Task_Handler);
                        my_printf("7WAITTING...");
                        memset(buf,0,sizeof(buf));        //清空數據緩存
                        memset(ec_data.value,0,sizeof(ec_data.value));        //清空數據緩存
                        // u3_printf("接收到任務通知,采集數據\r\n");

                        Event_Scheduling();
                 }
        }
   }   
    在該函數中,我用來采集某個傳感器的數據,但應要求,這必須得在一個周期內采集完成,采集完成后,需要計算這個數據的每秒的輸出量。
    其架構大概就是:
    0-20s采集數據
    25s計算數據
    30s清空485串口的緩沖區
    所以我使用了一個TIM2去計時,然后發現,我的定時器計數,但是系統沒有執行我原本設想的485發送數據函數。
   
   串口1的發送數據是我用于調試使用的。
   然而我發現定時器有在不停計數,但是并沒有執行我的任務。
  {
rain_time = 195
rain_time = 196
rain_time = 197
rain_time = 198
rain_tim% = 199
vain_time0= 200
rain_time = 201
卹ain_time = 202

  }
   按照我的設定在時間等于20s 即計數為200時,并且發送485數據,且延時4s。但實際上并沒有執行我的函數, 我個人猜測是任務執行過程中,即使滿足了其時間的條件,本質上也還是沒有進入到該函數中,估計在跑其他任務(我個人猜測)。
   最后小弟請問該怎么才能解決這個問題,麻煩各位大佬了!!

1.png (49.76 KB, 下載次數: 42)

1.png

作者: yzwzfyz    時間: 2021-6-21 17:37
先畫個流程圖,在邏輯上要走得通,而后再寫程序。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1