本帖最后由 john_lee 于 2014-6-21 02:02 编辑
这种事情,只有无所不能的 gcc 表示没有压力,测试一下:
源码:#include <avr/io.h>
__int24 data[10]; // 24bit (3字节) 数组
void foo ()
{
uint8_t i;
for (i = 0; i < 10; i++)
data[i] = i;
}
源码中定义了一个 24bit 的数组,10个元素,理论上应该占用 30 字节。
看看编译生成的汇编: .file "int24.c"
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__SREG__ = 0x3f
__tmp_reg__ = 0
__zero_reg__ = 1
.text
.global foo
.type foo, @function
foo:
/* prologue: function */
/* frame size = 0 */
/* stack size = 0 */
.L__stack_usage = 0
ldi r30,lo8(data)
ldi r31,hi8(data)
ldi r24,0
ldi r25,0
ldi r26,0
.L3:
st Z+,r24
st Z+,r25
st Z+,r26
adiw r24,1
adc r26,__zero_reg__
cpi r24,10
cpc r25,__zero_reg__
cpc r26,__zero_reg__
brne .L3
/* epilogue start */
ret
.size foo, .-foo
.global data
.section .bss
.type data, @object
.size data, 30
data:
.zero 30
.ident "GCC: (AVR_8_bit_GNU_Toolchain_3.4.3_1072) 4.8.1"
.global __do_clear_bss
是不是碉堡了? |