首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Atmel Studio 7如何在C中优化整个过程?

Atmel Studio 7如何在C中优化整个过程?
EN

Stack Overflow用户
提问于 2018-05-30 05:22:34
回答 1查看 0关注 0票数 0

Atmel Studio 7不适用于嵌入式C和I为ATMega328PB创建一个新的GCC可执行项目,该项目只需使用以下代码切换C端口:

代码语言:javascript
复制
#include <avr/io.h>

int init(void)
{
    DDRC = 0xff;
    return 1;
}

int delayms(uint16_t ms)
{
    uint16_t j;
    while(ms>0)
    {
        ms--;
        j=490;
        while(j>0)
        {
            j--;            
        }
    }
    return 1;
}

int main(void)
{
    init();
    while (1) 
    {
        PORTC = 0xff;
        delayms(500);
        PORTC = 0x00;
        delayms(500);
    }
}

当我构建(F7)并编程芯片时,我的PORTC线路在我的示波器上以约1Mhz切换。我查看了输出文件,.lss文件显示delayms过程不存在。如果我用易变的前缀局部变量j 或使其成为一个全局变量,并再次构建,它就在那里,一切正常。

显然希望这个工作像一个普通的C程序,没有看到任何编译器应该这样做的任何理由,不是什么奇怪的优化的事情,因为我已经关闭它,也卸载并重新安装Atmel Studio现在两次,也使用C ++项目选项无法按预期工作

EN

回答 1

Stack Overflow用户

发布于 2018-05-30 14:28:59

从编译器的角度来看,函数完全没有。所以编译器会优化它。通过添加volatile关键字,可以通知编译器该函数中的某些内容容易产生副作用,并且必须执行代码。可以使用其他技术来强制执行所需的行为。例如

代码语言:javascript
复制
 void delay(uint32_t x)
 {
      for(uint32_t i = x; i; --i) 
         __asm__("" : "=r" (x));
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100004616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档