以FreeRTOS为例,如何将内核与应用程序分离? (物理)

问题描述 投票:0回答:1

背景:FreeRTOS、Cortext-M3 假设有一种情况,内核和应用程序分开开发,内核和应用程序的.text段分别存放在FLASH的两个区域中,而RAM也分为内核区和应用程序区,并且烧录时需要下载Kernel.bin和app.bin。 问:如何使用内核调用应用程序? 我想知道它是如何工作的(以FreeRTOS为例),作为初学者,我真诚地向您寻求建议。

embedded kernel cortex-m freertos rtos
1个回答
0
投票

FreeRTOS 和类似的 RTOS 通常静态链接到应用程序,形成整体可执行文件。 没有明确的方法将它们分开;这样做需要您以专有的方式实施此类方法。

支持内核/应用程序分离的操作系统要么通过应用程序加载时的动态链接,要么通过“软件中断”来实现这一点,其中操作系统入口点本质上是中断处理程序,并且从查找表中获取地址。 动态链接本身是一个操作系统功能,自己实现可能不切实际,但拥有一个入口点查找表和一组访问查找表以查找真正入口点并跳转的 API 包装函数或宏是可行的向它传递任何参数。

需要生成查找并静态链接到内核,并位于与应用程序段共享的已知位置。

这是一项大量的工作,但好处可能有限,并且您失去了对所需函数是否存在以及参数的数量和类型进行任何编译/链接时错误检查的好处。 所有这些都可以通过更复杂的参数元数据查找来解决,但可能会牺牲运行时性能和确定性。

毫无疑问还有其他解决方案。 例如,您可以静态链接内核和应用程序,但使用链接描述文件在单独的内存区域中找到每个对象模块,然后为每个区域生成单独的二进制映像。 但是,在这种情况下,它们仍然是静态链接的,例如,您无法在不更新另一个组件的情况下用更新版本替换其中一个组件。

© www.soinside.com 2019 - 2024. All rights reserved.