完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
可以,比较保险
|
|
|
|
我已经实现了
目标板上有一个FLASH芯片,用于装载新用户程序;目标板每次从BOOT区开始启动,首先检测FLASH中没有新用户程序时,跳转到用户区开始执行用户代码。GPRS服务器端要升级程序时,把新程序分包发送给终端,终端把新程序数据保存到FLASH中,新程序下完后目标板自己复位,然后从BOOT区启动,首先检测FLASH中有新用户程序时,开始读新程序并对用户FLASH区更新。。。更新完新程序后把FLASH中新程序标记清除,然后跳转到用户区执行。升级完毕。 |
|
|
|
|
|
|
|
不错 ! 不知道 不外挂FLASH 的话能否实现?就是写一段代码在内部FLASH 区,GPRS接收数据定制协议,当接收到某个命令时,将运行该内部FLASH段代码。作用就是 将 从串口接收到的数据 写到FLASH 用户程序区,最后跳到这里执行,当然启动代码要改下,确保系统一复位 ,程序就在这里执行! 不知道这样可行不! |
|
|
|
可是, AREA RESET, DATA, READONLY
EXPORT __Vectors __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DCD NMI_Handler ; NMI Handler DCD HardFault_Handler ; Hard Fault Handler DCD MemManage_Handler ; MPU Fault Handler DCD BusFault_Handler ; Bus Fault Handler DCD UsageFault_Handler ; Usage Fault Handler DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD SVC_Handler ; SVCall Handler DCD DebugMon_Handler ; Debug Monitor Handler DCD 0 ; Reserved DCD PendSV_Handler ; PendSV Handler DCD SysTick_Handler ; SysTick Handler ; External Interrupts DCD WWDG_IRQHandler ; Window Watchdog DCD PVD_IRQHandler ; PVD through EXTI Line detect DCD TAMPER_IRQHandler ; Tamper DCD RTC_IRQHandler ; RTC DCD FLASH_IRQHandler ; Flash DCD RCC_IRQHandler ; RCC DCD EXTI0_IRQHandler ; EXTI Line 0 DCD EXTI1_IRQHandler ; EXTI Line 1 DCD EXTI2_IRQHandler ; EXTI Line 2 DCD EXTI3_IRQHandler ; EXTI Line 3 DCD EXTI4_IRQHandler ; EXTI Line 4 DCD DMAChannel1_IRQHandler ; DMA Channel 1 DCD DMAChannel2_IRQHandler ; DMA Channel 2 DCD DMAChannel3_IRQHandler ; DMA Channel 3 STM32的中断向量是固化在FLASH的,boot怎么可以知道应用程序的的中断函数地址呢? |
|
1 条评论
|
|
|
|
|
|
这个很简单,不难
|
|
|
|
怎么个简单呢?能否具体说下怎么实现,BOOT要放在flash起始地址,APP1和APP2放在高地址,当APP升级后,中断地址都可能改变的,boot的中断向量怎么定位中断函数的地址呢?
|
|
|
|
这个内存分块是可以实现的,不需要外部FLASH,不过应用程序大小就只能减半了。APP1,APP2存在不同地址,bootloader启动后先检查APP完整性和各自版本号,选择版本更新和完整的版本运行,中断向量在跳转之前根据运行的APP位置来设置。
至于GPRS传输采用FTP协议比较方便,传输完成后使用CRC32或MD5校验完整性。 |
|
|
|
转个角度看,为什么要支持位置1和2都能运行?
留3块程序位置,一块是默认BOOT,两块分别是位置1(运行区)和位置2(升级暂存区)。 BOOT启动判断位置1和2的APP,位置1校验没通过,位置2通过了,就把2的搬到1处,跳到1运行之。 或者有升级标志且位置2的校验通过,就把2的搬到1处再跳到1运行。 其他情况直接运行位置1。 |
|
|
|
谢谢分享!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
991 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
970 浏览 2 评论
2080 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1177 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1599 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 16:55 , Processed in 0.919093 second(s), Total 68, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号