分散加载文件sct 的书写经验
2015-04-08 16:31
281 查看
有个人说的很对,sct就是要多写、多试才能出经验。
文件1就可以:
做法:同一集合的obj文件另起加载域存放。
好处:加载域首地址可以不接在上一个加载域的结尾。
------------------------------------ file1 -----------------------------------------------------------------------------
LR_IROM1 0x08000000 0x00034000 { ; load region size_region all=0x00040000 Size: 0x000079b0
ER_IROM1 0x08000000 0x00034000 { ; load address = execution address
*.o (RESET, +First)
* (+RO)
}
RW_IRAM1 0x20000000 0x0000C000 { ; RW data
* (+RW +ZI)
}
}
LR_IROM_FS 0x08034000 0x00003000 { ; Size: 0x00002d5c(include RW data)
ER_IROM_FS 0x08034000 0x00003000 {
ff.o (+RO) ;under FS
fattime.o (+RO)
ccsbcs.o (+RO)
}
}
LR_IROM_OS_CORE 0x08037000 0x00004000 { ; Size: 0x00002ec0
ER_IROM_OS_CORE 0x08037000 0x00004000 {
os_core.o (+RO) ;under OS_CORE
os_flag.o (+RO)
os_mem.o (+RO)
os_q.o (+RO)
os_sem.o (+RO)
os_task.o (+RO)
os_time.o (+RO)
}
}
LR_IROM_OS_PORTS 0x0803B000 0x00001000 { ; Size: 0x000002d8
ER_IROM_OS_PORTS 0x0803B000 0x00001000 {
os_cpu_c.o (+RO) ;under OS_PORTS
os_dbg.o (+RO)
}
}
file2就不行:
做法:同一集合的obj文件另起运行域存放。
现象:运行时进hardfault
-------------------------------------- file2 ---------------------------------------------------------------------------
LR_IROM1 0x08000000 0x00040000 { ; load region size_region all=0x00040000 Size: 0x000079b0
ER_IROM1 0x08000000 0x00030000 { ; load address = execution address
*.o (RESET, +First)
* (+RO)
}
ER_IROM_FS 0x08030000 0x00003000 {
ff.o (+RO) ;under FS
fattime.o (+RO)
ccsbcs.o (+RO)
}
ER_IROM_OS_CORE 0x08033000 0x00004000 {
os_core.o (+RO) ;under OS_CORE
os_flag.o (+RO)
os_mem.o (+RO)
os_q.o (+RO)
os_sem.o (+RO)
os_task.o (+RO)
os_time.o (+RO)
}
ER_IROM_OS_PORTS 0x08037000 { ;0x00001000
os_cpu_c.o (+RO) ;under OS_PORTS
os_dbg.o (+RO)
}
RW_IRAM1 0x20000000 0x0000C000 { ; RW data
* (+RW +ZI)
}
}
结合图1来看分析,我猜(错了别怪我,不过应该没错,哈哈):在一个加载域里,多个运行域只能代表不同的段,包括RO、RW、ZI、NOINIT。如果两个运行域里的段的属性都是RO,那么运行域就没有起到合并同属性的段的目的,所以就hardfault了。比如file2里,前几个运行域里的段的属性都是RO,所以就错了。
文件1就可以:
做法:同一集合的obj文件另起加载域存放。
好处:加载域首地址可以不接在上一个加载域的结尾。
------------------------------------ file1 -----------------------------------------------------------------------------
LR_IROM1 0x08000000 0x00034000 { ; load region size_region all=0x00040000 Size: 0x000079b0
ER_IROM1 0x08000000 0x00034000 { ; load address = execution address
*.o (RESET, +First)
* (+RO)
}
RW_IRAM1 0x20000000 0x0000C000 { ; RW data
* (+RW +ZI)
}
}
LR_IROM_FS 0x08034000 0x00003000 { ; Size: 0x00002d5c(include RW data)
ER_IROM_FS 0x08034000 0x00003000 {
ff.o (+RO) ;under FS
fattime.o (+RO)
ccsbcs.o (+RO)
}
}
LR_IROM_OS_CORE 0x08037000 0x00004000 { ; Size: 0x00002ec0
ER_IROM_OS_CORE 0x08037000 0x00004000 {
os_core.o (+RO) ;under OS_CORE
os_flag.o (+RO)
os_mem.o (+RO)
os_q.o (+RO)
os_sem.o (+RO)
os_task.o (+RO)
os_time.o (+RO)
}
}
LR_IROM_OS_PORTS 0x0803B000 0x00001000 { ; Size: 0x000002d8
ER_IROM_OS_PORTS 0x0803B000 0x00001000 {
os_cpu_c.o (+RO) ;under OS_PORTS
os_dbg.o (+RO)
}
}
file2就不行:
做法:同一集合的obj文件另起运行域存放。
现象:运行时进hardfault
-------------------------------------- file2 ---------------------------------------------------------------------------
LR_IROM1 0x08000000 0x00040000 { ; load region size_region all=0x00040000 Size: 0x000079b0
ER_IROM1 0x08000000 0x00030000 { ; load address = execution address
*.o (RESET, +First)
* (+RO)
}
ER_IROM_FS 0x08030000 0x00003000 {
ff.o (+RO) ;under FS
fattime.o (+RO)
ccsbcs.o (+RO)
}
ER_IROM_OS_CORE 0x08033000 0x00004000 {
os_core.o (+RO) ;under OS_CORE
os_flag.o (+RO)
os_mem.o (+RO)
os_q.o (+RO)
os_sem.o (+RO)
os_task.o (+RO)
os_time.o (+RO)
}
ER_IROM_OS_PORTS 0x08037000 { ;0x00001000
os_cpu_c.o (+RO) ;under OS_PORTS
os_dbg.o (+RO)
}
RW_IRAM1 0x20000000 0x0000C000 { ; RW data
* (+RW +ZI)
}
}
结合图1来看分析,我猜(错了别怪我,不过应该没错,哈哈):在一个加载域里,多个运行域只能代表不同的段,包括RO、RW、ZI、NOINIT。如果两个运行域里的段的属性都是RO,那么运行域就没有起到合并同属性的段的目的,所以就hardfault了。比如file2里,前几个运行域里的段的属性都是RO,所以就错了。
相关文章推荐
- Keil sct分散加载文件
- Keil sct分散加载文件
- keil .sct分散加载文件及其应用(重点必看)
- keil .sct分散加载文件及其应用
- c语言小知识点 7 __attribute #pragma pack (n)使用及(scatter file)分散加载文件 .sct
- Keil sct分散加载文件
- keil分散加载文件sct写法
- 【C语言常识】Keil MDK的分散加载文件.sct
- 分散加载文件 ads
- 怎样使用链接脚本文件实现分散加载
- 分散加载描述文件.scf的设置
- 分散加载描述文件.scf
- 在MDK环境下使用分散加载描述文件
- ADS 1.2 分散加载文件mem.scf 文件注释
- ADS分散加载文件使用总结(lpc23xx)
- 转载_ARM的分散加载文件(scatter)介绍
- KEIL下分散加载文件
- Scatter file ——分散加载描述文件
- 关于LPC2200启动程序分散加载描述文件的叙述
- 分散加载描述文件