bootlodar的学习

记录学习过程中遇到的问题


学习

/* 程序跳转函数 */
typedef void (*Jump_Fun)(void);
void IAP_ExecuteApp (uint32_t App_Addr)
{
  Jump_Fun JumpToApp;

  if ( ( ( * ( __IO uint32_t * ) App_Addr ) & 0x2FFE0000 ) == 0x20000000 )  //检查栈顶地址是否合法.
  {
    JumpToApp = (Jump_Fun) * ( __IO uint32_t *)(App_Addr + 4);  //用户代码区第二个字为程序开始地址(复位地址)  
    MSR_MSP( * ( __IO uint32_t * ) App_Addr );                  //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
    JumpToApp();                                                //跳转到APP.
  }
}

这里写的很详细很详细

  • 函数指针类型

    2020.11.26
    ------------------------------------------------------------------------------------------------------------------

  • bootlodar程序和app程序烧入单片机但是app程序不运行。

  • keil生成bin文件的方法,在user,after build,那里填入

  • fromelf.exe --bin -o "$L@L.bin" "#L"

    2020.11.27
    -------------------------------------------------------------------------------------------------------------------

  • 利用上面链接 的教程实现了bootloader向app跳转。接下来flash的操作与片外flash的操作,实现app1与app2的转换。

  • 参照b站up的历程进行
    2020.12.01
    --------------------------------------------------------------------------------------------------------------------

  • 今天看了下读取片内flash的数据,有个疑惑如下图
    在这里插入图片描述在这里插入图片描述大致是读到的数据和内存里面存储的高低位不一致,(根据手册内存与地址分配,每一地址有一字节的数据)通过查找,stm32数据低地址数据在前,连续读两位数据就会出现这种看似不对照的现象,通过读一个字节可以验证
    在这里插入图片描述

  • 以及这篇写的很详细这个还有这个
    2020.12.02
    -------------------------------------------------------------------------------------------------------------------

  • 下面这句的作用是读取app程序执行程序地址的前四位,这个数据代表的是栈的顶地址,通过判断栈顶地址值是否正确来判断是否已经下载用户应用程序。因为用户程序的启动文件开始会初始化栈空间,如果栈顶地址正确,说明用户程序已经下载。

if ( ( ( * ( __IO uint32_t * ) App_Addr ) & 0x2FFE0000 ) == 0x20000000 )  //检查栈顶地址是否合法.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值