使用链接器命令在C中分配一个特定位置的数组
我是一名初学者......我想写入我的嵌入式闪存中的特定内存位置......我如何在我的C头文件中提到它?然后使用链接器脚本将其链接到特定的内存位置。现在我已经将该数组声明为extern,并且编译正确。虽然喜欢,我需要告诉链接器,我需要在这个特定的位置。它应该在.ld文件中给出?什么是.dld文件?对于diab编译器,这不适用于GCC。我已经看到了一个用于冒泡排序的示例代码bubble.dld。但是在一些项目中.dld文件是在制作项目时创建的。它在哪一步创建?使用链接器命令在C中分配一个特定位置的数组
首先解决
在” .c “的:
// Talk to linker to place this in ".mysection"
__attribute__((section(".mysection"))) char MyArrray[52];
在” .LD “:
MEMORY {
m_interrupts (RX) : ORIGIN = 0x00040000, LENGTH = 0x000001E8
m_text (RX) : ORIGIN = 0x00050000, LENGTH = 0x000BFE18
/* memory which will contain secion ".mysection" */
m_my_memory (RX) : ORIGIN = 0x00045000, LENGTH = 0x00000100
}
SECTIONS
{
/***** Other sections *****/
/* place "mysection" inside "m_my_memory" */
.mysection :
{
. = ALIGN(4);
KEEP(*(.mysection));
. = ALIGN(4);
} > m_my_memory
/***** Other sections *****/
}
解决方法二
在” .C “
extern char myArray[52];
在 “.LD”
MEMORY {
m_interrupts (RX) : ORIGIN = 0x00040000, LENGTH = 0x000001E8
m_text (RX) : ORIGIN = 0x00050000, LENGTH = 0x000BFE18
/* memory which will contain secion "myArray" */
m_my_memory (RX) : ORIGIN = 0x00045000, LENGTH = 0x00000100
}
SECTIONS
{
/***** Other sections *****/
/* place "myArray" inside "m_my_memory" */
.mysection :
{
. = ALIGN(4);
myArray = .; /* Place myArray at current address, ie first address of m_my_memory */
. = ALIGN(4);
} > m_my_memory
/***** Other sections *****/
}
见this good manual了解更多如何放置在要
非常感谢:)。我有一个exe文件为我的链接器..即,我在Windows环境中构建它。我应该用我的新的ld文件引用重建exe文件吗? –
你不必重建你的链接器,只有你的最终应用 – Garf365
:)它工作@ Garf365 ...非常感谢你 –
元素是什么?你有一个内存映射闪存驱动器?这听起来很不寻常......这是什么硬件平台? – unwind
是的,我有一个内存映射闪存..它的ST微控制器... –
@unwind或帮助我如何将它写入正常的RAM位置... –