This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RM46L852:我们是否有应用手册或一些信息链接来了解如何调用一个程序,然后调用另一个程序?

Guru**** 2393725 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/836774/rm46l852-do-we-have-an-application-note-or-some-information-links-to-see-how-to-call-alternatively-one-program-and-then-the-other-one

器件型号:RM46L852

您好!

我有一个关于目标中加载2个.out 文件的调度和函数调用的技术问题。

假设我想将我的软件分为两个部分。

一个由我构建(应用程序)、另一个由其他人构建(驱动程序)、它们存储在独立的闪存区域中、并通过共享存储器进行通信。

您是否有应用手册或一些信息链接来了解如何调用一个程序,然后调用另一个程序?

是否可以使用以下汇编命令:

-       LCR program1_entry_point

-       LCR program2_entry_point

很抱歉,如果这是一个基本问题,我只想用最快、最好的方法来解决,我想你从一段时间后就能很好地了解这一点。

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    什么是 LCR? 我想这是针对其他器件的分支指令。 ARM Cortex 器件不使用 LCR。

    如果在一个项目中编译/链接这两个部分、则可以直接调用函数。

    如果它们处于不同 的项目中、则需要按地址调用函数:

    (((void (*)(void)) address_of _program1_entry_point)();

    (((void (*)(void)) address_of _program2_entry_point)();

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David C:

    如果您尝试同时运行两个或多个执行线程、您将需要使用操作系统的功能来帮助管理此操作。  Hercules 微控制器系列有多种可用选项(至少一个免费的 RTOS);您将如何使用它们的详细信息在一定程度上取决于您使用的操作系统。

    对于许多选项、如果将它们链接到单个闪存映像中会变得更容易、但否则并非不可逾越。  请记住、这两个域之间的"共享点"多于您提到的共享存储器; 它们需要进行适当的配合、以便中断、MPU 设置、异常矢量、微控制器外设等能够正常工作(在交换执行上下文时通常的 CPU 寄存器处理之上、每个操作系统都将提供帮助)。

    或者、您可能会想到一些更简单的东西、其中"驱动程序"将仅由中断驱动。  这将使没有操作系统的实施更容易(尽管您可能仍然希望使用 RTOS 来帮助您自己的应用程序的开发)、但您仍然需要以某种方式管理共享资源。

    我相信您不需要引导加载程序、微控制器开始运行一个应用程序、然后切换到另一个应用程序。  如果您是、您可以在此论坛中找到多篇文章、其中包含示例和相关讨论的链接。  这些通常作为单独的项目来实现、链接到单独的输出文件中、它们在很大程度上相互独立、但并不完全相互独立。  由于引导加载程序的执行完成后、应用程序可以自由地重新初始化大部分系统以满足其自身需求、因此它们的实现更简单。  但即使存在共享资源、您也只能拥有一个闪存扇区0的"所有者"、其中包含用于 ARM CPU 异常处理(包括操作系统常用的异常)的跳转表。

    -thx