你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

ARM Compiler 6 VS 5,6就是个垃圾

[复制链接]
lanmanck 发布时间:2019-11-18 18:57
代码:
  1. void TIMER16_IRQHandler(void)
  2. {
  3.         if(SET == timer_interrupt_flag_get(TIMER16, TIMER_INT_UP)){

  4.         /* clear channel 0 interrupt bit */
  5.         timer_interrupt_flag_clear(TIMER16, TIMER_INT_UP);

  6.         /* toggle selected led */
  7.         g_bsl.tick_1ms++;
  8.     }
  9. }

  10. uint32_t get_timer_tick(void)
  11. {
  12.         return g_bsl.tick_1ms;
  13. }

  14. void delay_1ms(uint32_t xms)
  15. {
  16.         volatile uint32_t tick,diff=xms;

  17.         SET_TICK(tick);
  18.         /*while(GET_DIFF_TICK(tick) < diff){}*/

  19.         while(xms){
  20.                 diff =  (0x100000+get_timer_tick()-tick)&0xFFFFF ;
  21.                 while(diff < 1){
  22.                         diff =  (0x100000+get_timer_tick()-tick)&0xFFFFF ;
  23.                 }
  24.                 SET_TICK(tick);
  25.                 xms--;
  26.         }
  27. }
复制代码
这个函数就是延时多少毫秒,这个毫秒计数器通过一个毫秒中断一直增加。
这个是5.0编译器的结果,杠杠的:
ac5-ok.gif
这个是6.0的结果,不加volatile直接给你优化了,等级为Oz,循环一直出不去,我没辙了,大家救救我吧:

ac6-notok.gif
收藏 评论7 发布时间:2019-11-18 18:57

举报

7个回答
慎微 回答时间:2019-11-19 08:55:54
因为您的不精确的自建延时函数被优化,就否了 armcompiler V6.0?无语
lanmanck 回答时间:2019-11-19 08:58:01
mikecai 发表于 2019-11-19 08:55
因为您的不精确的自建延时函数被优化,就否了 armcompiler V6.0?无语

如何改进代码呢?求教!
慎微 回答时间:2019-11-19 09:01:51
直接用HAL 库延时 HAL_Delay()啊
lanmanck 回答时间:2019-11-19 11:27:41
mikecai 发表于 2019-11-19 09:01
直接用HAL 库延时 HAL_Delay()啊

hal_delay原理跟这个一样,我这个还有溢出处理。
edmundlee 回答时间:2019-11-21 12:14:01
只要是不同线程共用的变量都应该加volatile, 这你不能怪v6
maxtch 回答时间:2019-11-29 00:11:02
那你是不熟悉 LLVM/clang 导致的。ARM Compiler v6 本质是 LLVM/clang,其最大的强项是兼容 GCC 的语言支持和相当激进的优化支持。
lanmanck 回答时间:2020-2-14 21:55:44
edmundlee 发表于 2019-11-21 12:14
只要是不同线程共用的变量都应该加volatile, 这你不能怪v6

你的回答是正确的!高手。

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版