|
|
小弟最近移植了一個FreeRtos到STM32F103CB系列的芯片中,遇到一個問題,問題如下:
{
//創(chuàng)建數(shù)據(jù)發(fā)送任務(wù)
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);
//創(chuàng)建數(shù)據(jù)解析任務(wù)
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);
//創(chuàng)建聯(lián)網(wǎng)任務(wù)
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);
//創(chuàng)建TASK2任務(wù)
//采集數(shù)據(jù)任務(wù)
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);
}
如上是我的一系列任務(wù)函數(shù),在task2_task任務(wù)中,我有一個使用485采集數(shù)據(jù)函數(shù)。如下:
{
xTaskNotifyGive(Task2Task_Handler);//發(fā)送采集數(shù)據(jù)任務(wù)通知,采集數(shù)據(jù)
while(1)
{
NotifyValue=ulTaskNotifyTake(pdTRUE,0); //獲取任務(wù)通知
xTaskNotifyGive(Task2Task_Handler);//發(fā)送采集數(shù)據(jù)任務(wù)通知,采集數(shù)據(jù)
if(NotifyValue==1) //清零之前的任務(wù)通知值為1,說明任務(wù)通知有效
{
vTaskSuspend(Oled_Task_Handler);
my_printf("7WAITTING...");
memset(buf,0,sizeof(buf)); //清空數(shù)據(jù)緩存
memset(ec_data.value,0,sizeof(ec_data.value)); //清空數(shù)據(jù)緩存
// u3_printf("接收到任務(wù)通知,采集數(shù)據(jù)\r\n");
Event_Scheduling();
}
}
}
在該函數(shù)中,我用來采集某個傳感器的數(shù)據(jù),但應(yīng)要求,這必須得在一個周期內(nèi)采集完成,采集完成后,需要計算這個數(shù)據(jù)的每秒的輸出量。
其架構(gòu)大概就是:
0-20s采集數(shù)據(jù)
25s計算數(shù)據(jù)
30s清空485串口的緩沖區(qū)
所以我使用了一個TIM2去計時,然后發(fā)現(xiàn),我的定時器計數(shù),但是系統(tǒng)沒有執(zhí)行我原本設(shè)想的485發(fā)送數(shù)據(jù)函數(shù)。
串口1的發(fā)送數(shù)據(jù)是我用于調(diào)試使用的。
然而我發(fā)現(xiàn)定時器有在不停計數(shù),但是并沒有執(zhí)行我的任務(wù)。
{
rain_time = 195
rain_time = 196
rain_time = 197
rain_time = 198
rain_tim% = 199
vain_time0= 200
rain_time = 201
卹ain_time = 202
}
按照我的設(shè)定在時間等于20s 即計數(shù)為200時,并且發(fā)送485數(shù)據(jù),且延時4s。但實際上并沒有執(zhí)行我的函數(shù), 我個人猜測是任務(wù)執(zhí)行過程中,即使?jié)M足了其時間的條件,本質(zhì)上也還是沒有進入到該函數(shù)中,估計在跑其他任務(wù)(我個人猜測)。
最后小弟請問該怎么才能解決這個問題,麻煩各位大佬了!!
|
-
1.png
(49.76 KB, 下載次數(shù): 42)
下載附件
2021-9-14 19:30 上傳
|