赞
踩
目录
最近项目用到arduino开发,需要用到freeRTOS.觉得这个实时系统的本质就是一个定时器时钟节拍下的任务调度处理。通过创建不同的任务,替代了原来写裸机程序时需要自己配置定时器并完成各个函数或子程序的协调运行问题。这种方式简化了程序搭建过程,使得用户可以把精力放到产品功能设计上。按键或定时器中断和裸机编程类似。
系统本身引入了一些信号量、消息、临界代码段的概念,需要多多实践即可熟练应用。ESP32对系统做了一些定制化的修改,比如临界段函数taskENTER_CRITICAL(&mux);需要传入一个portMUX_TYPE类型的参数。下面写一个我碰到的问题及处理。
- 09:11:06.658 -> rst:0x8 (TG1WDT_SYS_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
- 09:11:06.658 -> configsip: 0, SPIWP:0xee
- 09:11:06.658 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
- 09:11:06.658 -> mode:DIO, clock div:1
- 09:11:06.691 -> load:0x3fff0018,len:4
- 09:11:06.691 -> load:0x3fff001c,len:1216
- 09:11:06.691 -> ho 0 tail 12 room 4
- 09:11:06.691 -> load:0x40078000,len:9720
- 09:11:06.691 -> ho 0 tail 12 room 4
- 09:11:06.691 -> load:0x40080400,len:6352
- 09:11:06.691 -> entry 0x400806b8
- 09:11:08.062 -> ets Jul 29 2019 12:21:46
- 09:11:08.062 ->
系统复位,出现rst:0x8 (TG1WDT_SYS_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT),原因是任务栈数据溢出,将任务栈大小配置为2048后,程序正常启动并运行。记得原来用STM32的时候,任务栈用不了这么大,可能原因是arduino代码比较吃内存,毕竟用的是别人写好的库,我测试的工程中用了别人写好的oled库,函数的嵌套和调用比较多导致。
- xTaskCreatePinnedToCore(
- TaskTerminal, "TaskTerminal", 1024 // Stack size
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。