stm32上的embos在keil中会崩溃

问题描述 投票:0回答:1

我已经设置了一个简单的项目来使用 stm32f103rbt 设备测试 embos,我只是使用默认设置,在将默认编译器警告更改为 MISRA 兼容并将 C 标准更改为 C99 并将 C++ 更改为 C++11 后,大多数错误都会消失走了,但还是有两个错误

.\Objects\marlin.axf:错误:L6218E:未定义符号 Stack_Mem (引用自 os_initsysstackinfo.o)。 .\Objects\marlin.axf:错误: L6218E: 未定义的符号 __initial_sp (引用自 os_initsysstackinfo.o).

所以在搜索之后我想我应该在启动程序集文件中导出这些符号,所以我尝试像这样在启动程序集文件中使用这些行

Stack_Size   EQU   0x00000400

; EXPORT the Stack_Mem and __initial_sp symbols for use in C files

EXPORT Stack_Mem

EXPORT __initial_sp

但是会产生这样的错误

.\Objects\marlin.axf:错误:L6002U:无法打开文件 .\objects\startup_stm32f10x_md.o:没有这样的文件或目录

另一个解决方案是注释这些行

OS_SysStackBaseAddr = (unsigned long) &Stack_Mem;
OS_SysStackSize = (unsigned int) ((unsigned long)&__initial_sp - (unsigned long)&Stack_Mem);
OS_SysStackLimit = (unsigned long) &__initial_sp;

在 OS_InitSysStackInfo 函数中,现在项目将被构建,当我尝试调试它时它会崩溃,那么我应该如何测试这个操作系统?

stm32 keil embos
1个回答
0
投票

我假设你的程序集启动文件看起来像这样 startup_stm32f10x_md.s 文件,堆和堆栈地址都定义如下:

Stack_Size      EQU     0x00000400

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp


; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Heap_Size       EQU     0x00000200

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit

并在矢量表中设置

__initial_sp
并使用
EXPORT
导出,如图所示。

链接器错误(请参阅编译器错误和警告参考指南)您可以来:

  • 明确来自丢失的文件。也许您不小心删除了项目层次结构视图中的文件。
  • 或者来自 Keil 中的无效文件设置。我相信这可能是您的问题:编译器而不是汇编器考虑您的汇编文件,导致不生成目标文件,从而导致链接器错误。右键单击程序集启动文件,单击
    "Options for File [...]"
    ,然后确认该文件被视为
    Assembly file
    而不是
    Source file
    。您还可以通过进入此窗口的
    Asm
    面板来检查汇编程序如何理解汇编,并检查是否已在
    Auto Select
    上设置。
© www.soinside.com 2019 - 2024. All rights reserved.