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

在单片机上运行app程序  

[复制链接]
cheny3922 提问时间:2017-5-5 11:14 /
    现在原子的板子能在系统中运行bin文件,但是不能退出继续运行系统,能不能开发一种类似于nes游戏的格式的程序,这样在系统烧录好之后还能读取sd卡或者其他存储器上的程序来当做系统的一个任务来运行?    或者启动bin程序时启动优先级最高的任务定时检测一个退出按键,然后如果要运行bin文件,把bin文件放在一个优先级次高的任务里,系统其他任务由于bin文件没有提供系统延时就暂停了,如果最高级任务检测到按键,强行退出bin程序任务,在挂起退出键检测任务,系统正常运行
    希望大家分享下想法和思路,探讨下可行性

收藏 1 评论34 发布时间:2017-5-5 11:14

举报

34个回答
predator-205795 回答时间:2017-12-21 21:11:55
这个问题推出后不能继续执行程序的原因,我认为是用这样的方法,mcu的中断向量表已经被改成所谓app程序的了,而当初的所谓系统的中断向量表偏移地址已经丢了,而且也没有设置机制让程序重新跳转回所谓的系统程序。
我的想法是,改掉app的中断向量表偏移地址,当执行app程序是,跳转到app程序开始的地方执行,但app程序中需要加入一个利用按键终端触发的无条件跳转到系统程序开始执行位置的语句,这样就能在系统程序和app程序之间来回切换而不必重新启动系统

评分

参与人数 1ST金币 +1 收起 理由
zero99 + 1

查看全部评分

kimoye 回答时间:2017-12-21 17:35:37
当然可以了 就是相当于一个程序执行器呗 程序执行器也是个程序 用于执行其他程序 最好还能给所执行的程序提供各种库啊什么的 这不就有点像自己写操作系统了吗 你完全可以自己开发一个微型的操作系统 然后你在基于这个操作系统写软件就方便多啦 当然要是你只是要一个人简简单单的文件执行器 就挺简单的 一直守护进程 进程里面执行其他软件就可以了 然后返回呗 再等候看看有没有要被执行的程序 基本思路就是这样吧

评分

参与人数 1ST金币 +1 收起 理由
zero99 + 1

查看全部评分

anobodykey 回答时间:2017-12-21 21:27:57
感觉不太容易实现,如果要调用bin文件来执行,肯定是要把bin文件写入到STM32的内部FLASH空间的,但STM32内部FLASH的空间最大的也才2MB左右吧,而且需要十分严格的内存管理机制,毕竟STM32是不支持MMU的,而且楼主的思想感觉是有个操作系统的概念在里面,由操作系统来对bin文件进行调度,而且这个bin文件是可以结束的,如果是根据IAP的思想的话感觉无法做到无缝链接,期待高人解答吧

评分

参与人数 1ST金币 +1 收起 理由
zero99 + 1

查看全部评分

好吃好好吃 回答时间:2017-5-5 18:40:07
bootloader就可以
wenyangzeng 回答时间:2017-12-21 09:46:40
可以在多任务环境下,将所述BIN作为一个子任务,sd卡或者其他存储器上的程序作为子任务的一部分。至于按键的退出或进入,则由主任务来调度。

评分

参与人数 1ST金币 +1 收起 理由
zero99 + 1

查看全部评分

zero99 回答时间:2017-12-21 16:46:34
TEST
长春的风 回答时间:2017-12-21 16:49:47
在单片机上运行app需要看架构如果是cortex_a系列应该没有问题,你这里说的app是不是指类似app的单独可以运行的程序,如果arm架构跑操作系统的话应该可以实现

评分

参与人数 1ST金币 +1 收起 理由
zero99 + 1

查看全部评分

lukaisi 回答时间:2017-12-21 16:58:07
可以考虑用bootloader试试
疯de_恒 回答时间:2017-12-21 17:30:53
我觉得CPU不能直接读取SD卡的程序来执行,都是需要经接口读取的。
我建议需要运行bin文件时将其读取放到RAM中,然后切换到在RAM中运行程序。切换前设置一个外按键中断用于退出RAM运行模式,回到FLASH中运行。

评分

参与人数 1ST金币 +1 收起 理由
zero99 + 1

查看全部评分

jinyi7016 回答时间:2017-12-21 17:43:43
在STM32上只运行一个可以加载二进制文件的bootloader,可以有一些简单的界面与fatfs
运行某个APP时,再去读取,并把运行指针给到这个程序,那么这个程序就会自己运行,当退出时,把运行指针再还给bootloader程序,再重新选择其他可执行程序。

评分

参与人数 1ST金币 +1 收起 理由
zero99 + 1

查看全部评分

风之山谷 回答时间:2017-12-21 18:20:17
我的思路是把一个按键设置成最高级别中断,Bin文件不能超过这个按键的中断,然后当按下这个案件的时候进入中断,把其他中断关闭了,一直等待直到再此按下此按钮才退出中断,同时把关闭的中断打开。

评分

参与人数 1ST金币 +1 收起 理由
zero99 + 1

查看全部评分

anywill 回答时间:2017-12-21 18:26:25
好像是多任务挂起
tinyLinux可以
但是flash要10MB空闲空间
maxtch 回答时间:2017-12-21 19:04:12
这个当然可以。你可以参考 DOS 是如何实现程序装载和卸载的,不过在 STM32 下由于程序空间足够,可以不用考虑内核的装载和卸载。另外,有必要要把 NVIC、SCB->VTOR、中断向量表和内核内存保护起来,避免用户程序造次把系统破坏了。

评分

参与人数 1ST金币 +1 收起 理由
zero99 + 1

查看全部评分

slotg 回答时间:2017-12-21 19:40:57
基本上系统应该是要跑一个 Kernel 内核程序,用来管理系统的资源分配,所要运行的文件都只是 Kernel 的一个线程。
另一种比较简单的方式适合单片机系统的就是系统开机后运行一个选单程式,由选单程序选择要运行那一个 BIN 文件,假如要改变运行文件就按下 RESET 键暖启动。

评分

参与人数 1ST金币 +1 收起 理由
zero99 + 1

查看全部评分

the_newbie 回答时间:2017-12-21 19:53:46
跑系统加触摸屏加内存卡感觉想法挺好的,但是暂时还不知道如何实现。静等大神、、
sylar.z 回答时间:2017-12-21 19:56:18
可以把上述的bin文件做成一个特定的流程表格式应用文件。主程序中有一套完整的解析这套流程表的程序,这样就是一个读取应用文件,主程序执行的过程。可以在sd卡中存储多个应用文件,使用这种模式,就实现了游戏机的读取游戏卡中游戏的方式。

评分

参与人数 1ST金币 +1 收起 理由
zero99 + 1

查看全部评分

123下一页

所属标签

相似问题

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