STM32的IAP,2个APP的问题

作者&投稿:勇晴 (若有异议请与网页底部的电邮联系)
请教STM32 IAP 进入APP后运行一段时间后死机~

应该是楼主在跳转到应用程序前没有关掉IAP里面的串行接收中断 查看原帖>>

STM32是可以实现多个APP的,你可以通过你的IAP来控制app,通过不同的地址你可以选择跳转到不同的APP,一般都直接使用的IAP像APP跳转,逆向跳转一般通过复位来实现,但也可以通过代码跳转,APP之间的跳转也是一样的。
需要注意的是每个APP包括IAP都有各自的中断向量表,若在相应代码中有使用中断,跳转前记得先关闭中断,以免刚跳转过去但你还没来得及重新设置中断向量表就进入中断,程序可能跑飞。
你先实现了一个IAP+APP,那么一个IAP+多个APP也就差不多懂了。

不了解所说的代码跳转方式具体是如何实现的,但可以肯定的是你的切换程序的相应处理。一般来说比较可靠的切换,是在被切换的函数中,通过修改SP寄存器的,然后在返回跳转至指定函数的入口地址,从而切换的。 另外需要注意的是升级过程是在中断调用,函数的返回指令也是不一样的 。

裸奔的话给你一个自简单的参考结构,只要任何位置 switchapp(xxx); 都可以相对可靠的切换。

void *( CurrentApp )(void) =
void main( )
{
...
while(1)

{
CurrentApp ();
}
}
void switchapp( void *( NextApp ))
{
CurrentApp = NextApp ;
}
bool KeepRunning =true;
void App1( )
{
while(KeepRunning)

{
.......
}
}
void App2( )
{
while(KeepRunning)

{
.......
}
}


口袋妖怪漆黑的魅影5.0金手指 只要时间球,学习装置,增加攻击,增加特攻...
13F - TM31 瓦割140 - TM32 影分身141 - TM33 反射盾142 - TM34 电击波143 - TM35 火焰放射144 - TM36 淤泥爆弹145 - TM37 沙暴146 - TM38 大字火147 - TM39 岩石封148 - TM40 燕返149 - TM41 寻衅14A - TM42 空元气14B - TM43 秘密力量14C - TM44 睡眠14D - TM45 着迷14E - TM46...

口袋妖怪火红叶绿金手指口袋妖怪火红叶绿金手指无限金钱
013A=TM26(地震)013B=TM27(返回)013C=TM28(DIG)013D=TM29(精神)013E=TM30(影子球)013F=TM31(砖破碎)0140=TM32(双队)0141=TM33(反映)0142=TM34(冲击波)0143=TM35(喷火器)0144=TM36(污泥炸弹)0145=TM37(沙尘暴)0146=TM38(火爆)0147=TM39(岩墓)0148=TM40(空中Ace)0149=TM41(折磨)014A=TM4...

英特尔和AMD的发展历史
2002--AMD推出第一款基于MirrorBit(TM) 架构的闪存设备。 2003-AMD 推出面向服务器和工作站的AMD Opteron(TM)(皓龙) 处理器。 2003-AMD 推出面向台式电脑 和笔记簿电脑的AMD 速龙(TM) 64处理器。 2003-AMD推出 AMD 速龙(TM) 64 FX处理器. 使基于AMD 速龙(TM) 64 FX处理器的系统能提供影院级计算性能。200...

这些都是什么程序?
iao.exe iap.exe icepack.exe ico.exe icq.exe icwconn1.exe ie5setup.exe ie6setup.exe igfxtray.exe imgicon.exe InoRT.exe installstub.exe instantaccess.exe ipmon32.exe iPodManager.exe ipodservice.exe iPodWatcher.exe irmon.exe isafe.exe issch.exe ISSVC.exe isuspm.exe iTunesHelpe...

关于系统进程,高手进!!!
路径:C:\\WINDOWS\\system32\\svchost.exe命令行:C:\\WINDOWS\\System32\\svchost.exe -k netsvcs文件描述:Generic Host Process for Win32 Services出品公司:Microsoft Corporation文件大小:14 KB文件版本:5.1.2600.2180MD5值:1b722169c2b3057b9332403906a2e148另外问一句,一共有8个svchost.exe进程正常不??解决问题必将加分...

EXPLORER.EXE结束进程?
TMOAgent.exe tmproxy.exe tppaldr.exe tsc.exe TSMSvc.exe type32.exe UAService7.exe ULCDRSvr.exe uninst.exe uninstall.exe unrar.exe unwise.exe updaterui.exe updatestats.exe updreg.exe uptodate.exe UrlLstCk.exe urlmap.exe UsrPrmpt.exe vetmsg.exe ViewMgr.exe ...

电脑高手请进。
lsass.exe mad.exe mapisp32.exe mmc.exe mmtask.tsk mprexe.exe msconfig.exe msdtc.exe msgsrv32.exe msiexec.exe msoobe.exe mstask.exe mstinit.exe ndisuio.sys netdde.exe ntoskrnl.exe ntvdm.exe pchschd.exe pstores.exe rasautou.exe rdpclip.exe regsvc.exe ...

怎样才知道哪个是危险进程
iao.exe iap.exe icepack.exe ico.exe icq.exe icwconn1.exe ie5setup.exe ie6setup.exe igfxtray.exe imgicon.exe InoRT.exe installstub.exe instantaccess.exe ipmon32.exe iPodManager.exe ipodservice.exe iPodWatcher.exe irmon.exe isafe.exe issch.exe ISSVC.exe isuspm.exe iTunesHelpe...

