[STM32F1] ARM Compiler 6 VS 5,6是个垃圾吗?

[复制链接]
 楼主| lanmanck 发表于 2019-11-18 18:59 | 显示全部楼层 |阅读模式
本帖最后由 lanmanck 于 2019-11-18 18:59 编辑

代码:
  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/Os等都试过了,循环一直出不去,我没辙了,大家救救我吧:
ac6-notok.gif

ayb_ice 发表于 2019-11-19 09:03 | 显示全部楼层
SET_TICK是什么操作呢
 楼主| lanmanck 发表于 2019-11-19 11:27 | 显示全部楼层
ayb_ice 发表于 2019-11-19 09:03
SET_TICK是什么操作呢

就是 x = get_timer_tick();
ayb_ice 发表于 2019-11-19 12:01 | 显示全部楼层
lanmanck 发表于 2019-11-19 11:27
就是 x = get_timer_tick();

这样试试,不知道你为什么要那样写
void delay_1ms(uint32_t xms)
{
        uint32_t uiTmp = get_timer_tick();
        
        while (get_timer_tick() - uiTmp < xms)
        {
                //wait
        }
}
renzheshengui 发表于 2019-12-10 13:45 | 显示全部楼层
高版本有时候不如低版本稳定
paotangsan 发表于 2019-12-10 13:47 | 显示全部楼层
这是啥意思
labasi 发表于 2019-12-10 13:50 | 显示全部楼层
还是版本回退吧
 楼主| lanmanck 发表于 2019-12-11 11:48 | 显示全部楼层
labasi 发表于 2019-12-10 13:50
还是版本回退吧

哎,太恶心了。GD原厂的也认为AC6差的一比,piece of shit。我现在把M23模拟成M0+,然后用5.0来编译,一切爽爽的。。。
 楼主| lanmanck 发表于 2019-12-11 13:45 | 显示全部楼层
今天又回来看了下, 把步骤分解了,结果这货把311行给去掉了,这就解释了为啥死循环,这啥编译器这是?


ac6-ok.gif

您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:跟阿里云拼了: http://www.qcloud.com/redirect.php?redirect=1001&cps_key=361a94179534e81fbc22912619cc97ef

154

主题

400

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:跟阿里云拼了: http://www.qcloud.com/redirect.php?redirect=1001&cps_key=361a94179534e81fbc22912619cc97ef

154

主题

400

帖子

3

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