文章目录
一、ESP-IDF 环境配置
- 设置编译工具链:Setup Toolchain
- 克隆 ESP-IDF 代码仓库:本项目目前使用
release/v3.3
分支git clone -b release/v3.3 --recursive https://github.com/espressif/esp-idf.git
- 设置 ESP-IDF 环境变量:Setup Path to ESP-IDF
- 安装 Python 依赖包:Install the Required Python Packages
python -m pip install --user -r $IDF_PATH/requirements.txt
二、ESPlane2.0 源代码获取
对外发布的代码,目前放在 github 个人仓库
git clone https://github.com/qljz1993/ESPlane2.git
三、对 ESP-IDF 进行修改(可选)
注意: 为了避免工程配置出错,代码目录下附带了已经配置好的
esp32
和freertos
两个组件,可以实现对 ESP-IDF 对应组件的覆盖,无需在。
这两个组件来自 release/v3.3 分支,最近更新为20200306 (|6f9a7264ce20c6132fbd8309112630d0eb490fe4),如果使用同样版本的 ESP-IDF,可以
忽略以下配置过程
。以下配置过程仅在esp32
和freertos
两个组件更新时参考。
1. ESP32 链接脚本修改
目的:将 esplane 固件中的 带有param
或log
标签的变量,放置在连续的地址区域
在{IDF_PATH}/components/esp32/ld/esp32.project.ld.in
文件中找到drom0_0_seg
段,添加以下内容:
/* Parameters and log system datas >drom0_0_seg*/
_param_start = .;
KEEP(*(.param))
KEEP(*(.param.*))
_param_stop = .;
. = ALIGN(4);
_log_start = .;
KEEP(*(.log))
KEEP(*(.log.*))
_log_stop = .;
. = ALIGN(4);
添加完成后如下所示:
.flash.rodata :
{
_rodata_start = ABSOLUTE(.);
*(.rodata_desc .rodata_desc.*) /* Should be the first. App version info. DO NOT PUT ANYTHING BEFORE IT! */
*(.rodata_custom_desc .rodata_custom_desc.*) /* Should be the second. Custom app version info. DO NOT PUT ANYTHING BEFORE IT! */
mapping[flash_rodata]
*(.irom1.text) /* catch stray ICACHE_RODATA_ATTR */
*(.gnu.linkonce.r.*)
*(.rodata1)
__XT_EXCEPTION_TABLE_ = ABSOLUTE(.);
*(.xt_except_table)
*(.gcc_except_table .gcc_except_table.*)
*(.gnu.linkonce.e.*)
*(.gnu.version_r)
. = (. + 3) & ~ 3;
__eh_frame = ABSOLUTE(.);
KEEP(*(.eh_frame))
. = (. + 7) & ~ 3;
/* C++ constructor and destructor tables, properly ordered: */
__init_array_start = ABSOLUTE(.);
KEEP (*crtbegin.*(.ctors))
KEEP (*(EXCLUDE_FILE (*crtend.*) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
__init_array_end = ABSOLUTE(.);
KEEP (*crtbegin.*(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.*) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
/* C++ exception handlers table: */
__XT_EXCEPTION_DESCS_ = ABSOLUTE(.);
*(.xt_except_desc)
*(.gnu.linkonce.h.*)
__XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);
*(.xt_except_desc_end)
*(.dynamic)
*(.gnu.version_d)
/* Addresses of memory regions reserved via
SOC_RESERVE_MEMORY_REGION() */
soc_reserved_memory_region_start = ABSOLUTE(.);
KEEP (*(.reserved_memory_address))
soc_reserved_memory_region_end = ABSOLUTE(.);
_rodata_end = ABSOLUTE(.);
/* Literals are also RO data. */
_lit4_start = ABSOLUTE(.);
*(*.lit4)
*(.lit4.*)
*(.gnu.linkonce.lit4.*)
_lit4_end = ABSOLUTE(.);
. = ALIGN(4);
_thread_local_start = ABSOLUTE(.);
*(.tdata)
*(.tdata.*)
*(.tbss)
*(.tbss.*)
_thread_local_end = ABSOLUTE(.);
. = ALIGN(4);
/* Parameters and log system datas */
_param_start = .;
KEEP(*(.param))
KEEP(*(.param.*))
_param_stop = .;
. = ALIGN(4);
_log_start = .;
KEEP(*(.log))
KEEP(*(.log.*))
_log_stop = .;
. = ALIGN(4);
} >drom0_0_seg
2. 提高 PHY 增益
依次进入:Component config>>PHY>>Max WiFi TX power (dBm)
将 Max WiFi TX power
改为 20
3. FreeRTOS 配置文件修改
- a. 在中
FreeRTOSConfig.h
文件中修改下列内容:
//将configMINIMAL_STACK_SIZE修改为2048,默认768
#define configMINIMAL_STACK_SIZE 2048
//将INCLUDE_vTaskCleanUpResources修改为1,默认0
#define INCLUDE_vTaskCleanUpResources 1
//添加下列宏定义
#define configUSE_APPLICATION_TASK_TAG 1
#define configENABLE_TASK_SNAPSHOT 1
- b. 在
menuconfig
中修改下列内容:
依次进入:Component config>>freertos>> Tick rate (Hz)
将 Tick rate
改为 1000