开发自定义flash loader可能是一个复杂的过程,因为开发者很难通过常规方式调试flash loader。本文介绍一种调试flash loader的方法。
在开发自定义flash loader的过程中,可以使用semihosting printf调试flash loader的活动。总体思路是:
🔹使用semihosting printf构建Flash loader项目
🔹配置项目以生成Terminal I / O日志文件
在以下的示例项目中,实验工具使用STM32F429II-ACA 开发板和I-jet仿真器。
#使用semihosting printf构建Flash loader项目
1、从$TOOLKIT_DIR$\ src \ flashloader中打开Flash loader工作空间(在本例中为ST \ FlashSTM32F4xx)。
图1 FlashSTM32F4xx工程
2、选择正确的配置(在本例中选择配置FlashSTM32F4xxRAM192K_Dual)。
图2 选择FlashSTM32F4xxRAM192K_Dual配置
3、在flasher loader项目中,根据以下路径 Project > Options > General Options > Library Configuration > stdout/stderr: Via semihosting选择semihosting输出。
4、在FlashInit函数的开头添加__iar_data_init3()函数调用和printf语句,如下所示:
__iar_data_init3(); // Required to initialize .bss
parallelism = 1;
blankcheck = 0;
printf("Hello! World\n\n");
printf("image_size:%d\n\n", image_size);
图3 调用函数和添加printf语句
5、如果出现链接器错误:[Lp005]: placement includes a mix of sections with content and sections without content,则需要修改链接器配置文件。
将这些行注释掉:do not initialize { zi } 或do not initialize { section .bss }。
新添一行(如果该行不存在):initialize by copy { readwrite }。
6、在$ TOOLKIT_DIR $ \ config \ flashloader \ ST 中构建并替换原有的Flash loader.out文件。
#配置项目以生成Terminal I / O日志文件
Flash loader的printf输出在Terminal I / O窗口中是不可见。但是,它被记录在终端I / O日志文件中。
1、从Help > Information Center > Example Projects中打开STM32F429II-ACA LightEffects项目。
2、将调试器驱动程序临时更改为Simulator,以防无法使用I-jet或其他硬件仿真器启动调试会话:Project > Options > Debugger > Setup>Driver: Simulator。
3、通过选择Project > Download and Debug来启动调试会话。
4、通过选择Debug > Logging > Set Terminal I/O Log File来启用Terminal I / O日志文件
图5 设置Terminal I/O 日志文件
5、退出调试会话,然后将调试器驱动程序更改回I-jet:Project > Options > Debugger > Setup>Driver: I-jet。
6、通过选择Project > Download and Debug来启动新的调试会话。
7、现在,Flash loader的printf输出就记录在终端I / O日志文件中。
通过semihosting printf的调试方式和终端I / O日志文件记录输出信息的方式可以帮助我们实现自定义Flash loader的开发。
有关开发自定义flash loader的更多信息,参见IAR安装目录$ TOOLKIT_DIR $ \ doc \ FlashLoaderGuide.ENU.pdf中的Flash Loader Development Guide。