当前位置: 首页 > 工具软件 > m4b-tool > 使用案例 >

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

党浩阔
2023-12-01

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");
}

 类似资料: