FreeRTOS xTaskCreate 相关
Posted: Mon Jul 25, 2022 2:18 pm
哈喽,是这样的,我在main里用xTaskCreate创建了4个task任务,分别为gps_task,dht11_task,pt100_task,display_task。
gps_task任务为每秒读取gps数据,dht11_task任务为每秒读取dht11传感器数据,pt100_task任务为每秒读取pt100传感器数据,定时读取实现方式:vtaskDelay(1000/portTICK_PERIOD_MS)。
display_task任务为每30秒将上述数据通过esp_now传递给另一块自带e-paper显示屏的ESP32板子,将数据显示在墨水屏上。定时实现方式我尝试过两种,1.vtaskDelay(30000/portTICK_PERIOD_MS); 2. 用timer定时器设置30s中断,中断函数xSemaphoreGive,任务函数中xSemaphoreTake。
遇到的问题:前三个任务gps_task,dht11_task,pt100_task能正常同时运行,但当我开启display_task任务后,就会出现dht11_task任务看门狗跑飞的bug。
xTaskCreate()代码参数如图1,报错信息如图2
现象:
1.如果我在app_main中,将display_task任务前的vTaskDelay延时 时间增加为4s的话,在display_task任务启动后,dht11_task任务将会正常运行一段时间后,才会出现看门狗跑飞的报错, 如果我在display_task任务前不加延时, dht11_task任务将直接出现看门狗跑飞报错。
报错原因猜测:
1.xTaskCreate()参数中给的内存太多了,当display_task任务开启后,CPU资源没办法给到dht11,导致出现看门狗跑飞。我尝试过将内存减小为3072,但会出现task overflow报错,即内存溢出,导致直接将任务delete删除。
2.display_task任务中的30s导致cpu资源没办法给到dht11,从而出现看门狗跑飞报错。但我尝试过改为10s,结果依然如此。
想得到的知识:
1.报错原因究竟是啥。
2.如何合理使用xTaskCreate来创建任务,如何合理分配任务内存以及cpu资源,更深层次:我能人为安排task任务所属的cpu吗?
3.我的代码结构从您专业开发人员的角度来看,合理不?(可能我的代码是小学生级别,哈哈哈)
4.如何较好地实现display_task任务中的“每30s”需求?让其在等待的同时,不占用cpu资源?
乐鑫爱,哒么么!
gps_task任务为每秒读取gps数据,dht11_task任务为每秒读取dht11传感器数据,pt100_task任务为每秒读取pt100传感器数据,定时读取实现方式:vtaskDelay(1000/portTICK_PERIOD_MS)。
display_task任务为每30秒将上述数据通过esp_now传递给另一块自带e-paper显示屏的ESP32板子,将数据显示在墨水屏上。定时实现方式我尝试过两种,1.vtaskDelay(30000/portTICK_PERIOD_MS); 2. 用timer定时器设置30s中断,中断函数xSemaphoreGive,任务函数中xSemaphoreTake。
遇到的问题:前三个任务gps_task,dht11_task,pt100_task能正常同时运行,但当我开启display_task任务后,就会出现dht11_task任务看门狗跑飞的bug。
xTaskCreate()代码参数如图1,报错信息如图2
现象:
1.如果我在app_main中,将display_task任务前的vTaskDelay延时 时间增加为4s的话,在display_task任务启动后,dht11_task任务将会正常运行一段时间后,才会出现看门狗跑飞的报错, 如果我在display_task任务前不加延时, dht11_task任务将直接出现看门狗跑飞报错。
报错原因猜测:
1.xTaskCreate()参数中给的内存太多了,当display_task任务开启后,CPU资源没办法给到dht11,导致出现看门狗跑飞。我尝试过将内存减小为3072,但会出现task overflow报错,即内存溢出,导致直接将任务delete删除。
2.display_task任务中的30s导致cpu资源没办法给到dht11,从而出现看门狗跑飞报错。但我尝试过改为10s,结果依然如此。
想得到的知识:
1.报错原因究竟是啥。
2.如何合理使用xTaskCreate来创建任务,如何合理分配任务内存以及cpu资源,更深层次:我能人为安排task任务所属的cpu吗?
3.我的代码结构从您专业开发人员的角度来看,合理不?(可能我的代码是小学生级别,哈哈哈)
4.如何较好地实现display_task任务中的“每30s”需求?让其在等待的同时,不占用cpu资源?
乐鑫爱,哒么么!