【发布时间】:2021-12-19 09:01:33
【问题描述】:
我正在编写一个嵌入式程序,它分为两部分:引导加载程序和应用程序。 (我的目标是 STM32,并使用 Eclipse IDE 用 C 语言进行开发。)
我正在使用显示器,所以我编写了一些函数和 3 种不同的字体。
这个想法是使用微控制器的一个扇区并共享它。
字体区域使用链接器 (ld) 脚本定义,如下所示:
.mySegment start_of_FONT_segm : {KEEP(*(.Courier_New_Bold_20_Section))}
.mySegment1 0x8011298 : {KEEP(*(.Terminal6x8_Section))}
然后,我用数组写入:
const unsigned char __attribute__((section (".Terminal6x8_Section"))) Terminal6x8[] = {
0x00,
0x00,
...
但我如何从另一个程序(在本例中为应用程序)读取它?
我试过了:
unsigned char *Terminal6x8 = (volatile unsigned char*)0x08011298;
但编译器会将Terminal6x8 放入RAM。
我也很乐意分享一些函数,但我也不知道如何用 ld 和 C 语法声明它们。
【问题讨论】:
-
"但是编译器把'Terminal6x8'" 你的意思是指针还是数组也称为
Terminal6x8?你为什么给他们取相同的名字?该数组可能需要在文件范围内声明,因此它不能与其他地方的某个指针具有相同的名称。 -
这两个定义在不同的项目中。第一次写入flash(带“section ...”),其他项目只是读取,但意思是一样的,所以我用同样的方式调用另外两个项目包含不同的#define,所以我可以在代码不考虑它们在哪里。