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不再推荐这样的语法,会提示报错,解决方法有两种:

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

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

}

查看原文