将嵌入式程序分为内存中的多个部分

Cheiron

我正在嵌入式系统(Stellaris Launchpad)上工作,并编写了一个简单的OS(作为一个业余项目)。使用的工具链是gcc-none-eabi。

我的下一步是习惯MPU,以允许内核阻止用户程序更改特定数据。我有一堆C文件,我将它们分为两部分:内核和其他部分。我有以下链接脚本开始:

MEMORY
{
    FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000
    SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000
}

SECTIONS
{
    .text :
    {
        _text = .;
        KEEP(*(.isr_vector))
        *(.text*)
        *(.rodata*)
        _etext = .;
    } > FLASH

    .data : /*AT(ADDR(.text) + SIZEOF(.text))*/ /*contains initialized data*/
    {
        _data = .;
        *(vtable)
        *(.data*)
        _edata = .;
    } > SRAM AT > FLASH

    .bss : AT (ADDR(.data) + SIZEOF(.data)) /*contains unitialized data (should be set to all zero's)*/
    {
        _bss = .;
        *(.bss*)
        *(COMMON)
        _ebss = .;
        _start_heap = .;
    } > SRAM

    _stack_top = ORIGIN(SRAM) + LENGTH(SRAM) - 1; /*The starting point of the stack, at the very bottom of the RAM*/

}

在阅读了链接描述文件之后,我知道可以用文件名替换星号,从而开始将Flash分成多个部分。例如,我将创建一个.kernel.bss部分,并将所有内核目标文件而不是该部分中的星星。我剩下的唯一问题是内核不是一个文件,而是很多文件。并可能会添加,删除文件等。那么我该怎么做?如何更改链接程序脚本,以便将动态的第一组文件映射到第一位置,将动态的第二组文件映射到第二位置?

Diederik Loos

您知道可以指定将哪些文件用作节的输入吗?我们将其用于将内核和应用程序代码分为快速的内部闪存和较慢的外部闪存,如下所示:

.kernel_text :
{
     build/kernel/*.o (.text*) /*text section from files in build/kernel*/
} > INT_FLASH

.app_text:
{
    build/app/*.o(.text*)
} > EXT_FLASH

第4.6.4节可能会有所帮助,(更详细地描述输入节)https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/4/html/Using_ld_the_GNU_Linker/sections.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

嵌入式系统中的内存分配

将Rust staticlib与嵌入式C程序链接时出现“ memcmp的多个定义”错误

将多个嵌入式单选按钮组与标签垂直对齐(引导程序3)

访问嵌入式内存中的HSQLDB实例

Maven中的嵌入式内存数据库

嵌入式mongo,不带端口(完全在内存中)

free()不释放嵌入式Linux中的内存。

在嵌入式Linux中检测低内存情况

在ARM嵌入式系统的内存中设置堆

嵌入式系统中的内存使用情况

嵌入式C中的动态内存分配

了解嵌入式 C 中的 I/O 内存位置

如何将嵌入式框架的dSYM文件包含到应用程序存档中

在嵌入式驱动程序中运行的Derby数据库是否存在内存限制?

通过嵌入式DLL将多个应用程序连接到一个Firebird数据库

Java Web应用程序中的嵌入式Derby

需要说明嵌入式程序中的代码

Go中的嵌入式程序包?

C ++应用程序中的嵌入式pdfium

Clion 中的嵌入式汇编程序块

是在运行时从磁盘还是从内存加载.NET程序集中的嵌入式资源?

无法访问将类路径发布为webApp的tomee嵌入式应用程序中的静态html资源

将所有程序集放在一起并将其用作exe中的嵌入式资源

JPA多个嵌入式字段

多个嵌入式文档的Mongoid分组

编译多个嵌入式Elm应用

DocuSign多个嵌入式签名者

.NET嵌入式资源,将IntPtr移到原始内存位置以在非托管代码中使用

如何将数组指向嵌入式系统上的某些特定内存地址