開發紀錄 hw7
 
從01-hello world開始看起
 
void reset_handler(void)
{
        /* Copy the data segment initializers from flash to SRAM */
        uint32_t *idata_begin = &_sidata;
        uint32_t *data_begin = &_sdata;
        uint32_t *data_end = &_edata;
        while (data_begin < data_end) *data_begin++ = *idata_begin++;
 
        /* Zero fill the bss segment. */
        uint32_t *bss_begin = &_sbss;
        uint32_t *bss_end = &_ebss;
        while (bss_begin < bss_end) *bss_begin++ = 0;
 
        /* Clock system intitialization */
        rcc_clock_init();
 
        main();
}
 
從reset-handler看起,在這裡有點看不懂這句的用意
*data_begin++ = *idata_begin++;
雖然此段應該是把data segment移到sram上,但從hello.list(0x08000284)之後看到一遍空白,是list無法顯示data segment還是真的後面是空的,通常data segment assembly 會長怎樣?
80000e0:        b580              push        {r7, lr}
 80000e2:        b086              sub        sp, #24
 80000e4:        af00              add        r7, sp, #0
        /* Copy the data segment initializers from flash to SRAM */
        uint32_t *idata_begin = &_sidata;
 80000e6:        4b14              ldr        r3, [pc, #80]        ; (8000138 <reset_handler+0x58>)
 80000e8:        617b              str        r3, [r7, #20]
        uint32_t *data_begin = &_sdata;
 80000ea:        4b14              ldr        r3, [pc, #80]        ; (800013c <reset_handler+0x5c>)
 80000ec:        613b              str        r3, [r7, #16]
        uint32_t *data_end = &_edata;
 80000ee:        4b14              ldr        r3, [pc, #80]        ; (8000140 <reset_handler+0x60>)
 80000f0:        60bb              str        r3, [r7, #8]
        while (data_begin < data_end) *data_begin++ = *idata_begin++;
 8000138:        08000284         .word        0x08000284
 800013c:        20000000         .word        0x20000000
 8000140:        20000000         .word        0x20000000
 8000144:        20000000         .word        0x20000000
 8000148:        20000000         .word        0x20000000
 
 
02-Context switch
 
.thumb