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.

[参考译文] TM4C123GH6PM:TM4C123GH6PM 中的#Pragma DATA_SECTION

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/999701/tm4c123gh6pm-pragma-data_section-in-tm4c123gh6pm

器件型号:TM4C123GH6PM

大家好、

我使用的是 TM4C123GH6PM 控制器。 我想将查找表存储在闪存中。 为此、我使用了#pragma DATA_SECTION、但 在调试期间、它会如下面所述向我发出警告、并且我无法 调用我存储的值。

按照我所遵循的顺序、如果我错过了任何内容或做了任何错误、请向我提供指导。

1)位于 tm4c123ghp6.cmd 文件中

存储器

  CHANNEL0  :origin = 0x20009000,length = 0x0006000

部分

 通道0  :{}> CHANNEL0

2)在 main.c 中

#pragma DATA_SECTION (pwmlkp、".channel0")

const unsigned int pwmlkp[18]={86,93,103,115,125,136,145,159,181,192,206,216,226,235,256,265};

3) 3)调试期间的警告

Cortex_M4_0:GEL 输出:
内存映射初始化完成
Cortex_M4_0:加载程序:程序的一个或多个部分落入不可写的存储器区域。 这些区域实际上不会写入目标。 检查链接器配置和/或存储器映射。

4)表达式窗口

[0]未知内存映射阻止读取0x20009000

[1]未知内存映射阻止读取0x20009004  

[17]未知内存映射阻止读取0x20009044

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="456289" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/999701/tm4c123gh6pm-pragma-data_section-in-tm4c123gh6pm "] CHANNEL0  :origin = 0x20009000,length = 0x0006000

     TM4C123GH6PM 具有来自地址 0x20000000的32KB SRAM。 0x20007FFF、 和 CHANNEL0存储器区域 位于数据表所示的保留地址空间中:

     CHANNEL0存储器区域位于保留地址空间内、这会导致警告。 此外、尝试在保留空间中读取或写入地址会导致总线故障、这将导致程序在尝试读取 pwmlkp[]时失败。

    [引用 userid="456289" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/999701/tm4c123gh6pm-pragma-data_section-in-tm4c123gh6pm 我要将查找表存储在闪存中。 [/报价]

     在这种情况下、CHANNEL0存储器区域应从片上闪存的存储器范围中分配。

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

    >CHANNEL0    :origin = 0x20009000,length = 0x0006000

    根据数据表(SPMS376E)表2-4、这是保留的、即不是任何类型的存储器。 您是否意味着:

    >CHANNEL0    :origin = 0x00009000,length = 0x0006000

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

    您好、先生、

    明白了、由于超出范围、我将收到警告。

    现在、我已更改了存储器范围

    CHANNEL0  :origin = 0x00001000,length = 0x0006000。

    现在、我可以在没有警告的情况下进行编译。

    但是、我仍然无法存储数据。

    我已检查内存浏览器、其值为 FFFFFFFF。

    阵列存储一次。 那么、如何调用/获取该数组呢?

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

    您好、Divyesh、

    您能否将完整的.cmd 文件作为附件发布在此处、以便我可以查看内容?

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

    您好、先生、

    当然、请在下面找到.cmd 文件的详细信息

    /*********
    *
    *德州仪器 TM4C123GH6PM 的默认链接器命令文件
    *
    *这是从 TivaWare 库的修订版15071衍生而来的。
    *
    (小部分 /

    --retain=g_pfnVectors

    存储器

    CHANNEL0:origin = 0x00001000,length = 0x0006000
    闪存(RX):origin = 0x00012000,length = 0x00040000
    SRAM (rwx):origin = 0x20000000,length = 0x00008000

    /*以下命令行选项作为 CCS 项目的一部分进行设置。 *
    /*如果您使用命令行构建,或者出于某种原因想要*/
    /*在此处定义它们,您可以根据需要取消注释并修改这些行。 *
    /*如果您使用 CCS 进行构建、最好进行任何这样的构建*/
    /*对 CCS 项目进行修改并将此文件保留为单独文件。 *
    /**//
    /*--heap_size=0 */
    /*--stack_size=256 */
    /*--library=rtsv7M4_T_le_eabi.lib */

    /*内存中的段分配*/

    部分

    .intvecs:> 0x00012000
    .text:> FLASH
    .const:> FLASH
    .cinit:>闪存
    .pinit:> FLASH
    init_array:> FLASH

    通道0:{}> CHANNEL0

    .vtable:>0x20000000
    .data :> SRAM
    .bss:> SRAM
    .sysmem:> SRAM
    .stack:> SRAM

    __STACK_TOP =__STACK + 512;

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

    您好、Divyesh、

    您需要指出此部分存储器在定义中应具有哪些权限:

    Fullscreen
    1
    CHANNEL0 : origin = 0x00001000, length = 0x0006000
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    了解如何针对闪存完成此操作:

    Fullscreen
    1
    FLASH (RX) : origin = 0x00012000, length = 0x00040000
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    R 表示读取、X 表示执行、W 表示写入。