首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keil RTX启动时的控制

Keil RTX启动时的控制
EN

Stack Overflow用户
提问于 2016-07-29 01:20:20
回答 1查看 179关注 0票数 0

我正在为使用相对复杂的通信接口的ARM Cortex-M3编写一个引导加载程序;这与实际应用程序使用的相同。应用程序使用Keil的RTX作为内核,通信堆栈依赖于此。当然是利用GCC。

引导加载程序执行以下基本步骤:

  1. 启动时,检查有效的应用程序映像;如果没有可用,则进入升级模式;
  2. 它检查按下按钮作为进入升级模式的请求;如果发现该按钮,则进入升级模式。
  3. 在找到了一个有效的图像并且没有升级请求之后,它“启动”了应用程序。

这是相当简化的,但它充分地描述了场景的目的。

令人惊讶的是,最后一个问题被证明是很难启动应用程序。其想法是禁用中断、设置向量表、堆栈指针,并跳转到新的向量表中的应用程序的重置向量。所有这些工作都很有趣,只是在不久之后,我就犯了个大错。

通过实验,如果我在一个普通的引导加载程序(不使用RTX或者当然不使用通信堆栈)中这样做,那么对应用程序的引导就会很好。因此,RTX似乎是问题所在。

问题是,真正的引导加载程序在进入升级模式之前不需要RTX。因此,显而易见的方法是,在确定需要RTX之前不要启动RTX;但是,它似乎被黑客入侵到启动代码中,所以当我进入引导加载程序代码时,已经太晚了;实际上,引导加载器main()函数已经是一个线程了!

最好的方法似乎是没有启动RTX (可惜我没有使用FreeRTOS!)直到我需要它;然而,这似乎需要一些黑客。另一种方法是以某种方式禁用所有中断和异常,但由于某种原因,我在那里也没有成功。有人有这两种方法的例子吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-30 16:07:00

如果有人遇到这种情况,解决方案实际上很简单。我只是在SystemInit文件中定制了system_efm32gg.c ()函数!虽然_efm32gg是厂商特有的,但system_X.c似乎是一种广泛使用的ARM结构--至少我在ST、NXP和EnergyMicro/SiliconLab中见过--所以这是一种很好的通用方法。

我早该弄清楚了!叹息

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38649093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档