主题中讨论的其他器件:C2000WARE
你(们)好
我使用的是 LaunchPad f28379D
我遇到了 EABI 输出格式的大数组大小问题(项目>属性>CCS General >输出格式>eabi (elf))、
传统 COFF 输出格式(project >属性>CCS General >输出格式>传统 COFF)不存在此问题、
我成功地将问题隔离在下面、因此简短描述如下
我正在使用库 C:\ti\C2000Ware_2_00_00_02\driverlib\f2837xd\examples\cpu1\led (led_ex1_blinky)中的 blinky 示例(我添加了多个大尺寸数组)。
当我构建项目并通过调试器将其加载到 Launchpad (闪存模式)、然后使用"恢复"按钮启动项目时、所有项目均按预期工作-即 LED 闪烁
当我按下"终止"按钮来停止调试会话、然后插入/插入 USB (断电/打开、不连接到调试器)时、LED 停止闪烁、即程序挂起。
仅在 EABI 编译时观察到此行为、COFF 编译时的相同操作会导致程序正常运行、即在断电/打开周期后 LED 闪烁
此外、如果我将我的所有数组放在类型为 NOINIT 的部分中、即使在 EABI 下、复位后、所有的内容都可以正常工作。
我想变量的初始化有一些问题。
我应该怎么做才能解决这个问题、还可以解释一下这个问题吗? 如何在不进行 NOINIT 声明的情况下使 MCU 正常运行。
我需要 EABI 输出格式、因为我的开发需要*。elf
这是我的数组声明(main()的一部分)(带有 pragma,因为我已经阅读了您对简单问题的回答)
和*。cmd 文件(与您的 blinky 文件相同、但具有用户段部分)
主程序
#pragma DATA_SECTION (ap_TST_huge1、"ap_TST_huge1_SECTION ")
uint16_t ap_tst_huge1[1000]={0};
#pragma DATA_SECTION (ap_TST_huge2、"ap_TST_huge2_SECTION ")
uint16_t ap_tst_huge2[1000]={0};
#pragma DATA_SECTION (ap_TST_huge3、"ap_TST_huge3_SECTION ")
uint16_t ap_TST_huge3[4000]={0};
#pragma DATA_SECTION (ap_TST_huge4、"ap_TST_huge4_SECTION ")
uint16_t ap_TST_huge4[4000]={0};
#pragma DATA_SECTION (ap_TST_huge5、"ap_TST_huge5_section")
uint16_t ap_TST_huge5[4000]={0};
#pragma DATA_SECTION (ap_TST_huge6、"ap_TST_huge6_SECTION ")
uint16_t ap_TST_huge6[4000]={0};
void main (void)
{
//
//初始化设备时钟和外设
. 与库项目中的相同
//
for (;;)
{
AP_TST_huge1[0]++;
AP_TST_huge2[0]++;
AP_TST_huge3[0]++;
AP_TST_huge4[0]++;
AP_TST_huge5[0]++;
AP_TST_huge6[0]++;
//
//打开 LED
//
GPIO_writePin (DEVICE_GPIO_PIN_LED1、0);
//
//延迟一位。
//
DEVICE_DELAY_US (50000);
等..........................................................................
}
2837xD_FLASH_lnk_CPU1.cmd CMD 文件
存储器
{
第0页:/* 程序内存*/
/*内存(RAM/FLASH)块可移动到 Page1进行数据分配*/
/* begin 用于"引导至闪存"引导加载程序模式 */
开始 :origin = 0x080000、length = 0x000002
RAMM0 :origin = 0x000122、length = 0x0002DE
RAMD0 :origin = 0x00B000、length = 0x000800
RAMLS0 :origin = 0x008000、length = 0x000800
RAMLS1 :origin = 0x008800,length = 0x000800
RAMLS2 :origin = 0x009000,length = 0x000800
RAMLS3 :origin = 0x009800,length = 0x000800
RAMLS4 :origin = 0x00A000,length = 0x000800
RAMGS14 :origin = 0x01A000、length = 0x001000 //*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 *
RAMGS15 :origin = 0x01B000、length = 0x001000 //*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 *
复位 :origin = 0x3FFFC0,length = 0x000002
/*闪存扇区*/
FLASHA :origin = 0x080002、length = 0x001FFE //片上闪存*/
FLASHB :origin = 0x082000、length = 0x002000 //片上闪存*/
FLASHC :origin = 0x084000、length = 0x002000 //片上闪存*/
FLASHD :origin = 0x086000、length = 0x002000 //片上闪存*/
FLASHE :origin = 0x088000、length = 0x008000 //片上闪存*/
FLASHF :origin = 0x090000、length = 0x008000 //片上闪存*/
FLASHG :origin = 0x098000、length = 0x008000 //片上闪存*/
FLASHH :origin = 0x0A0000、length = 0x008000 //片上闪存*/
FLASHI :origin = 0x0A8000,length = 0x008000 //片上闪存*/
FLASHJ :origin = 0x0B0000、length = 0x008000 //片上闪存*/
FLASHK :origin = 0x0B8000,length = 0x002000 //片上闪存*/
FLASHL :origin = 0x0BA000、length = 0x002000 //片上闪存*/
FLASHM :origin = 0x0BC000、length = 0x002000 //片上闪存*/
FLASHN :origin = 0x0BE000、length = 0x002000 //片上闪存*/
第1页:/*数据存储器*/
/*内存(RAM/FLASH)块可移动到 PAGE0进行程序分配*/
BOOT_RSVD :origin = 0x000002,length = 0x000120 // M0的一部分,引导 ROM 将此用于栈*/
RAMM1 :origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *
RAMD1 :origin = 0x00B800,length = 0x000800
RAMLS5 :origin = 0x00A800,length = 0x000800
RAMGS0 :origin = 0x00C000、length = 0x001000
RAMGS1 :origin = 0x00D000、length = 0x001000
RAMGS2 :origin = 0x00E000、length = 0x001000
RAMGS3 :origin = 0x00F000、length = 0x001000
RAMGS4 :origin = 0x010000,length = 0x001000
RAMGS5 :origin = 0x011000,length = 0x001000
RAMGS6 :origin = 0x012000,length = 0x001000
RAMGS7 :origin = 0x013000,length = 0x001000
RAMGS8 :origin = 0x014000,length = 0x001000
RAMGS9 :origin = 0x015000,length = 0x001000
RAMGS10 :origin = 0x016000,length = 0x001000
RAMGS11 :origin = 0x017000,length = 0x001000
RAMGS12 :origin = 0x018000,length = 0x001000 //*仅在 F28379D、F28377D、F28375D 设备上可用。 移除其他设备上的线路。 *
RAMGS13 :origin = 0x019000,length = 0x001000 //*仅在 F28379D、F28377D、F28375D 设备上可用。 移除其他设备上的线路。 *
CPU2TOCPU1RAM :origin = 0x03F800,length = 0x000400
CPU1TOCPU2RAM :origin = 0x03FC00,length = 0x000400
}
部分
{
/*分配计划领域:*/
.cinit :> FLASHB PAGE = 0,ALIGN (4)
.text :>> FLASHB | FLASHC | FLASHD | FLASHE PAGE = 0,ALIGN (4)
codestart :>开始 页= 0、align (4)
/*分配未初始化的数据段:*/
堆栈 :> RAMM1 PAGE = 1.
切换 :> FLASHB PAGE = 0,ALIGN (4)
复位 :>重置, 页= 0,类型= DSECT /*未使用,*/
#if defined (_TI_EABI)
init_array :> FLASHB、 PAGE = 0、 ALIGN (4)
.bss :> RAMLS5, page = 1.
.bss:输出 :> RAMLS3, PAGE = 0
.bss:CIO :> RAMLS5, page = 1.
.data :> RAMLS5, page = 1.
sysmem :> RAMLS5, page = 1.
/*初始化段进入闪存*/
.const :> FLASHF, PAGE = 0, ALIGN (4)
其他
.pinit :> FLASHB、 PAGE = 0、 ALIGN (4)
ebss :>> RAMLS5 | RAMGS0 | RAMGS1, PAGE = 1
等斯梅姆 :> RAMLS5, page = 1.
.cio :> RAMLS5, page = 1.
/*初始化段进入闪存*/
.econst :>> FLASHF | FLASHG | FLASHH PAGE = 0,ALIGN (4)
#endif
//用户部分--在上电后不工作
AP_TST_huge1_SECTION >> RAMGS4 | RAMGS5 | RAMGS6 | RAMGS7 | RAMGS8、PAGE = 1
AP_TST_huge2_section >> RAMGS4 | RAMGS5 | RAMGS6 | RAMGS7 | RAMGS8、PAGE = 1
AP_TST_huge3_section >> RAMGS4 | RAMGS5 | RAMGS6 | RAMGS7 | RAMGS8、PAGE = 1
AP_TST_huge4_section >> RAMGS4 | RAMGS5 | RAMGS6 | RAMGS7 | RAMGS8、PAGE = 1
AP_TST_huge5_section >> RAMGS4 | RAMGS5 | RAMGS6 | RAMGS7 | RAMGS8、PAGE = 1
AP_TST_huge6_section >> RAMGS4 | RAMGS5 | RAMGS6 | RAMGS7 | RAMGS8、PAGE = 1
//用户段末尾
//用户部分 -- 在断电后工作
//ap_TST_huge1_section >> RAMGS4 | RAMGS5 | RAMGS6 | RAMGS7 | RAMGS8、type=NOINIT、PAGE = 1
//ap_TST_huge2_section >> RAMGS4 | RAMGS5 | RAMGS6 | RAMGS7 | RAMGS8、type=NOINIT、PAGE = 1
//ap_TST_huge3_section >> RAMGS4 | RAMGS5 | RAMGS6 | RAMGS7 | RAMGS8、type=NOINIT、PAGE = 1
//ap_TST_huge4_section >> RAMGS4 | RAMGS5 | RAMGS6 | RAMGS7 | RAMGS8、type=NOINIT、PAGE = 1
//ap_TST_huge5_section >> RAMGS4 | RAMGS5 | RAMGS6 | RAMGS7 | RAMGS8、type=NOINIT、PAGE = 1
//ap_TST_huge6_section >> RAMGS4 | RAMGS5 | RAMGS6 | RAMGS7 | RAMGS8、type=NOINIT、PAGE = 1
//用户段末尾
filter_RegsFile :> RAMGS0, PAGE = 1
SHARERAMGS0:> RAMGS0,PAGE = 1
SHARERAMGS1:>RAMGS1,PAGE = 1.
ramgs0 :> RAMGS0, PAGE = 1
频率1 :> RAMGS1, PAGE = 1
#ifdef __TI_Compiler_version__
#if __TI_Compiler_version__>=15009000
#if defined (_TI_EABI)
.TI.ramfunc:{}负载= FLASHD,
运行= RAMLS0、
Load_start (RamfuncsLoadStart)、
load_size (RamfuncsLoadSize)、
Load_End (RamfuncsLoadEnd)、
RUN_START (RamfuncsRunStart)、
run_size (RamfuncsRunSize)、
RUN_END (RamfuncsRunEnd)、
PAGE = 0、ALIGN (4)
其他
.TI.ramfunc:{}负载= FLASHD,
运行= RAMLS0、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
PAGE = 0、ALIGN (4)
#endif
其他
ramfuncs :LOAD = FLASHD,
运行= RAMLS0、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
PAGE = 0、ALIGN (4)
#endif
#endif
/*使用 IPC API 驱动程序时需要以下部分定义*/
组:> CPU1TOCPU2RAM,PAGE = 1
{
PUTBUFFER
PUTWRITEIDX
GETREADIDX
}
组:> CPU2TOCPU1RAM,PAGE = 1
{
GETBUFFER: TYPE = DSECT
GETWRITEIDX: TYPE = DSECT
PUTREADIDX: TYPE = DSECT
}
/*以下部分定义适用于 SDFM 示例*/
filter1_RegsFile:> RAMGS1,PAGE = 1,fill=0x1111
Filter2_RegsFile:> RAMGS2,PAGE = 1,fill=0x2222
Filter3_RegsFile:> RAMGS3,PAGE = 1,fill=0x3333
Filter4_RegsFile:> RAMGS4,PAGE = 1,fill=0x4444
Differit_RegsFile:>RAMGS5,PAGE = 1,fill=0x3333
}
/*
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//文件结束。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
*