背景
我有一些微控制器的经验(Atmel AVR,PIC18,PIC32),但我在STM32方面还是很新的。
我需要维护/刷新一些由另一个开发人员编写的旧项目,因为某些原因无法解释这段代码。基本上,整个项目需要从CooCox迁移到STM32Cube IDE,并且需要进行严肃的重构。
除了一件事外,我几乎了解那个项目中的一切。
问题
我发现,在.isr_vector 节中有一些常量。
version
之前在.hex文件中覆盖)
代码及详细信息
#define VECTORS __attribute__ ((section (".isr_vector")))
#define VERSION 0x0348
// (...)
#define VERSION_L(VERSION&0xFF)
#define VERSION_H(VERSION>>8)
// (...)
const unsigned char VECTORS FREE3[] = "-------";
const unsigned char VECTORS SERIAL_NUMBER[] = {0xcf,0x93};
const unsigned char VECTORS FREE2[] = "-----";
const unsigned char VECTORS VERSION[] = {VERSION_L, VERSION_H, 0, 0, 20, 0, 5, 0, 26, 0 };
const unsigned char VECTORS NAME[] = " --------------------";
const unsigned char VECTORS FREE1[] = "---";我没有这个项目的原始链接文件,但我相信它是默认的,由CooCox生成。
我有一些用于生产的十六进制文件,我发现0xCF93 (初始序列号)在这里:

我不明白为什么这些数据存储在中断向量表部分。它看起来非常聪明的方式存储这样的东西在某个“已知的地方”,没有自定义链接脚本等。
1.这是STM32编程中的正常/常见实践吗?
2.如何确保正确分配实际向量表(在这些常量之前)?
“实向量表”在startup_stm32f10x_md.c -自动生成的CMSIS文件中。
发布于 2021-02-11 23:25:21
这一点也不正常,也不是一个好主意。
不过,正如你所看到的,它是有效的。它不是一个好主意的主要原因是因为它很难维护,正如你正在发现的。
正确的方法是将标题放在自定义的命名部分,并编辑链接器脚本,将其放在.isr_vector之后、.text或.init等之后。
我怀疑设置这个程序的人要么不想做工作,要么不知道怎么做,或者他们使用的IDE过于简单,不允许定制链接器脚本。
如果您想继续对图像标题的.isr_vector部分进行高举,有三种方法可以使真正的向量保持在需要的位置:
https://stackoverflow.com/questions/66164087
复制相似问题