作者gg1122 (99通未接来电)
看板ASM
标题Re: [问题] Bootloader && Flash
时间Sat Aug 2 01:02:28 2014
※ 引述《WolfLord (呆呆小狼)》之铭言:
: ※ 引述《gg1122 (99通未接来电)》之铭言:
: : 问题1.这样对APP code跑起来会造成问题吗 ?
: 你是直接沿用Intel HEX还是自定义格式?
: 如果使用Intel HEX,那你只要使用不是01~05的格式码自然就不会弄错了。
: 如果是自定义码,那只要你的LOADER自己能正确解码,那就不会有问题了。
W大 编译器编出来的hex 是Intel HEX格式 但是我同事是说可以直接编bin
是不清楚bin开起来会长怎样....之前都没做过bootloader...
现在就是用NXP编译器 直接输出bin档
这个bin想另外藏head进去(可能找现成的软体或自己写个AP做)
哪个自定义码意思是 ??
我的loader应该可以正确收进来(待测)
只是现在客户AP定的通讯协定 让我的loader很难写
目前想请教的点为 FLASH 如果在本来APP code的资料除外
又乱塞资料oxFF 在这些真实资料片段之间 会成APP code当机或者不能跑?
如果塞了40Byte 0xFF 在APP code 开始点 又或先把这216个资料写入
後面再塞写0xFF*40(或者是不写之前ERASE过 应该为0XFF)
1. start app address next page
|------|---------------|
0xFF*40 216 OK data
2. start app address next page
|---------------|------|
216 OK data don't care
另外我看我手上的sample code 他也会不管就怎样就写 跟我状况2很像
/* Ensure that amount of data written to flash is at minimum the
size of a flash page */
#define IAP_FLASH_PAGE_SIZE_BYTES 256
if (u16Len < IAP_FLASH_PAGE_SIZE_BYTES)
{
u16Len = IAP_FLASH_PAGE_SIZE_BYTES;
}
then do write flash
u16Len = 128 or 1024
只收到128 BYTE 硬写入FLASH Rx_buffer根本就没後面128Byte哪些垃圾值
或0x00 (buffer 为static 变数)
这样不就跟我做塞垃圾值写入FLASH的道理一样吗??
: : 问题2.绝对位置的读取 Volatile int *ptr =(Volatile int *)(0x0400)
: : 前面要加 Volatile 吗?
: 这样才能防止编译器自作聪明哪
: : 问题3.ARM有指令让程式跳到绝对位置方法吗?
: : 例如 在APP code 想重回bootload哪边 (不用reset)?
: 这样不可以吗?
: mov pc,#?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.161.200.190
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/ASM/M.1406912551.A.1FD.html
※ 编辑: gg1122 (118.161.200.190), 08/02/2014 01:05:06
1F:推 WolfLord:bin档是memory dump联offset都没有,你说的那些在bin都不 08/02 02:34
2F:→ WolfLord:可行,除非你作记号的位址不是执行码。 08/02 02:35
3F:→ gg1122:我以为跟普通的开档 读档一样 = = 所以应该是在APP 哪边应 08/02 20:25
4F:→ gg1122:应该直接把这些资料定在到最前面让编译器帮我们转出bin档? 08/02 20:26
5F:→ gg1122:不过app code哪边最前面不是会被编译器拿来放中断向量吗? 08/02 20:28
6F:→ gg1122:还是我又搞错方向了? 还麻烦赐教 谢谢 08/02 20:29
7F:推 WolfLord:你完全搞错了,BIN档是ROM CODE,如果你有使用OS 08/02 21:52
8F:→ WolfLord:然後动态载入执行,那才有标头、索引什麽的,最常见的是 08/02 21:53
9F:→ WolfLord:PE、COFF、ELF这三种格式。如果是静态配置到FLASH的,那 08/02 21:54
10F:→ WolfLord:要不就是直接映射的BIN要不就是现成的HEX,除此之外 08/02 21:54
11F:→ WolfLord:都是各家随意订制的格式内容。 08/02 21:55
12F:→ gg1122:简而言之 我别在肖想乱塞资料到FLASH这件事 08/02 22:28
13F:→ gg1122:然後可手动编译bin档 loader前面多少不写入FLASH自己知道 08/02 22:32
14F:→ gg1122:真的资料就一个一个收好page填入 08/02 22:34
15F:→ gg1122:哪些位置就是.map规定好的 所以别恶搞吧? 08/02 22:35
16F:→ gg1122:如果是这样 我只能跟客户沟通协定了 08/02 22:37
17F:推 WolfLord:You got it 08/03 12:43
18F:→ gg1122:谢谢! 08/03 22:25
19F:→ witchang: bin档内容就是.init, .text..等section的资料,顺序依照 08/31 09:20
20F:→ witchang: 你的linker cmd安排,你的例子或许可以在cmd档加一个sect 08/31 09:22
21F:→ witchang: tion, 然後把你想要的资料填在那个section里,因为是你 08/31 09:23
22F:→ witchang: 自己知道的位置,所以程式中要当Data或Op都随你。 08/31 09:23