ds5版本老旧 自带的startup_CortexM4例程还是使用的arm-compiler5作为编译器 更换为ac6编译后会冒出大量的错误,问题一一解决解决后归纳总结一下ac5迁移至arm-compiler6语法兼容问题 ,迁移后可以在ds5使用ac6运行,debug程序。
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文件即可。
error: unknown type name '__irq'
原因: ac6不再支持这样的语法前缀 ,需要替换为:
__attribute__((interrupt))
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
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");
}
|