OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6391|回复: 11

关于STM32 IAP的疑问

[复制链接]

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2013-9-15
在线时间
0 小时
发表于 2013-9-15 10:13:17 | 显示全部楼层 |阅读模式

我看了原子哥的stm32 IAP的例子教程,有几个疑问

第一,FIASH更新APP例子里,IAP的程序里有一个关于USART_RX_BUF[USART_REC_LEN]的定义。USART_RX_BUF大小为55K,而且是定义在SRAM区的,

因为APP程序小于55K,而且战舰开发板的SRAM大于55K,所以战舰的SRAM足够用于暂存USART接收的APP程序,接收完后更新在FLASH里

但是,如果我的stm32的SRAM只有8 K,但是要更新的FLASH APP程序大于SRAM的内存,那原子哥的例子就不适用了,这样的话,USART一边接收程序,一边,一边往FLASH写APP呢?但是必须考虑USART的中断不能打断我往FLASH写APP的函数,不然的话要么下一个USART中断来了,打断了我的FLASH写APP导致写失败,要么我FLASH写APP函数关中断过长,错过USART的接收


大神请指教下小弟!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-15 11:40:09 | 显示全部楼层
这种就要做协议,串口用类似modbus的协议,发一帧数据,等待应答,才发送下一帧数据。这样数据就不会丢失了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2013-9-15
在线时间
0 小时
 楼主| 发表于 2013-9-15 12:04:29 | 显示全部楼层
恩,这个我知道,要和上位机讨论好,就是说我收到1K的话,先把1K的数据写好,再应答上位机,上位机等我应答好了再发下1K。现在我还不知道上头怎么想的,到时候在和他们商量吧。
第二个疑问是这样的,我现在是要在运行APP时,收到上位机的命令时,我收到后就更新APP。
那么,在我的APP的USART解密到上位机的更新密令时,把FLASH内某个指定位置的值更改(就叫FLAG吧),在下一个USART中断来临时,USART中断先是跳到IAP的中断向量表,判断了FLAG,这时就会跳到IAP的USART中断里面,
这样的话,在IAP里有一个USARTX_IRQ(),APP里面也有USARTX_IRQ();这两个不会冲突吗?是不是把两个中断的名字给改为不一样的就好了?
回复 支持 反对

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2013-9-15
在线时间
0 小时
 楼主| 发表于 2013-9-15 12:07:44 | 显示全部楼层
因为刚接触到IAP,里面的原理还不非常了解,请原子哥多多教导。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-15 12:19:28 | 显示全部楼层
回复【3楼】IRLCANDO:
---------------------------------
第二个疑问,前部分没问题。后部分有问题。
我做的项目是这么实现的:
STM32复位后肯定是运行IAP的,然后由IAP跳转到APP,当APP收到更新APP指令后,在一个特定的flash地址,写入一个特定的值(也就是你说的flag),然后软件复位mcu,此时mcu就会复位,重新运行IAP代码,在IAP代码里面,再根据你的flag,去判断是直接运行APP,还是执行APP更新。当你flag标志要更新APP后,IAP就不跳转到APP执行,而是等待串口发过来APP代码,进行更新APP操作,等待更新完成,对flag写入新的值,标记下次就直接运行APP了,然后跳转到APP执行更新后的APP。完成一次更新。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2013-9-15
在线时间
0 小时
 楼主| 发表于 2013-9-15 13:09:23 | 显示全部楼层
不好意思原子哥,我跑去吃饭了,回来晚了
我的疑问是不是可以这样来理解:IAP和APP是两套程序,都有各自的中断向量表,

》》在APP中运行时,如果产生了APP的中断,譬如USART中断,这时虽然PC被强制拉到0x0800 0004处(虽然0x0800 0004是IAP的ResetHandler),但是APP的USART中断仍然会根据APP的中断向量表(被偏移的中断向量表)的查询,
进入APP的USART中断程序。

》》如果想从APP程序跑到IAP程序,需要软件复位STM32,这样就会跳到IAP程序里面
在IAP程序运行时,如果发生了IAP中断,譬如USART中断,这时PC指针也跳到0x0800 0004处,但是这次
查询的中断向量表是IAP的中断向量表,所以会进入IAP的USART中断里面,而不会进入APP里面

》》也就是说,在谁的main执行时发生中断(除了复位中断外),就会查询谁的中断向量表。但是如果是复位中断,就绝对会先查IAP的中断向量表,进入IAP 的main,FLAG判断后,再查APP的中断向量表,进入APP的main
》》这样理解对吗?
回复 支持 反对

使用道具 举报

23

主题

76

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2012-11-2
在线时间
1 小时
发表于 2013-9-15 15:09:31 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我也有个疑问,如果用我们平时用的串口调试助手来发送文件,能不能等到STM32接收到一帧正确数据,然后发送一个应答信号,串口调试助手接收到应答信号,再发送下一帧数据???
回复 支持 反对

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2013-9-15
在线时间
0 小时
 楼主| 发表于 2013-9-15 15:25:51 | 显示全部楼层
回复【7楼】dwiller:
---------------------------------
》》你可以事先规定好协议,比如说你用上位机(譬如串口调试助手)发个信息 表示START 更新,下位机收到了,应答一下,接着上位机发送1k(这个1K要上位机和下位机都要商量好的,你可以把你的APP分成1K,1K的。但是具体需不需要1K,1K发,要看你的stm32分页方法了,大容量的stm32是2K一页,你就2K,2K的发,处理比较简单),下位机就在那数,数完1K,就发个应答,你在上位机看到了应答,就把下一个1K粘贴到发送窗口,接着发,。。。。。一直结束。
》》关键是协议,看上位机和下位机怎么商量了,不出乱就好,我是这么认为的。
回复 支持 反对

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2013-9-15
在线时间
0 小时
 楼主| 发表于 2013-9-15 15:28:17 | 显示全部楼层
回复【7楼】dwiller:
---------------------------------
关于我5楼的想法,兄弟有什么看法?一起等原子哥回答吧,哈哈。
回复 支持 反对

使用道具 举报

23

主题

76

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2012-11-2
在线时间
1 小时
发表于 2013-9-15 18:27:08 | 显示全部楼层
回复【6楼】IRLCANDO:
---------------------------------
IAP要和APP相互跳转,肯定需要对中断向量表需要进行相应的操作了,比如IAP跳转到APP,需要做的第一件事,就是复制中断向量表到APP的开头,跳回IAP的时候也必须重新设置中断偏移向量。
我用的方法比较死,看到LPC好像可以把中断向量表复制到SRAM,这样可以动态改变中断向量表,具体我也没试。
回复 支持 反对

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2013-9-15
在线时间
0 小时
 楼主| 发表于 2013-9-15 22:02:10 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
原子哥有时间帮忙看看五楼问题哈,先下线了。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-15 22:26:39 | 显示全部楼层
回复【6楼】IRLCANDO:
---------------------------------
是的
回复【7楼】dwiller:
---------------------------------
实际应用,都是这么做的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-13 05:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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