申博太阳城游戏平台现金网: [技术问答] 自己写BOOTLOADER的实现方法

永利游戏开户直营
153|1
楼主
大家好,申博太阳城游戏平台现金网:我这个项目是需要自己写个BootLoader,因为我要在我自己的BootLoader逻辑里做很多事情,包括在BootLoader里实现APP区域的update。我现在有几个问题不是很确定,第一,我的APP开始地址怎么确定,在哪定义?我没找到flash的分配管理文件,是直接在keil里编辑ROM1的地址值吗?

第二,我在BOOTLOADER要跳转到APP里的时候,我该怎么跳过去呢?是否可以直接参考你们的ISP源码?你们是怎么实现跳转到0X08000000地址执行的。
第三,其实也是第一点,APP地址定义好后,中断向量表要重新定义么?
沙发
| 2019-9-29 13:52 | 只看该作者
第一,我的APP开始地址怎么确定,在哪定义?我没找到flash的分配管理文件,是直接在keil里编辑ROM1的地址值吗?如果在配置中勾选了use memory layout from target dialog是通过IROM1进行配置,没勾选则在sct文件中配置。
bootloader的配置如下:

APP的配置如下:

第二,我在BOOTLOADER要跳转到APP里的时候,我该怎么跳过去呢?是否可以直接参考你们的ISP源码?你们是怎么实现跳转到0X08000000地址执行的。
可以参考我们的IAP代码。
bootloader跳转代码:
  1. /**
  2. * JumpTOApp
  3. *
  4. * @param[in] none
  5. * [url=home.php?mod=space&uid=266161]@return[/url]    none
  6. *
  7. * [url=home.php?mod=space&uid=247401]@brief[/url]  Jump to APP Code
  8. */
  9. void JumpTOApp(void)
  10. {
  11.     uint32_t JumpAddress;
  12.     __ASM("CPSID I");
  13.     if(((*(__IO uint32_t *)APP_ADDRESS) & 0x2FFE0000) == 0x20000000)
  14.     {
  15.         JumpAddress = *(__IO uint32_t *)(APP_ADDRESS + 4); // Jump to user application
  16.         s_jumpToApplication = (pFunction)JumpAddress;   // Initialize user application's Stack Pointer
  17.         __set_MSP(*(__IO uint32_t*)APP_ADDRESS);
  18.         s_jumpToApplication();  /* jump to app */
  19.     }
  20.     else
  21.     {
  22.         printf("top of stack pointer is unvalid! please reboot!\r\n");
  23.         while (1);  /* because of APP address have no code data */
  24.     }
  25. }
复制代码

第三,其实也是第一点,APP地址定义好后,中断向量表要重新定义么?


APP中,进入MAIN函数后,重定向中断向量表:
  1. __ASM(" CPSIE I");
  2. SCB->VTOR = APP_ADDRESS;
复制代码



扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

永利游戏开户直营 快速回复 返回顶部 返回列表
彩天堂在线开户直营网 永利游戏开户直营 亚美HB电子 拉斯维加斯 娱乐之都登入 河南福彩网代理直营网
吉祥坊怎么玩网上娱乐场 51色情干妹妹 新葡京官网登陆 网上平台抓赌新闻网上娱乐场 英皇赌场风水网上娱乐场
菲律宾申博菠菜平台游戏导航 澳门劳务人员 开户送现金网站网上娱乐场 88娱乐备用网址网上娱乐场 拱北过关后去威尼斯
ag亚游会娱乐平台登入 玛雅吧 首页 澳门威尼斯人娱乐场登入 申博太阳城456700手机客户端下载 澳门金沙664882.com