电脑任务管理器进程详解?
进程:用最简洁的话来说,进程就是一个正在执行的程序,一个或多个线程在进程中运行,线程是操作系统分配CPU运算时间的最小单位。每一个进程都提供了运行一个程序所必需的资源,一个进程具有4GB的虚拟地址空间(Windows NT Server Enterprise Edition及Windows 2000 Advanced Server中低3GB虚拟地址空间供...

关于任务管理器中的进程
iao.exe iap.exe icepack.exe ico.exe icq.exe icwconn1.exe ie5setup.exe ie6setup.exe igfxtray.exe imgicon.exe InoRT.exe installstub.exe instantaccess.exe ipmon32.exe iPodManager.exe ipodservice.exe iPodWatcher.exe irmon.exe isafe.exe issch.exe ISSVC.exe isuspm.exe iTunesHelpe...

海安县19264467074: STM32运行两个工程,互不干扰,这个要怎么做 -
右全思美: 你说的就是STM32的IAP实现方式吧,通过IAP就是实现两个独立的工程的运行,不过不知道你所谓的两个工程是否包括IAP本身,若不是的话,你的方案将是一个Bootloader+多个APP的方案.IAP里面的工程(包括本身)虽然可以同时存在,但却不能同时运行,想要同时运行,还是不要考虑IAP了,考虑上操作系统吧,但此时工程就无法独立,需要你进行工程合并以及操作系统的移植了.IAP也不是一两句话能说清楚的,你需要大量的查找资料才行.建议你搜索下相关例程先看看.

海安县19264467074: stm32在线iap升级需要两个程序吗 -
右全思美: 需要两个程序,一个程序是Bootload程序,通过此程序来进行对APP程序的更新; 第二个是APP程序,就是你需要更新的程序

海安县19264467074: 请教stm32 IAP多个app的问题 -
右全思美: 多个APP和一个app区别不大,只是多了一个APP入口供IAP选择,升级APP时多了一个app的起始地址.另外多个app之间没办法互相跳转(中断结构过于复杂,容易跑飞),每次选择app都需要从IAP进行选择.

海安县19264467074: 怎么使用stm32写IAP的bootloader和APP -
右全思美: 使用stm32写IAP的和APP Bootloader里面主要是1、设置bootloader和app的空间2、接收编译好的app的bin文件,写入flash3、实现跳转 App里面主要修改的地方是1、 ROM起始地址和分配的空间大小2、 重定向中断向量3、 生成bin文件

海安县19264467074: 有谁正确使用过STM32的USB IAP功能 -
右全思美: 我找到一个比较好的折中办法: 1. IAP 起始地址0x08000000,APP 起始地址0x08004000,上电复位进入IAP 程序; 2. APP 程序的长度和CRC32校验码存放在0x0800FC00(Flash最后一页);

海安县19264467074: stm32 app转到iap程序跑飞,出现hardware - fault -
右全思美: IAP一般放在在0x08000....00,也就是用户flash的最开始,app跳转到IAP一般通过软件复位或硬件复位跳转直接到IAP,当然我也尝试过使用PC指针直接跳转到IAP,这样做可以保持APP里面设置的外设寄存器值保持不变.我在调试IAP也遇到各种问题,但最后大部分解决了.你的IAP和APP结构是怎么样的,你说得太模糊,难以定位你的问题所在.根据你的描述你是不是把IAP放在了APP后面或者RAM里面了,把APP放在了USER——Flash的开始?

海安县19264467074: 怎样写stm32 iap应用程序 -
右全思美: 不用重新写,只需要在你原来的没有IAP的工程代码上加上一些东西.最重要的一点就是向量表需要重新定位,使用相关函数即可,具体的你稍微搜索一下就能知道如何重新定义一个中断向量的偏移地址.另外需要说明的是,根据我的经验,app里面不像网上说的那样,从IAP跳转到APP后,AAP第一句代码就是重新设置向量偏移,应该要先初始化系统时钟,再执行向量偏移的修改.除了向量偏移修改这个必选项之外,也可以自定义加一些代码和IAP配合,用来实现如何通过命令来使得APP运行程序时可以跳转到IAP,一般来说是按条件软件复位,以及要让IAP知道是跳转还是升级代码这一标志位如何传递等.

海安县19264467074: STM32 从APP跳到IAP怎么串口能发不能收!!急!!!
右全思美: 大神我是这样的,我首先是使用串口1把IAP下载到0X800000这个起始地址运行,然后使用循环等待串口1收到命令进入IAP引导APP到0x8003000这个地址并运行,再在APP中使用循环等待串口1收到命令后跳转到IAP中;跳到IAP之后它应该像之前一样继续等待接受我的命令(即接受串口1的数据)跳到下载菜单下载(即串口1 下载2进制文件);问题就在这了它收不到我发的命令了??如果像你说的那这个怎么改?我在APP的中断向量表重映射是0x800000+4,在IAP主函数有SCB->VOTAL=0X800000|0X0(我是直接拿官网给的例程改的就只是改了接受跳转这部分).非常感谢你回答哦亲!这个弄了好久就是找不到问题

海安县19264467074: 用stm32f103RE单片机做IAP串口远程升级,APP大于ram,这个怎么办 -
右全思美: AP升级要程序要十分严谨的,你把升级文件做个校验CRC或者别的校验,把串口接收到的数据直接写入到单片机内部FLASH,把APP所有数据写入完成,在从你写入的地址到结束的地址,

海安县19264467074: Stm32里用IAP方式烧程序正常,但是发现掉电再上电之后,程序好像就不进主程序了 -
右全思美: 使用仿真器烧写app并且仿真是直接运行的app,没有经过IAP跳转.掉电后重新上电运行app则要通过IAP进行跳转.说白了,那你的IAP存在bug,多半是逻辑上的,自己在IAP里面多看看吧,找找原因.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网