产品概述

  • 如何把变量或函数放到指定位置

    如何实现变量的绝对定位


    CDK编译环境使用了GNU C Complier,简称GCC。GCC使用ld脚本对代码对象进行链接,将多个输入文件整合成一个输出文件。

    在一些特殊的场合,我们需要对代码中的一些内容实现精确的定位。

    这里我们分两个方面来介绍,分别是变量的绝对定位和函数(代码段)的绝对定位。

  • 变量的绝对定位

    假设要实现将wData[] 放到程序存储区 0x9000的位置。需要做以下两个操作

    1. 首先在代码文件中,将变量归入某个section,这个例子里是FlashData段。

    __attribute__((section(".FlashData"))) const uint32_t wData[] = {0x1, 0x2}; //在这种绝对定位的情况下,关键字 const 不是必须的。

    < /FONT >

    < P >   2.  其次,要对ld文件进行修改。

    增加以下内容,将FlashData段起始地址定位在0x9000。

    .FlashData 0x9000:
    {
    . = ALIGN(0x4) ;
    *(.FlashData)
    *(.FlashData.*)
    } > ROM

    再重新编译,就可以在map文件上看到:

  • 函数加载到RAM区

    有时候,会希望有一些代码可以快速取址并运行。其中一个实现的方法是把函数定位到RAM区。

    假设要实现将function() 放到RAM。需要做以下两个操作:

    1. 首先在代码文件中,将函数归入某个section,这个例子里是codeinram段。

    __attribute__((section(".codeinram"))) void function1(void);

    2.  其次,要对ld文件进行修改。

  • 库程序编译报错

    1、如果拿到的库程序第一次编译报错,错误提示如下:



    这是因为库发布时带了一些编译选项,点击CDK“清除”快捷按钮清除一下工程,再重新编译即可。