OpenEdv-开源电子网

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

关于多程序的自动切换的问题

[复制链接]

28

主题

360

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
1027
注册时间
2021-2-4
在线时间
146 小时
发表于 2023-5-16 12:40:13 | 显示全部楼层 |阅读模式
21金钱
目前有一个需求就是根据设备ID(四个引脚电平)来进行识别。
然后跳转到特定的程序中,想问一下要怎么实现。
网上搜了一下 都是一个Bootloader加一个APP
然后HEX文件合并直接下载
目前有点大概,感觉要用Bootloader来实现但是不知道怎么做
BootLoader本人也是没有用过。

最佳答案

查看完整内容[请看2#楼]

程序根据ID调用相应函数不就行了? main() { if(ID==0)fun0(); else if(ID==1)fun1(); else if(ID==2)fun2(); else if(ID==3)fun3(); }
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-5-16 12:40:14 | 显示全部楼层
程序根据ID调用相应函数不就行了?
main()
{
if(ID==0)fun0();
else if(ID==1)fun1();
else if(ID==2)fun2();
else if(ID==3)fun3();
}
专治疑难杂症
回复

使用道具 举报

3

主题

800

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3775
金钱
3775
注册时间
2017-3-7
在线时间
1645 小时
发表于 2023-5-16 13:10:37 | 显示全部楼层
不知道你的程序需不需要热切换,也就是运行中,设备ID会变,切换运行不同的程序,我觉得和bootloader没多大关系,程序中有逻辑处理就好了
回复

使用道具 举报

28

主题

360

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
1027
注册时间
2021-2-4
在线时间
146 小时
 楼主| 发表于 2023-5-19 09:07:23 | 显示全部楼层
a5820736 发表于 2023-5-16 13:10
不知道你的程序需不需要热切换,也就是运行中,设备ID会变,切换运行不同的程序,我觉得和bootloader没多大关系 ...

不需要热切换。开机的时候读取一次然后调用对应的程序就行
回复

使用道具 举报

28

主题

360

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
1027
注册时间
2021-2-4
在线时间
146 小时
 楼主| 发表于 2023-5-19 09:09:49 | 显示全部楼层
LcwSwust 发表于 2023-5-16 12:40
程序根据ID调用相应函数不就行了?
main()
{

调用的程序连Main都不一样,完全是不同的入口。
本来是核心板做到通用然后我选了个芯片
结果到周一和我说程序要能自动切换
回复

使用道具 举报

28

主题

360

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
1027
注册时间
2021-2-4
在线时间
146 小时
 楼主| 发表于 2023-5-19 09:13:05 | 显示全部楼层
目前采用了BootLoader跳转到APP的方式写了一个Demo
Boot中没有读取引脚,而是开机直接跳转到APP。
APP里做了一个闪灯的程序,但是程序亮了灯后会卡在Delay中。
初始化都是做了的。
回复

使用道具 举报

3

主题

800

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3775
金钱
3775
注册时间
2017-3-7
在线时间
1645 小时
发表于 2023-5-19 09:20:58 | 显示全部楼层
电子控2021 发表于 2023-5-19 09:09
调用的程序连Main都不一样,完全是不同的入口。
本来是核心板做到通用然后我选了个芯片
结果到周一和我 ...

不清楚你的具体需求,但是以前做过通过不同电阻值,不同io输入,运行不同的程序,并未考虑过bootloader这种方式
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-5-19 09:23:24 | 显示全部楼层
电子控2021 发表于 2023-5-19 09:13
目前采用了BootLoader跳转到APP的方式写了一个Demo
Boot中没有读取引脚,而是开机直接跳转到APP。
APP里做 ...

估计是你想的过于复杂,可否说一下细节?是否涉及中断向量?是不是有点像“分散加载”?



专治疑难杂症
回复

使用道具 举报

28

主题

360

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
1027
注册时间
2021-2-4
在线时间
146 小时
 楼主| 发表于 2023-5-19 09:55:49 | 显示全部楼层
LcwSwust 发表于 2023-5-19 09:23
估计是你想的过于复杂,可否说一下细节?是否涉及中断向量?是不是有点像“分散加载”?

用Boot中断向量肯定是涉及了

项目具体细节还没有
但是给我的需求就是尽量通用
具体需求是
把MCU做成模块
然后根据ID来自动加载不同程序
我本来以为是什么项目就再烧入什么程序
仅仅是硬件通用
结果软件还要自动切换
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-5-19 10:47:46 | 显示全部楼层
电子控2021 发表于 2023-5-19 09:55
用Boot中断向量肯定是涉及了

项目具体细节还没有

那就是我想得简单了。
若程序是提前知晓的,可以融合在一起,简单的方式就是利用“回调函数”来切换功能。
若程序是未知的,或不能融合,估计还是得用bootloader,根据ID去烧写不同的程序;
这个我就不了解了。

专治疑难杂症
回复

使用道具 举报

9

主题

218

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1364
金钱
1364
注册时间
2020-5-12
在线时间
381 小时
发表于 2023-5-19 12:38:23 | 显示全部楼层
第一步:调试boot能进入App
第二步:将flash分为5个部分
第三步:  编写4个app程序,中断偏移量对应到flash分区进行
第四步: 在boot里判断ID,根据ID进行地址跳转
回复

使用道具 举报

28

主题

360

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
1027
注册时间
2021-2-4
在线时间
146 小时
 楼主| 发表于 2023-5-19 13:29:41 | 显示全部楼层
叶子君 发表于 2023-5-19 12:38
第一步:调试boot能进入App
第二步:将flash分为5个部分
第三步:  编写4个app程序,中断偏移量对应到flas ...

我程序在app里卡住了
app里的滴答定时器获取不到数值。
初始化都是正常的。调试跑一遍都没问题就是卡在delay
因为获取的数值都是0
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 08:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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