查看: 17024|回复: 16

[已解决] KL,KEIL,uart bootloader跳转问题(已解决)

[复制链接]

该用户从未签到

25

主题

104

帖子

0

中级会员

Rank: 3Rank: 3

积分
302
最后登录
1970-1-1
发表于 2014-2-27 10:28:35 | 显示全部楼层 |阅读模式
请教几个bootloader跳转到用户程序以及用户程序的编写的问题:
 1.看了 AN2295文件之后对跳转的理解:只需要设置vector——table重定向,然后在KEIL下执行汇编跳转即可(更改SP和PC指针)。
  于是在我的bootloader里面直接写了如下两句:(userapp已经通过J_FLASH烧写到0x10000处):
 
 // relocate vector table
    SCB_VTOR = RELOCATED_VECTORS;//0x10000;
    // Jump to user application
   JumpToUserApplication(RELOCATED_VECTORS, (RELOCATED_VECTORS+4));   //*((unsigned long*)
(附:JumpToUserApplication函数与AN2295不一样,没有指针转换。应该是我这里理解不对吧,我也试过用原来的版本,跳不过去...)
结果单步进入后app没有执行,全速执行发现还是在bootloader里面执行。
2.用户程序编写:我没有做任何改动,sct文件也还是照旧,因为觉得生成的bin文件我都是直接整体从原0地址搬到现在的0x10000地址处,求问如果要改动,应该如何改动?
谢谢!
 
我知道答案 目前已有16人回答
回复

使用道具 举报

该用户从未签到

10

主题

459

帖子

0

中级会员

Rank: 3Rank: 3

积分
303
最后登录
2024-10-24
发表于 2014-2-27 13:04:02 | 显示全部楼层

回复:KL,KEIL,uart bootloader跳转问题

bootloader程序不需要修改,之所以没跳转成功可能是因为跳转的地址没有定义,甚至你烧写后把bootloader的原有代码空间覆盖掉了。APP程序的SCF文件还是需要修改的,要把代码的起始地址修改为在bootloader指定的relocated的地址,在KEIL-options-target-IROM1中。
回复 支持 反对

使用道具 举报

该用户从未签到

10

主题

459

帖子

0

中级会员

Rank: 3Rank: 3

积分
303
最后登录
2024-10-24
发表于 2014-2-27 13:04:10 | 显示全部楼层

回复:KL,KEIL,uart bootloader跳转问题

bootloader程序不需要修改,之所以没跳转成功可能是因为跳转的地址没有定义,甚至你烧写后把bootloader的原有代码空间覆盖掉了。APP程序的SCF文件还是需要修改的,要把代码的起始地址修改为在bootloader指定的relocated的地址,在KEIL-options-target-IROM1中。
回复 支持 反对

使用道具 举报

该用户从未签到

25

主题

104

帖子

0

中级会员

Rank: 3Rank: 3

积分
302
最后登录
1970-1-1
 楼主| 发表于 2014-2-27 13:13:35 | 显示全部楼层

回复:KL,KEIL,uart bootloader跳转问题

 谢谢版主!
我修改了app的scf文件如下:
LR_IROM1 0x00010000 0x00020000  {    ; load region size_region
  ER_IROM1 0x00010000 0x00020000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x1FFFF000 0x00001000  {  ; RW data
   .ANY (+RW +ZI)
  }
  RW_IRAM2 0x20000000 0x00003000  {  ; RW data
   .ANY (+RW +ZI)
    *(runinram)
  }
}
即把执行地址放到boot中要跳转到的0x10000了,但是生成的hex文件只有一行记录0x400处的值,bin文件生成不了,只有一个.bin的文件夹里面有这两个文件:ER$$.ARM.__at_0x400和ER_IROM1
回复 支持 反对

使用道具 举报

该用户从未签到

25

主题

104

帖子

0

中级会员

Rank: 3Rank: 3

积分
302
最后登录
1970-1-1
 楼主| 发表于 2014-2-27 13:28:44 | 显示全部楼层

RE:KL,KEIL,uart bootloader跳转问题

版主你好,app的hex文件是有一行0x400处的记录,然后就是都是0x10000处的记录。我将该文件直接烧写到FLASH的话会有提示要烧写的区域并不全空白(应该就是指0x400处),需要erase,那不是把我的这个区域的boot代码也擦除掉了吗?求问这块区域的解决办法
回复 支持 反对

使用道具 举报

该用户从未签到

25

主题

104

帖子

0

中级会员

Rank: 3Rank: 3

积分
302
最后登录
1970-1-1
 楼主| 发表于 2014-3-3 10:59:33 | 显示全部楼层

RE:KL,KEIL,uart bootloader跳转问题

好吧,然后我把0x400-0x410 的内容给丢掉了,单独只烧写usercode的话执行好像不正常,但是有bootloader引导的话是可以执行的。
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

1

帖子

0

新手上路

Rank: 1

积分
4
最后登录
1970-1-1
发表于 2014-5-22 19:28:04 | 显示全部楼层

咨询keill生成bin文件问题

LR_IROM1 0x0004000 0x00020000  {    ; load region size_region
  ER_IROM1 0x0004000 0x00020000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x1FFFF000 0x00001000  {  ; RW data
   .ANY (+RW +ZI)
  }
  RW_IRAM2 0x20000000 0x00003000  {  ; RW data
   .ANY (+RW +ZI)
    *(runinram)
  }
}
上述是我的sct文件的设置。
C:\Keil\ARM\ARMCC\bin\fromelf.exe --bin -o demo.bin  demo.axf
经过上面配置编译后 生成的是一个demo.bin的文件夹。请问楼主 上述问题你是怎样解决的呢?
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

1

帖子

0

新手上路

Rank: 1

积分
26
最后登录
2016-9-22
发表于 2016-5-5 09:44:56 | 显示全部楼层
Keil 的AN2295SW中的工程貌似不能编译通过啊,里面却少bootloader_ASM.s文件,楼主的程序中有这个文件么?
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

7

帖子

0

新手上路

Rank: 1

积分
36
最后登录
2017-1-18
发表于 2016-6-3 18:01:54 | 显示全部楼层
Error: Q0147E: Failed to create Directory ..\OBJ\LP107.bin\ER$$.ARM.__at_0x400: File exists
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

7

帖子

0

新手上路

Rank: 1

积分
36
最后登录
2017-1-18
发表于 2016-6-3 18:02:38 | 显示全部楼层
没法生成bin 提示是这样的Error: Q0147E: Failed to create Directory ..\OBJ\LP107.bin\ER$$.ARM.__at_0x400: File exists
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-21 12:20 , Processed in 0.109691 second(s), 29 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表