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 控制器。 我想将查找表存储在闪存中。 为此、我使用了#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
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、
您需要指出此部分存储器在定义中应具有哪些权限:
CHANNEL0 : origin = 0x00001000, length = 0x0006000
了解如何针对闪存完成此操作:
FLASH (RX) : origin = 0x00012000, length = 0x00040000
R 表示读取、X 表示执行、W 表示写入。