Questions tagged «avr-gcc»

1
为什么编译器不直接使用LSR
嗨,我一直在使用Arduino Uno(所以是ATmega328p)进行项目开发,其中时间非常重要,因此我想看看编译器将我的代码转换成哪些指令。在其中,我有一个uint8_t每次使用迭代都会向右移一位的方法data >>= 1,看来编译器将此翻译为5条指令(data在中r24): mov r18, r24 ldi r19, 0x00 asr r19 ror r18 mov r24, r18 但是,如果我查看指令集文档,我会看到一条指令正是这样做的: lsr r24 我是否忽略了某些内容,或者为什么编译器也没有使用它?寄存器r18和r19不在其他任何地方使用。 我使用的是Ardunio,但如果我正确的话,请使用普通的avr-gcc编译器。这是生成序列的代码(已修剪): ISR(PCINT0_vect) { uint8_t data = 0; for (uint8_t i = 8; i > 0; --i) { // asm volatile ("lsr %0": "+w" (data)); data >>= 1; if (PINB …
10 arduino  avr-gcc 

4
为什么GCC编译器会省略一些代码?
我不明白为什么GCC编译器会在保留附近绝对相同的代码的同时删掉部分代码? C代码: #define setb_SYNCO do{(PORTA|= (1<<0));} while(0); ISR(INT0_vect){ unsigned char i; i = 10; while(i>0)i--; // first pause - omitted setb_SYNCO; setb_GATE; i=30; clrb_SYNCO; while(i>0)i--; // second pause - preserved clrb_GATE; } LSS的相应部分(汇编文件,由编译器创建): ISR(INT0_vect){ a4: 1f 92 push r1 a6: 0f 92 push r0 a8: 0f b6 in r0, 0x3f …
9 avr  c  avr-gcc  optimization  gcc 

1
如何为AVR Atmega328p创建静态库?
我正在尝试创建一个类似于C语言中的Arduino的库。 我曾经尝试过,尽管我丢失了代码,但我记得只是简单地获取了对未定义引用的加载,这些未定义引用是在头文件和包含所有目标文件的库中指定的(由avr-objdump检查)。 我想知道我应该如何编译该库(示例makefile)以及如何将程序编译到该库。另外,我是否需要针对每种AVR和时钟速度重新编译该库,或者是否可以解决? 如果您需要更多信息,请询问。 谢谢 编辑:示例(不起作用) 程式 #include "test.h" int main(void) { test_function(); } 测试 #include "test.h" void test_function() { int i; i++; } 测试 #ifndef __TEST_H_ #define __TEST_H_ void test_function(void); #endif
8 avr  c  library  avr-gcc 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.