|
发表于 2017-10-7 11:05:06
|
显示全部楼层
本帖最后由 shangdawei 于 2017-10-7 12:05 编辑
>>单片机的内部ROM地址范围0x400000~0x46FFFF,内部flash的地址范围是0x20000000~0x2001ffff,
单片机的内部Flash地址范围0x400000~0x46FFFF,内部RAM的地址范围是0x20000000~0x2001ffff,
https://stackoverflow.com/questi ... -loaded-application
- int main(void){
- // Init and downloading the .bin to Flash
- binary_exc((void*) 0x404000);
- }
- int binary_exec(void * vStart){
- int i;
- // -- Check parameters
- // Should be at least 32 words aligned
- if ((uint32_t)vStart & 0x7F)
- return 1;
- Disable_global_interrupt();
- // Disable IRQs
- for (i = 0; i < 8; i ++) NVIC->ICER[i] = 0xFFFFFFFF;
- // Clear pending IRQs
- for (i = 0; i < 8; i ++) NVIC->ICPR[i] = 0xFFFFFFFF;
- // -- Modify vector table location
- // Barriars
- __DSB();
- __ISB();
- // Change the vector table
- SCB->VTOR = ((uint32_t)vStart & SCB_VTOR_TBLOFF_Msk);
- // Barriars
- __DSB();
- __ISB();
- Enable_global_interrupt();
- // -- Load Stack & PC
- _binExec(vStart);
- return 0;
- }
- void _binExec (void * l_code_addr){
- __asm__ ("mov r1, r0 \n"
- "ldr r0, [r1, #4] \n"
- "ldr sp, [r1] \n"
- "blx r0"
- );
- }
复制代码 |
|