攻城略地之一天攻破 K60/KL26 —— 松飞科技
山外论坛 h t t p : / / v c a n 1 2 3 . c o m 山 外 メ 雲 ジ
6. /*-Memory Regions-*/
7. define symbol __ICFEDIT_region_ROM_start__ = 0x0;
8. define symbol __ICFEDIT_region_ROM_end__ = 0x00040000;
9. //0x00040000:P-flashk 256k D-flash 256k 0x00080000:P-flashk 512k
10. define symbol __ICFEDIT_region_RAM_start__ = 0x1fff0000;
11. //前面的 0x410 RAM 留给 RAM User Vector Table 。
12. define symbol __ICFEDIT_region_RAM_end__ = 0x20000000;
13. /*-Sizes-*/
14. define symbol __ICFEDIT_size_cstack__ = 0x2000;
15. define symbol __ICFEDIT_size_heap__ = 0x2000;
16. /**** End of ICF editor section. ###ICF###*/
17.
18.
19. /**** 上边是由 ICF 编辑,下面是由我们手动配置 ****/
20.
21. define symbol __region_RAM2_start__ = 0x20000000;
22. //SRAM 是分成两块的,RAM2 即 SRAM_U,RAM 为 SRAM_L
23. define symbol __region_RAM2_end__ = 0x20000000 + __ICFEDIT_region_RAM_end__
24. - __ICFEDIT_region_RAM_start__;
25.
26.
27. define exported symbol __VECTOR_TABLE = __ICFEDIT_intvec_start__;
28. //代码编译进 ROM ,则 0x00000000 ;RAM,则 __ICFEDIT_region_RAM_start__
29. define exported symbol __VECTOR_RAM = __ICFEDIT_region_RAM_start__;
30. //前面的 RAM 留给 RAM User Vector Table,即这里的设置。所以减 0x410
31. //common_startup 函数就是把 __VECTOR_TABLE 的数据复制到 __VECTOR_RAM
32.
33. define exported symbol __BOOT_STACK_ADDRESS = __region_RAM2_end__ - 8;
34. //0x2000FFF8; 启动栈地址
35.
36. /* 决定代码编译的地址 */
37. define exported symbol __code_start__ = __ICFEDIT_intvec_start__ + 0x410;
38. //+0x410 ,是前面的留给 Vector Table
39.
40. define memory mem with size = 4G; //4G 的虚拟寻址空间
41.
42. define region ROM_region =
43. mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__];
44.
45. define region RAM_region =
46. mem:[from __ICFEDIT_region_RAM_start__ + 0x410 to __ICFEDIT_region_RAM_end__]
47. | mem:[from __region_RAM2_start__ to __region_RAM2_end__];
48.
49.
50. define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; //堆
51. define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; //栈
52.
53. //手动初始化,在 common_startup 函数 里完成
54. initialize manually { readwrite }; // 未初始化数据 .bss
55. initialize manually { section .data}; // 已初始化数据
56. initialize manually { section .textrw }; // __ramfunc 声明的子函数
57.
58. do not initialize { section .noinit }; // 复位中断向量服务函数
59.
60. define block CodeRelocate { section .textrw_init };
61. define block CodeRelocateRam { section .textrw };
62. // 把 CodeRelocate 代码复制到 RAM 中的 CodeRelocateRam (对 flash 操作的函数必须这样)
63.
64. place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
65. //vectors.c 中设置#pragma location = ".intvec",告诉编译器,这个是中断向量表,编译进去 .intvec
66.
67. place at address mem:__code_start__ { readonly section .noinit };
68. //在 crt0.s 中设置了 Reset_Handler 为 SECTION .noinit : CODE
69. //即把 Reset_Handler 编译进__code_start__
70.
71. place in ROM_region { readonly, block CodeRelocate };
72. //把代码编译进去 ROM (调试用) ,非调试,则设为 ROM_region
73.
74. place in RAM_region { readwrite, block CodeRelocateRam,
设置 P-flash 和 D-flash 的
分区大小