请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm8怎么实现bootloader,尤其是地址问题

[复制链接]
tryfly 提问时间:2019-2-1 20:37 /
我用stm8l050j3,想要实现串口升级固件,所以需要bootloader。
我找到了一个网上的程序。还是挺全的,但是因为芯片不同,flash大小不同,我不会分配内存地址。
我的芯片是8K flash的。
1,第一个问题是IAR编译的
我编译看到的是程序占用吗?
z2.png

如果是的话,3个memory是表示什么意思,bootloader的总大小是3107byte吗?那我APP从4K开始可以吧?如果从0x8000开始,那4K位置应该是多少怎么算的呢?


2,下图从哪是8K呢,好像都说是0x8000开始,但是我看图片里有虚线那是什么意思呢?我的bootloader是从0x8000开始,还是从0x8100开始?
z1.png

我也没搞懂到底是0x8000还是0x00800,这个到底是左对齐还是右对齐?

我找的程序是下面的这个,但是他芯片是64K的,我的是8K
  1. <p>#define USER_APP_START_ADD     ((u32)0xA000)  //用户APP起始地址</p><p>
  2. </p><p>//重新初始化STM8的中断向量表  把它重新定义到APP的中断向量中
  3. void STM8_HanderIqr_Init(void)
  4. {
  5.   disableInterrupts();   //关闭所有中断  
  6.   
  7.   u8 Index;        
  8.   
  9.   FLASH_Unlock(FLASH_MemType_Program);//解锁flash
  10.   
  11.   for(Index = 1; Index < 0X20;Index++)
  12.   {
  13.    if(FLASH_ReadWord(0X8000+4*Index)!=(0X82000000+USER_APP_START_ADD+Index*4))
  14.    {
  15.     FLASH_ProgramWord(0X8000+4*Index,0X82000000+USER_APP_START_ADD+Index*4);
  16.    }
  17.   }
  18.   FLASH_Lock(FLASH_MemType_Program);
  19. }</p>
复制代码


收藏 2 评论7 发布时间:2019-2-1 20:37

举报

7个回答
freeelectron 回答时间:2019-2-14 09:28:06
只要flash能编程(芯片开放出来了),就可以实现bootloader

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

DavidTan 回答时间:2019-2-14 09:38:43
8k flash 还要做IAP,不太够吧
IAP + APP 不能大于你选用的芯片的最大FLASH,一般来说IAP部分至少都要2K左右,你要分配好flash的地址才行

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

DavidTan 回答时间:2019-2-14 09:43:19
#define USER_APP_START_ADD     ((u32)0xA000)  //用户APP起始地址,这是40K

#define USER_APP_START_ADD     ((u32)0x1000)  //用户APP起始地址,这是4K
qiangtech 回答时间:2019-2-14 11:00:35
从0X8000开始,先是BOOTLOADER,后面就可以跟APP了。两个加起来不能超过FLASH大小。注意一下最小偏移量。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

七哥 回答时间:2019-2-14 11:01:26
1、具体占多少空间,还是生成一个bin文件看一下吧,因为生成的目标程序很可能是不连续的。而你要想bootloader的话,IAP和APP的两段空间必须是独立的。
2、flash从0x8000地址开始,0x8000到0x80FF段存复位和中断向量表。具体0x008000写了6位数,跟对齐没有关系,只是说6位数足够表示stm8的全部地址空间了,也可以写成8位数,但是在多也没有任何意义了。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

xinshuwei 回答时间:2019-2-14 11:12:49
先从flash0x8000写BootLoader 然后再跟app程序,楼上说的最小的单元说的是最小块擦除大小,清除数据时候注意 。
所以整体分割应该是 BootLoader +app+data ;
BootLoader用于通讯、升级数据、程序跳转等
data区存储升级数据

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

legenderw 回答时间:2019-2-14 13:43:43
收了,不错,学习学习!

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版