Thread 中讨论的其他器件:Z-stack
工具/软件:Code Composer Studio
大家好、TI 团队
我基于 BIM 创建了项目、并将 CCFG 中的 SET_CCFG_IMAGE_VALLED_CONF_IMAGE_VALID 值设置为0x0、将跳转地址设置为0x8000。然后、应用程序基于 Ti154STACK_SENSOR_2_4G 创建、应用程序的起始地址设置为0x8000。但是、将代码下载到闪存后、BIM 可以跳转至应用程序、 但应用程序无法正常运行。如果应用程序项目是基于 OAD 项目创建的、并且起始地址设置为0x8000、 BIM 可以跳转到应用程序并正常运行。如果我在不更改起始地址和跳转地址的例程中使用项目、则应用程序和应用程序都可以正常运行。为什么?
这是 BIM .cmd 内容:
#define FLASH_base 0x00000000
#define GPRAM_base 0x11000000
#define RAM_base 0x20000000
#define ROM_base 0x10000000
#define FLASH_SIZE 0x00058000
#define RAM_SIZE 0x00014000
/*********
* RAM
*/
/*保留 RAM 是 ROM 代码使用的 RAM 的那一部分。
*对于安全 BIM、ROM 中的 ECC 库在
RAM 的开头使用0x80字节的* RAM 空间。 尽管
非安全 BIM 不使用 ROM 中的 ECC 库*、但为了使链接
器*命令文件在两个变体之间保持简单统一、
此处通常为两个变体定义*保留段。
* ROM 代码实际使用略小于0x300字节;保留
RAM 的此*部分不被 BIM 应用程序更改
*/
#define RESERVE_RAM_SIZE (0x300)
/*
为 BIM 变量定义
*/
#define RAM_START (RAM_base + RESERVE_RAM_SIZE)
#define RAM_END (RAM_START + RAM_SIZE - RESERVE_RAM_SIZE - 1)
当堆栈映像不存在时、/*应用程序被赋予完整的 RAM 范围(减去 ROM 保留的偏移量)。 */
#define RAM_BIM_SIZE (RAM_END - RAM_START + 1)
/*********
*闪存
*/
#define FLASH_START FLASH_base
#define PAGE_SIZE 0x2000
//*
Bim 控制第31页中的 CCFG 以及在此处链接其应用。
*任何剩余空间都可以由另一个映像声明。
//
#define FLASH_BIM_START 0x0 //FLASH_SIZE - PAGE_SIZE
#define FLASH_BIM_END CERT_START - 1 //FLASH_CCFG_START - 1
#define FLASH_BIM_SIZE ((FLASH_BIM_END)-(FLASH_BIM_START)+ 1)
#define FLASH_CCFG_START (CCFG_CC0008
)
+ CCFAG_START)+ 1 (#define CCFAG_FLASH_CCFG_START)+ CCFAG_SIZE (#define CCFAG_CCFAG_END)- 1 (CCFG_FAST_CC0001)
#define FLASH_FNPTR_START FLASH_CCFG_START - 8 //在 CCFG 和函数指针之间添加4个字节的缓冲区0x0001ffa0
#define FLASH_FNPTR_END FLASH_FNPTR_START + 3 // 4个字节函数指针0x0001ffa3
#define FLASH_FNPTR_SIZE 4 //(FLASH_FNPTR_FNPTR_START
)+ 3 //(FLASH_FNPTR_FNPTR_FNPTR_START)–固定区域1 +存储)+ FNPTR_FNPT
//区域长度为 CERT_ELECT_t
#define CERT_END FLASH_FNPTR_START -1
#define CERT_SIZE 0x4C //对于版本1 ECDSA-P256
#define CERT_START CERT_END - CERT_SIZE + 1/*********
* Stack
*/
/*创建指向栈顶的全局常量*/
/* CCS:在 Project Properties */
__stack_top =__stack +__stack_size;
/*********下更改栈大小
*主参数
*/
*允许 main()获取 args */
/*--args 0x8 */
/*********
系统内存映射
/
MEMORY
{/*
FLASH_BIM
(RX):origin = FLASH_BIM_START,length = FLASH_BIM_SIZE
FLASH_CCFG (RX):origin = FLASH_CCFG_START,length = FLASH_CCFG_SIZE
FLASH_FNPTR (RX):origin = FLASH_FNPT_START,length = FLASH_CERT_RAM_START (r):*+
+++ origin = RAM_START、length = RAM_BIM_SIZE
}
/*************
*内存部分分配
/
SECTIONS
{
.intvecs :> FLASH_BIM_START
.text :> FLASH_BIM
.const :> FLASH_BIM
.constdata :> FLASH_BIM
.rodata :> FLASH_BIM
.cinit :> FLASH_BIM
.pinit :> FLASH_BIM
.init_array :> FLASH_BIM
.EMB
:> FLASH_BIM .inct :> FLASH_BIT_CERT :> FLASH_BIT_FLASH .NOT.BIM .text :> FLASH
> FLASH_CCFG (高)
.vtable:> SRAM
.vtable_ram:> SRAM
VTABLE _ram:> SRAM
.data:> SRAM
.bss:> SRAM
.sysmem:> SRAM
.stack:> SRAM (高)
.nonretenvar:> SRAM
}
这是应用程序.cmd 内容:
#ifndef NVOCMP_NVPAGES
#define NVOCMP_NVPAGES 2
#endif
#define FLASH_base 0x00000000
#define FLASH_NV_BASE (0x56000 -(NVOCMP_NVPAGES * 0x2000)
#define FLASH_NV_SIZE (NVOCMP_NVPAGES * 0x2000)
#define FLASH_LAST_BASE 0x56000
#define FLASH_LAST_SIZE 0x2000
#define RAM_base 0x20000000
#define RAM_SIZE 0x14000
#define entry_start (0x8000)
#define entry_size 0x40
#define entry_end (entry_start + entry_size - 1)
#define FLASH_START (entry_end + 1)
#define FLASH_END (FLASH_NV_BASE)//(FLASH_base + FLASH_SIZE - RESERVE_FLASH_SIZE - 1)
//#define FLASH_START_BASE 0x8000
//#define FLASH_SIZE (0x56000 -(NVOCMP_NVPAGES * 0x2000)- FLASH_START_BASE)
/*系统存储器映射*/
存储器
{
Entry (RX):origin = entry_start、length = entry_size
/*存储在内部闪存中并从内部闪存执行的应用程序*/
闪存(RX):origin = flash_start,length =(flash_end - flash_start)//flash_size
/* FLASH NV */
FLASH_NV (Rwx):origin = FLASH_NV_BASE,length = FLASH_NV_SIZE
/*最后一个闪存页*/
FLASH_LAST (RX):origin = FLASH_LAST_BASE,length = FLASH_LAST_SIZE
/*应用程序使用内部 RAM 进行数据*/
SRAM (rwx):origin = RAM_base,length = RAM_SIZE
}
//内存
中的段分配*/ SECTIONS
{
//.intvecs :> FLASH_START_base
Group > entry
{
.Vecresets load_start (prgEntryAddr)
.intvecs
EntrySection //load_start (prgEntryAddr)}
//
FLASH_LAST_TEXT
{
mac_user_config.obj (.text)
nvoctp.obj (.text)
macTask.obj (.text)
HMAC_ROM_init.obj (.const)
OSAL_port.obj (.text)
} > FLASH_LAST
*/
.text :>> FLASH_LAST | FLASH
CONFIG_CONST{mac_user_config.obj (.const)}> FLASH
.const :>闪存
.constdata :>闪存
rodata :>闪存
.cinit :>闪存
.pinit :>闪存
init_array :>闪存
.EMB_TEXT :> FLASH
//.ccfg :> flash_last (HIGH)
.ccfg :type=NoLoad > FLASH_LAST (高电平)
Group (组)> SRAM
{
.data
.bss
.vtable
.vtable_ram
VTABLE RAM
sysmem
.nonretenvar
} LOAD_END (heapStart)
堆栈 :> SRAM (高电平) load_start (heapEnd)
}
谢谢!