本帖最后由 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
是不是碉堡了?
|