c++ - 如何将函数放置在 C 中的特定地址?

标签 c++ c memory-management embedded microcontroller

我想在特定位置放置一个函数 void loadableSW (void):0x3FF802。在另一个函数 residentMain() 中,我将使用指向函数的指针跳转到该位置。如何声明函数 loadableSW 来完成这个。为了清楚起见,我附上了 residentMain 的框架。

更新:目标硬件是 TMS320C620xDSP。由于这是一个航空项目,确定性 行为是理想的设计目标。理想情况下,他们想知道在特定时间内存的哪一部分包含什么。我刚刚知道的解决方案是在链接器文件的内存中定义一个部分。该部分应从 0x3FF802(放置函数的位置)开始。由于 loadableSW 函数的大小已知,因此内存部分的大小也可以确定。然后指令 #pragma CODESECTION ("function_name", "section_name") 可以将该函数放在指定的部分。

由于 pragma 指令在测试脚本中是不允许的,我想知道是否有任何其他方法可以在不使用任何链接器指令的情况下执行此操作。

此外,我很好奇。 C++ 中的函数是否有任何放置语法?我知道有一个用于对象,但函数?

    void residentMain (void)
    {
        void (*loadable_p) (void) = (void (*) (void)) 0x3FF802;
        int hardwareOK = 0;
    
        /*Code to check hardware integrity. hardwareOK = 1 if success*/
    
        if (hardwareOK)
        {
            loadable_p (); /*Jump to Loadable Software*/
        }
        else
        {
            dspHalt ();
        }
    }

最佳答案

我不确定您的操作系统/工具链/IDE,但以下答案应该有效:

How to specify a memory location at which function will get stored?

我只知道一种方法,它显示在第一个答案中。

更新

如何在 gcc 中定义段:

变量: http://mcuoneclipse.com/2012/11/01/defining-variables-at-absolute-addresses-with-gcc/

方法(部分(“部分名称”)):http://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/Function-Attributes.html#Function%20Attributes

关于c++ - 如何将函数放置在 C 中的特定地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19701424/

相关文章:

c - 为什么我的文件的相对路径不能被我的应用程序识别?

c - 在 Macos Sierra 上调试 C

c - 头文件中的全局结构

c++ - boost karma - 从一个属性生成多个字符串

c++ - Visual Studio 2010 上的访问冲突

c++ - 将 std::string 转换为 v8::string,反之亦然?

windows - 衡量程序内存使用情况的最佳方法是什么?

c++ - 消除 std::vector<std::string> 的列表初始化歧义

c - 尝试解除分配二维数组时访问冲突读取

c++ - 内存映射文件 - 如何在其他进程中插入一条数据