[应用相关] 使用AC6编译器注意事项

[复制链接]
177|1
MCU学习帮 发表于 2025-11-5 15:26 | 显示全部楼层 |阅读模式
Questions在使用ARMCompiler version 6(AC6)时,可能会出现如下情形之一:
n  情形一 代码执行效率低
n  情形二 堆栈需求增加
n  情形三 脱机运行失败
n  情形四 printf无法打印
Answer
n  情形一 代码执行效率低
可能是没有选择AC6默认优化等级 –Oz image size,而手动选择了AC5的默认优化等级-O0导致,调整为默认优化等级可解决。
n  情形二 堆栈需求增加
使用AC6编译器 –O0优化等级时,n级条件表达式可能会产生巨大的栈需求。
调整为–O0以外的优化等级可解决。
n  情形三 脱机运行失败
使用AC6编译器 –O0优化等级时,未选择微库,偶尔会造成脱机运行失败(调试仿真下可使用,拔掉下载器运行就失败)。
将微库选项勾起可解决。
n  情形四 printf无法打印
这是由于AC6对printf初始化与AC5有区别导致。
修改方法:以AT32BSP的printfexample举例。
注意:雅特力官网最新版BSP无此问题。printf路径:\project\at32f403a_407_board\at32f403a_407_board.c
在BSP路径\project\at_start_f403a\examples\usart\printf找到at32_board.c,原代码写法如下:
  
/* Suport printf function, useMicroLib is unnecessary */
  
#ifdef __CC_ARM
  
  #pragma  import(__use_no_semihosting)
  
  struct __FILE
  
  {
  
    int handle;
  
  };
  
  
  
  FILE __stdout;
  
  
  
  void _sys_exit(int x)
  
  {
  
    x = x;
  
  }
  
#endif
  
  
#ifdef __GNUC__
  
  /* With GCC/RAISONANCE, small  printf (option LD Linker->Libraries->Small printf
  
     set to 'Yes') calls  __io_putchar() */
  
  #define PUTCHAR_PROTOTYPE int  __io_putchar(int ch)
  
#else
  
  #define PUTCHAR_PROTOTYPE int  fputc(int ch, FILE *f)
  
#endif  /* __GNUC__ */
  
修改后代码如下,该修改方式使得AC5,AC6编译器都可以正常使用printf函数:
  
/* suport printf  function, usemicrolib is unnecessary */
  
#if (__ARMCC_VERSION  > 6000000)
  
  __asm (".global  __use_no_semihosting\n\t");
  
  void _sys_exit(int x)
  
  {
  
    x = x;
  
  }
  
  /* __use_no_semihosting was requested, but  _ttywrch was */
  
  void _ttywrch(int ch)
  
  {
  
    ch = ch;
  
  }
  
  FILE __stdout;
  
#else
  
#ifdef __CC_ARM  
  
  #pragma import(__use_no_semihosting)
  
  struct __FILE
  
  {
  
    int handle;
  
  };
  
  FILE __stdout;
  
  void _sys_exit(int x)
  
  {
  
    x = x;
  
  }
  
#endif
  
#endif
  
  
#if defined ( __GNUC__  ) && !defined (__clang__)
  
  #define PUTCHAR_PROTOTYPE int  __io_putchar(int ch)
  
#else
  
  #define PUTCHAR_PROTOTYPE int fputc(int ch,  FILE *f)
  
#endif
  
类型:MCU应用
适用型号:AT32全系列
主功能:AC6编译器

EchoInSilence 发表于 2025-11-6 12:35 | 显示全部楼层
是要注意相关编译优化选项吗???
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

14

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部