首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >某些常量可以存储在.isr_table部分吗?STM32F1微控制器

某些常量可以存储在.isr_table部分吗?STM32F1微控制器
EN

Stack Overflow用户
提问于 2021-02-11 22:46:51
回答 1查看 67关注 0票数 1

背景

我有一些微控制器的经验(Atmel AVR,PIC18,PIC32),但我在STM32方面还是很新的。

我需要维护/刷新一些由另一个开发人员编写的旧项目,因为某些原因无法解释这段代码。基本上,整个项目需要从CooCox迁移到STM32Cube IDE,并且需要进行严肃的重构。

除了一件事外,我几乎了解那个项目中的一切。

问题

我发现,在.isr_vector 中有一些常量。

version

  • probably
  • 软件构建/发布日期(2020-05-26)
  • serial编号(稍后在设备programming)

之前在.hex文件中覆盖)

代码及详细信息

代码语言:javascript
复制
#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文件中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-11 23:25:21

这一点也不正常,也不是一个好主意。

不过,正如你所看到的,它是有效的。它不是一个好主意的主要原因是因为它很难维护,正如你正在发现的。

正确的方法是将标题放在自定义的命名部分,并编辑链接器脚本,将其放在.isr_vector之后、.text或.init等之后。

我怀疑设置这个程序的人要么不想做工作,要么不知道怎么做,或者他们使用的IDE过于简单,不允许定制链接器脚本。

如果您想继续对图像标题的.isr_vector部分进行高举,有三种方法可以使真正的向量保持在需要的位置:

  1. 编辑链接器脚本,以指定名为.isr_vector *的文件中的.isr_vector位于其他文件的同一节之前(但如果您正在编辑链接器脚本,则最好选择您自己的节名)。

  1. 编辑项目设置,以便启动汇编程序单元在链接器命令行中出现得比头文件更早(GNU保留输出中输入节的顺序,我不知道其他)

  1. 只需将您的手指交叉起来,然后检查构建输出以确定它是否有效。有50/50的可能性,各部分的顺序是正确的,没有任何变化。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66164087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档