烧写
由于芯片的内部SPI FLASH的0级BOOT 程序起到到开启JTAG SW 仿真功能,一旦内部SPI FLASH存储的BL0启动代码被损坏,芯片的JTAG 将不能被连接。所以对BL0的烧写需要谨慎,烧写BL0过程保证芯片不断电。
如果烧写了多备份的启动代码(该代码不能进行内部SPI FLASH的烧写功能),更新FLASH内容需要使用非多份的启动代码进行FLASH烧写。
打开工程 点击,download and debug 按钮,然后立即上电或复位设备。
下载完成后状态
保证USB 升级接口正常连接电脑,让后点击Go 按钮
库文件生成
参考
屏蔽不用生成库的文件
删除不用生成库的文件
把要生成的.C保留,调用的.C 去除。比如main.C 去掉
生成库
在 Debug /Exe下
恢复到正常模式在设置中选择
使用LIB修改linker 设置
建议使用相对路径 P R O J D I R PROJ_DIR PROJDIR
设定程序运行地址
关于启动的起始位置(否则编译后BIN可能为空)使用报错
使用出现问题
正确处理
设置程序启动在指定位置。
错误处理取消沟通选(指标不治本,会发现main 不能打断点):
IAR官方有这样的介绍
Introduction
The application consists of two IAR Embedded Workbench projects, where the 1st project is linking the 2nd application as a binary image.
Issue
The startup code of the 2nd application is also included in the binary image. The issue is to reduce the size of the linked output. Only the startup code of the main project is needed, as it is in the 1st application execution starts.
我认为大概意思是对应第二部分程序,不需要启动代码可以不选择 entry symbol
部分程序可能需要启动初始化过程可能设置为No entry symbol ,正常jtag 调试需要设置entry symbol 。
不同情况可能需要修改,调试可能报错
宏定义
编译后处理
root 关键字
原文连接
定义:#define PAGE_ADDRESS 0x6000
__root __code const unsigned char IEEE_ADDRESS[8] @ PAGE_ADDRESS = { 'i','e','e','e','b','u','f',0};
__root 是IAR的扩展关键字,强制编译,保证没有使用的函数或者变量也能够包含在目标代码中
__code数据存储在code(程序区),对应的date为数据区
@的强制定义了数据的存储地址
上面的定义实际就是把IEEE_ADDRESS的数据强制写入到0x6000中。