相关疑难解决方法(0)

如何防止GCC优化忙等待循环?

我想为Atmel AVR微控制器编写C代码固件.我将使用GCC编译它.此外,我想启用编译器优化(-Os-O2),因为我认为没有理由不启用它们,并且它们可能比手动编写汇编更快地生成更好的汇编方式.

但我想要一小段没有优化的代码.我想延迟函数的执行一段时间,因此我想写一个do-nothing循环只是为了浪费一些时间.不需要精确,只需等待一段时间.

/* How to NOT optimize this, while optimizing other code? */
unsigned char i, j;
j = 0;
while(--j) {
    i = 0;
    while(--i);
}
Run Code Online (Sandbox Code Playgroud)

由于AVR中的内存访问速度要慢得多,因此我希望i并将j其保存在CPU寄存器中.


更新:我刚刚发现UTIL/delay.hUTIL/delay_basic.hAVR libc库.尽管大多数情况下使用这些功能可能更好,但这个问题仍然有效且有趣.


相关问题:

c optimization gcc avr-gcc

62
推荐指数
4
解决办法
5万
查看次数

KEEP在链接描述文件中的含义是什么?

LD手册并不能说明什么KEEP命令一样.以下是来自第三方链接器脚本的功能片段KEEP.什么是KEEP命令做ld

SECTIONS
{  
    .text :
    {
        . = ALIGN(4);
        _text = .;
        PROVIDE(stext = .);
        KEEP(*(.isr_vector))
        KEEP(*(.init))
        *(.text .text.*)        
        *(.rodata .rodata.*)        
        *(.gnu.linkonce.t.*)
        *(.glue_7)
        *(.glue_7t)
        *(.gcc_except_table)
        *(.gnu.linkonce.r.*)
        . = ALIGN(4);
        _etext = .;
        _sidata = _etext;
        PROVIDE(etext = .);   
            _fini = . ;
                *(.fini)

    } >flash
Run Code Online (Sandbox Code Playgroud)

linker ld linker-scripts

44
推荐指数
2
解决办法
3万
查看次数

如何防止链接器丢弃函数?

我的 C 代码中有一个函数被隐式调用,并被链接器转储。我怎样才能防止这种现象?

我正在使用 gcc 和链接器标志 -gc-sections 进行编译,我不想从标志中排除整个文件。我尝试使用属性:“used”和“externally_visible”,但都没有奏效。

void __attribute__((section(".mySec"), nomicromips, used)) func(){
...
}
Run Code Online (Sandbox Code Playgroud)

在地图文件上,我可以看到该函数已编译但未链接。我用错了吗?有没有其他方法可以做到?

c linker attributes gcc

5
推荐指数
1
解决办法
1257
查看次数

如何检查.so中定义的宏?我会使用nm来检查功能,是否可以对宏执行相同的操作?

我在mylib.h中有这样的代码,然后使用它来创建mylib.so。有没有办法检查.so中如何定义MY_MACROS?

#ifdef SWITCH_CONDITION
    #define MY_MACROS       0
#else
    #define MY_MACROS       1
#endif
Run Code Online (Sandbox Code Playgroud)

如果那是一个函数,我会简单地做

nm mylib.so | grep myfunction
Run Code Online (Sandbox Code Playgroud)

有没有办法对宏做同样的事情?

PS应该是因为

> grep MY_MACROS mylib.so 
> Binary file mylib.so matches
Run Code Online (Sandbox Code Playgroud)

c linux nm .so

4
推荐指数
1
解决办法
99
查看次数

标签 统计

c ×3

gcc ×2

linker ×2

.so ×1

attributes ×1

avr-gcc ×1

ld ×1

linker-scripts ×1

linux ×1

nm ×1

optimization ×1