ARM-DS5迁移至arm-compiler6编译cortex-m4问题总结

ds5版本老旧 自带的startup_CortexM4例程还是使用的arm-compiler5作为编译器 更换为ac6编译后会冒出大量的错误,问题一一解决解决后归纳总结一下ac5迁移至arm-compiler6语法兼容问题 ,迁移后可以在ds5使用ac6运行,debug程序。

  • 问题1:

L6218E: Undefined symbol Image\$\$ARM_LIB_STACKHEAP\$\$ZI\$\$ Limit

L6218E: Undefined symbol Image\$\$PROCESS_STACK \$\$ ZI\$\$Limit

L6218E: Undefined symbol Image\$\$PROCESS_STACK\$\$ZI\$\$Base

L6218E: Undefined symbol Image\$\$DATA \$\$ Base

原因 :没有添加scat文件 (即内存分配)。项目右键->propertises->Setting->ToolSettings->Scatter files 选择自己工程目录下的scat文件即可。

  • 问题2:

error: unknown type name '__irq'

原因: ac6不再支持这样的语法前缀 ,需要替换为:

__attribute__((interrupt))
  • 问题3:

error: '#pragma arm' is an ARM Compiler 5 extension, and is not supported by ARM Compiler 6

原因: ac6不再推荐这样的语法,会提示报错,解决方法有两种:

  1.  添加编译选项 :-Wno-error=armcc-pragma-arm[转]ARM Compiler 6编译error'#pragma push/pop' is an ARM Compiler 5_ZMCITY的博客-CSDN博客
  2. 前缀更改为 :
#pragma clang section
  • 问题4:

error: unknown register name 'psp' in asm

使用如下代码 设置psp寄存器:

/** \brief  Set Process Stack Pointer

    This function assigns the given value to the Process Stack Pointer (PSP).

    \param [in]    topOfProcStack  Process Stack Pointer value to set
 */
__attribute__( ( always_inline ) ) static inline void __set_PSP(uint32_t topOfProcStack)
{
  __asm volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) : "sp");
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值