FAQ0115 AT32使用AC6编译器注意事项

Questions:在使用 ARM Compiler version 6(AC6)时,可能会出现如下情形之一

  • 情形一 代码执行效率低
  • 情形二 堆栈需求增加
  • 情形三 脱机运行失败
  • 情形四 printf 无法打印

Answer
情形一 代码执行效率低
可能是没有选择 AC6 默认优化等级 –Oz image size, 而手动选择了 AC5 的默认优化等级-O0 导致,调整为默认优化等级可解决。
情形二 堆栈需求增加
使用 AC6 编译器 –O0 优化等级时, n 级条件表达式可能会产生巨大的栈需求。调整为–O0 以外的优化等级可解决。
情形三 脱机运行失败
使用 AC6 编译器 –O0 优化等级时,未选择微库,偶尔会造成脱机运行失败(调试仿真下可使用,拔掉下载器运行就失败)。将微库选项勾起可解决。
情形四 printf 无法打印
这是由于 AC6 对 printf 初始化与 AC5 有区别导致
修改方法: 以 AT32 BSP 的 printf example 举例
在 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 编译器
次功能: 无

FAQ0115 AT32使用AC6编译器注意事项相关推荐

  1. keil工程 freertos AC5编译器移植到AC6编译器

    keil工程 freertos AC5编译器移植到AC6编译器 本文基于正点原子的rtos工程进行移植. 打开工程,将其更换为AC6编译器,然后点击编译 编译完成之后,我们可以看到有很多的错误,这里要 ...

  2. CUBEMX+FreeRTOS使用ArmComplier6(AC6)编译器的设置方法

    最新的 KEIL MDK 5.37版本不再内置ArmComplier5(AC5)编译器, 笔者决定尝试将cubemx生成的FreeRTOS工程迁移至ArmComplier6(AC6)编译器.由于AC5 ...

  3. keil5工程 AC5 编译器升级 AC6编译器

    keil5工程 AC5 编译器升级 AC6编译器 1.概述 2.移植 1.概述 传统keil mdk的编译速度远远落后于IAR,但自从keil新版发布之后,AC6编译器要超过了IAR的编译速度,接下来 ...

  4. keil工程 freertos+emwin AC5编译器移植到AC6编译器

    keil工程 freertos+emwin AC5编译器移植到AC6编译器 本文基于正点原子的rtos工程进行移植. 打开工程,将其更换为AC6编译器,然后点击编译 编译完成之后,如下图,可以看到有很 ...

  5. AT32 配置XMC时序注意事项

    AT32 配置XMC时序注意事项 Questions: XMC数据建立时间.保持时间等时序相关参数与ST有1-2个clock的差别,在使用device的极限参数进行配置的时候有可能会出现通讯不稳定或者 ...

  6. Keil5使用AC6编译器

    Keil5使用AC6编译后,生成bin文件变为生成文件夹的解决办法 KEIL AC5到AC6需要注意的地方 从AC5移植到AC6 解决流程 关键步骤 最近同事咨询改用keil的最新版本编译器编译原来的 ...

  7. STM32cube 生成freertos 使用AC6编译器编译

    cubemx 5.6    keil 5.29 一.使用stm32cubemx使能FreeRTOS 二.打开新建完成的KEIL工程(版本5.29),点击RTT选项 三.在RTT配置界面下,将RTOS选 ...

  8. 【工具软件】markdown编译器待办事项无法打勾

    使用时可以直接点击上方工具栏的 List item 注意:此时已经自动在里面加了一个空格,如果直接加x的话,不会打勾,如下: [ x] List item 所以先删除空格在加x 问题解决

  9. win10 Linux子系统 交叉编译器注意事项

    如果你的机器是32位的 ,就不需要安装32位的运行库了 如果你的机器是64位的 ,就需要安装32位的运行库 Ubuntu20.04 64位机器安装32位运行库 sudo apt install lib ...

最新文章

  1. 只需3分钟,就能轻松创建 一个SpreadJS的React项目
  2. 数据库个人优化学习记录
  3. android模拟器EditText 不能用物理键盘输入,也不能用电脑键盘输入
  4. 基于SLF4J MDC机制实现日志的链路追踪
  5. 2018第一季度全球畅销手机排行出炉,苹果刷榜,小米三星各一款
  6. Check_mk 主机状态为 down 但是主机下其他服务有数据且正常 解决方法
  7. spring boot框架_redislimiter-spring-boot分布式限流框架
  8. 32位和64位操作系统,二者有何区别?是否64位更快?
  9. 整理一些计算机基础知识!
  10. 前瞻设计:创新型战略推动可持续变革(全彩)
  11. TOMCAT内存大小调整
  12. 设计模式 ( 十五 ) 模板方法模式
  13. 基于 mini2440 电阻式触摸屏(二):S3C2440 电阻式触摸屏接口、内部ADC结构
  14. 笔记本电脑蓝牙搜索不到设备
  15. 儿童保温杯市场前景分析及行业研究报告
  16. WIN7,让光驱走开
  17. 贝尔维尤的无人驾驶汽车网络要来啦!
  18. 雪城大学信息安全试验_国际信息安全系列讲座之二:雪城大学Heng Yin教授讲座通知...
  19. kubernetes自定义hosts域名解析
  20. ORACLE 闩锁介绍

热门文章

  1. 零基础入门大数据工程师从底层到应用必备技术汇总
  2. unity关于中文字体显示问题
  3. Mac下Tesseract-OCR文字识别新手使用入门
  4. 计算机基础做表格,表格的制作计算机基础.doc
  5. unit自动驾驶怎么使用_自动驾驶与驾驶辅助系统 正确使用驾驶辅助系统
  6. 框架的优缺点(TP CI)
  7. 体验部署ThinkAdmin
  8. google s2 java开发文档
  9. Python全栈开发-Mysql知识点总结(中)
  10. pythonsort参数_Python sort()函数有哪些参数?