工具/软件:Code Composer Studio
您好!
下面是该问题的说明-它与 loadprogram()的使用(带有参数)及其周围的配置有关。
CCS:版本10.0.00010
平台:TDA2Px - Vision SDK3.0 (RTOS)
dss 脚本编写(js)
在 QSPI Flasher (exe)中将 javascript 与 debugSession.memory.loadProgram()与参数一起使用以调用 main()
修改
对 JavaScript 的修改:
-将调用从 loadporgram(exe)更改为 loadprogram (exe, arguments)
"根据 DSS 脚本文档,要使用 loadprogram(exe, arguments)--args,需要在链接期间使用"
对 C 程序的修改:
-已将"LNKFLAGS_LOCAL_COMMON =--args=100"添加到 Makefile 中
-已将.args 段添加到 lnk.cmd
附加了两个文件(Makefile & lnk.cmd)
错误:严重:Cortex_M4_IPU1_C0:文件加载程序:验证失败:地址0x83512060上的值不匹配请验证目标存储器和存储器映射。
我们知道、如何分配 args 段可能存在问题。
以下是可能的解决方案。 请澄清适用于我们的情况的案例-
1.实现此目标的两种方法是使用'--args'(非 BIOS 应用程序)构建您的应用程序,或通过 BIOS 配置工具(BIOS 应用程序)设置'.args'部分。 然后、您可以使用 GEL 将值写入目标存储器中已分配给 argc、argv 值的段。
在论坛中使用 BIOS 配置工具的演示链接不再起作用。 此解决方案是否适用于我们?
另外一种方法是、由于 DSS loadProgram API 有一个限制、它只支持将参数传递给非基于 BIOS 的应用程序的 main。 对于基于 BIOS 的应用、需要使用上面链接中描述的手动方法(您可以使用 DSS 存储器写入 API 来手动执行此操作)。
(1)使用 XGCONF 编辑器打开 BIOS 配置文件(.cfg)(在 CCS 中右键单击 CONFIG 文件并选择"Open with ->XGCONF")。
(2)在 XGCONF 编辑器中、单击 BIOS 配置文件顶部的"System Overview"(系统概述)
(3)在系统概览中、单击内存管理下的"Memory"(内存)
(4)在内存模块设置中、单击程序模块链接
(5)在运行时大小中、为参数大小设置一个值
如果适用...对于如何手动使用 DSS 存储器 API (如 writewe()、writedata())或如何使用 XGCONF,是否有示例?
我正在尝试这些选项。 非常感谢您的任何意见。
谢谢、
Pramod
目录:\processorsdk\ti_componels\drivers\pdk_01_09_00_17\packages/ti\boot\sbl_auto_qspiflash\examples\qspi_flash_writer
_________________
生成文件:
_________________
编号
#此文件是用于构建 QSPI 闪存写入器的 makefile 文件。
编号
包括$(pdk_install_path)/ti/build/Rules.make
app_name = QSPI_FLASH_writer
SRCDIR =。
INCDIR =。
#在 SBL 下创建可执行文件、因为它用于刷写 SBL 映像、那么
将其与 SBL 映像放在一起是逻辑的
$(app_name)_BINPATH =$(dest_root)/SBL/$(app_name)
导出$(app_name)_BINPATH
#列出所有外部组件/接口,其接口头文件
此组件需要包含#
include_external_interfaces = PDK
#列出应用程序所需的所有组件
COMP_LIST_COMMON = CSL STW_PLANT平台 qspiflash_lib pm_hal
#跨所有平台和内核的通用源文件和 CFLAGS
SRCS_common = main.c
PACKAGE_SRCS_COMMON =。
CFLAGS_LOCAL_COMMON =$(PDK_CFLAGS)$(SBL_CFLAGS)
LNKFLAGS_LOCAL_COMMON =--args=100
ifeq ($(CORE)、ipu1_0)
LNKCMD_FILE = lnk.cmd
字节序
# Core/SoC/平台特定源文件和 CFLAGS
#示例:
# SRCS_ =
# CFLAGS_LOCAL =
#包含通用 make 文件
ifeq ($(MAKERULEDIR)、)
未定义#Makerule 路径,定义此路径并假定从 rootdir 获取相对路径
MAKERULEDIR:=$(rootdir)/ti/build/makerules
导出 MAKERULEDIR
字节序
包括$(MAKERULEDIR)/common.mk
# OBJs 和库是使用 rules_中定义的规则构建的 mk
此处不需要明确指定
#没有什么超过这个点的
_________________
lnk.cmd:
_________________
-stack 0x4000 //软件栈大小*/
堆0x4000 /*堆区域大小*/
/*指定系统内存映射*/
存储器
{
IRAM_MEM:org = 0x40300000 len = 0x1C000 // RAM 0x1FBFF*/
MMU_TLB:origin = 0x4031C000 length = 0x000004000
DDR3_A8:org = 0x8050000 len = 0xA000000 // 176 MB */
DDR3_DSP:org = 0x8B000000 len = 0x02000000 // 32 MB */
DDR3_M3VPSS:org = 0x8D000000 len = 0x01000000 // 16 MB */
DDR3_M3VIDEO:org = 0x8E000000 len = 0x01000000 // 16 MB */
DDR3_SR0:org = 0x8F000000 len = 0x01000000 // 16 MB */
GPMC_NOR:org = 0x08000000 len = 0x1000 // 4 MB */
}
/*指定段分配到内存中*/
部分
{
init:load > DDR3_A8
.text:load > DDR3_A8 /* code */
.data:load > DDR3_A8 /*已初始化全局和静态变量。 *
.bss:load > DDR3_A8 /*未初始化或零初始化*/
/*全局和静态变量。 *
RUN_START (BSS_START)
RUN_END (BSS_END)
.const:load > DDR3_A8 /*全局常量*/
.cinit:加载> DDR3_A8
stack:load > DDR3_A8 /*软件系统堆栈*/
GPMC_MEM:LOAD > GPMC_NOR
sysmem:load > ddr3_A8
.plt:LOAD > DDR3_A8
.args:load > DDR3_A8
}