keil5报错undefined symbol __aeabi_assert

魔术棒->Target界面的Use MicroLIB被选中,在串口调试使用printf会使用到,使用时特别注意一下。出现这个错误只需把Use MicroLIB取消掉就行了。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Keil uVision中使用armcc编译器时,出现 "Undefined symbol __bss_end" 的误,通常是由于编译器没有找到 __bss_end 符号的定义。 解决这个问题的方法是在代码中添加一个链接器脚本文件,以明确告诉编译器 __bss_end 符号的定义。 以下是一个示例链接器脚本文件的内容: ```c LR_IROM1 0x08000000 0x08040000 { ; load region size_region ER_IROM1 0x08000000 0x08040000 ; load address = execution address RW_IRAM1 0x20000000 0x20008000 ; RW data RW_IRAM2 0x20008000 0x20010000 ; RW data RW_IRAM3 0x10000000 0x10000800 ; RW data RW_IRAM4 0x10000800 0x10001000 ; RW data RW_IRAM5 0x10001000 0x10002000 ; RW data RW_IRAM6 0x10002000 0x10004000 ; RW data RW_IRAM7 0x10004000 0x10008000 ; RW data RW_IRAM8 0x10008000 0x10010000 ; RW data RW_IRAM9 0x10010000 0x10020000 ; RW data RW_IRAM10 0x10020000 0x10040000 ; RW data RW_IRAM11 0x20000000 0x20008000 ; RW data RW_IRAM12 0x20008000 0x20010000 ; RW data RW_IRAM13 0x20010000 0x20020000 ; RW data RW_IRAM14 0x20020000 0x20040000 ; RW data } SECTIONS { .text : { *(.text) *(.text.*) } .rodata : { *(.rodata) } .data : { *(.data) *(.data.*) } .bss : { __bss_start = .; *(.bss) *(.bss.*) *(COMMON) __bss_end = .; } __heap_start = ORIGIN(RAM) + LENGTH(RAM); __heap_end = __heap_start + 0x1000; .heap : { __heap_start = .; *(.heap) __heap_end = .; } /DISCARD/ : { *(.comment) } } ``` 其中,关键部分是在 .bss 段中添加了 __bss_start 和 __bss_end 符号的定义,以明确告诉编译器和链接器 __bss_end 符号的位置。 在Keil uVision中,你可以将这个链接器脚本文件添加到你的项目中,方法是: 1. 在项目根目录下创建一个名为 xxx.scf 的文件,将上述链接器脚本内容复制到该文件中。 2. 在Keil uVision中打开 "Options for Target" 对话框,在 "Linker" 选项卡下的 "Scatter File" 中选择刚才创建的 xxx.scf 文件。 3. 重新编译项目,此时应该不再出现 "Undefined symbol __bss_end" 的误。 希望这个方法能够帮助你解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值