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.

[参考译文] LP-AM263P:无入口点的 CCS 项目。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1403658/lp-am263p-ccs-project-without-entry-point

器件型号:LP-AM263P

工具与软件:

你好。

我需要在 CCS 中创建工程、其中包含一些函数/数据、应该通过固定地址从其他工程中调用。 在其他 MCU/IDE 中、我曾使用链接器脚本将这些函数/数据放置到定义的内存区域和编译的工程中、而没有用于创建 elf/hex 文件的启动文件选项、该文件稍后可以刷写到 ROM 中。

在尝试使用 CCS 执行相同任务时、我已经使用 TI Clang v3.2.2编译器创建了空的 CCS 工程(不使用 SDK、因为我不需要初始化 MCU 并使用该工程中的任何外设)、并遇到了以下问题:

1.我无法从构建中排除标准开始文件和入口点。   为此、我在 GCC 链接器中使用选项"-nostartfiles"选项、但对 TI Clang 没有任何类似之处。

2.如何排序连接器/编译器以避免在优化期间从输出中排除某些函数/数据? 这是必需的、因为我 不想在此工程中使用入口点、编译器会"优化"所有内容、因此我需要手动定义"入口点"(工程中不能有入口点、只有数据才应放置在特定地址)。 我在 GCC 链接器脚本中使用了保留字、但   CCS/TI Clang 的链接器命令文件无法识别此字。

3、编译后、我看不到任何*。appimage 文件要加载到闪存中、只有*。out 和*。hex (我已启用它)、但没有关于如何在 Launchpad 开发板上将这些文件类型加载到闪存中的说明。

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

    你好、Ivan

    请查找不包括入口点函数的详细信息: https://software-dl.ti.com/codegen/docs/tiarmclang/rel3_0_0_STS/compiler_manual/program_loading_and_running/run-time-initialization-slau1316977.html?highlight=startup#ram-model-vs-rom-model

    2. 在优化期间如何排序连接器/编译器以不从输出中排除某些函数/数据? 这是必需的、因为我 不想在此工程中使用入口点、编译器会"优化"所有内容、因此我需要手动定义"入口点"(工程中不能有入口点、只有数据才应放置在特定地址)。 我在 GCC 链接器脚本中使用了保留字、但   CCS/TI Clang 的链接器命令文件无法识别该字。[/QUOT]

    我将在下周早些时候介绍有关这方面的更多详细信息。

    3. 编译后、我没有看到任何*。appimage 文件要加载到闪存中、只有*。out 和*。hex (我已启用它)、但没有关于如何在 Launchpad 开发板上将这些文件类型加载到闪存中的说明。[/QUOT]

    请观看此视频、了解应用程序映像创建过程: AM263Px MCU+ SDK:引导工具

    [/quote]
    [/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="500225" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1403658/lp-am263p-ccs-project-without-entry-point/5374709 #5374709"]
    . 我无法从编译中排除标准开始文件和入口点。   为此、我在 GCC 链接器中使用选项"-nostartfiles"选项、但对 TI Clang 没有任何类似之处。

    请查找不包括入口点函数的详细信息: https://software-dl.ti.com/codegen/docs/tiarmclang/rel3_0_0_STS/compiler_manual/program_loading_and_running/run-time-initialization-slau1316977.html?highlight=startup#ram-model-vs-rom-model

    [报价]

    很抱歉、我在提供的文档中找不到问题的答案。 RAM 和 ROM 模型都提供了一些用于初始化应用程序的例程(在运行时或加载时)、在本例中应避免这种情况。 我只需要在没有"主要"函数的情况下编译应用程序、 并使用不同的运行和加载地址的引导例程、然后将其加载到闪存中。 所有数据初始化和对 RAM 的应对都将由自己的自定义应用程序完成。

    我发现链接器设置中的设置选项'--relocated'和 RAM 或 ROM 模型都不允许我删除'main'函数,但在这种情况下,编译器包含所有函数(其中一些可以优化掉  ),我在.map 文件中的符号地址都从0x0000xxxx 开始,尽管段运行和加载地址是正确的(符号地址匹配段地址,如果编译没有'--relocated'选项)。
    在生成的 .hex 文件中、所有数据/文本都放置在 运行地址而不是加载地址中、我认为这是错误的、因为此文件实际上应该加载到 SoC 中。


    从.map 文件:

    SECTION ALLOCATION MAP
    
     output                                  attributes/
    section   page    origin      length       input sections
    --------  ----  ----------  ----------   ----------------
    .text      0    60100070    00000074     RUN ADDR = 70040070
                      60100070    00000014     platform_library.o (.text.convert_float_to_long)
                      60100084    0000000c     --HOLE-- [fill = 0]
                      60100090    00000014     platform_library.o (.text.convert_float_to_ulong)
                      601000a4    0000000c     --HOLE-- [fill = 0]
                      601000b0    00000014     platform_library.o (.text.convert_long_to_float)
                      601000c4    0000000c     --HOLE-- [fill = 0]
                      601000d0    00000014     platform_library.o (.text.convert_ulong_to_float)
    
    .config_table 
    *          0    60100000    00000070     RUN ADDR = 70040000
                      60100000    00000070     config_table.o (.config_table)
    
    
    GLOBAL SYMBOLS: SORTED BY Symbol Address 
    
    address   name                    
    -------   ----                    
    00000000  applicationConfigTable  
    00000000  convert_float_to_long   
    00000020  convert_float_to_ulong  
    00000040  convert_long_to_float   
    00000060  convert_ulong_to_float  
    

    从.cmd 文件:

    SECTIONS
    {
        .text : run = OCRAM, load = FLASH, align = 8
        .data : run = OCRAM, load = FLASH, align = 8
        .rodata : run = OCRAM, load = FLASH, align = 8
        .bss :  > OCRAM, align = 8
        .config_table : run = OCRAM, load = FLASH, align = 8
    }
    
    MEMORY
    {
        SBL   : ORIGIN = 0x70000000 , LENGTH = 0x40000 
        OCRAM   : ORIGIN = 0x70040000 , LENGTH = 0x40000 
        FLASH   : ORIGIN = 0x60100000 , LENGTH = 0x80000 
    }
    

    从.hex 文件:

    $A70040000,
    00 00 00 00 00 00 00 02 38 D1 B7 17 00 00 00 06 00 00 02 00 00 00 00 0A 
    00 00 02 10 00 00 10 00 00 01 00 04 3B 03 12 6F 00 00 00 32 00 00 00 00 
    00 00 00 50 00 00 00 32 00 01 70 00 00 00 00 02 3A 83 12 6F 00 00 00 06 
    00 00 01 00 00 00 00 09 00 00 01 10 FF FF FF FF 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    EE 30 0A 41 EE 80 0A 20 EE BD 0A C0 EE 10 0A 10 E1 2F FF 1E 00 00 00 00 
    00 00 00 00 00 00 00 00 EE 30 0A 41 EE 80 0A 20 EE BC 0A C0 EE 10 0A 10 
    E1 2F FF 1E 00 00 00 00 00 00 00 00 00 00 00 00 EE 01 0A 10 EE B8 1A C1 
    EE 21 0A 00 EE 30 0A 20 E1 2F FF 1E 00 00 00 00 00 00 00 00 00 00 00 00 
    EE 01 0A 10 EE B8 1A 41 EE 21 0A 00 EE 30 0A 20 E1 2F FF 1E 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="500225" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1403658/lp-am263p-ccs-project-without-entry-point/5374709 #5374709"]
    3、编译后、我看不到任何*。appimage 文件要加载到闪存中、只有*。out 和*。hex (我已启用它)、但没有关于如何在 Launchpad 开发板上将这些文件类型加载到闪存中的说明。

    请观看此视频、了解应用程序映像创建过程: AM263Px MCU+ SDK:引导工具

    [报价]

    本文档描述了多核映像或 RPRC 文件创建过程、但这不是我的目标。 对不起误解。

    我需要将一些经过编译的*。out (或*。hex)文件(包含一些数据和/或代码)加载到 Launchpad 开发板上的闪存中。 此代码/数据不应由 SBL 运行、而是由通过 SDK 创建的"标准"应用程序读取/复制(并按地址运行、但不在本主题范围内)、该应用程序已生成*。appimage 和*。rprc 文件。

    简而言之:如何将*。out 或*。hex 文件(采用 Intel 或其他格式)加载到 LM-AM263P 上的闪存中?

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

    伊凡、您好!

    请允许我在某个时候获取此信息、因为这不是 SDK 产品中提供的内容、所以我会尽量多问一些问题、但其中一些问题对我来说非常陌生。 我会尽量在8月30日之前回来 同时、您能告诉我这里的用例是什么吗?

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

    有关第三个问题、请查看 makefile_ccs_bootimage_gen  文件。 它负责生成引导映像的过程、该映像将由 ROM>加载

    文件路径:mcu_plus_sdk\examples\drivers\boot\sbl_ospi\am243x-evm\r5fss0-0_nortos\ti-arm-clang\ Makefile_ccs_bootimage_gen

    我将尝试获取有关 Q1和 Q2的更多信息

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

    当然、这不是关于 SDK 的问题、而是关于编译器/链接器和 ROM 闪存工具的问题。

    用例:用于飞行控制计算机的简单中间件软件。 它应运行由双方作为单独项目开发的应用程序、这些应用程序应作为单独的二进制文件编译并加载到 ROM 中。 当然、这些工程不应具有任何 MCU 初始化和标准启动代码、应用程序的入口点是定制的、因此不使用"主"函数。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="500225" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1403658/lp-am263p-ccs-project-without-entry-point/5378348 #5378348"]

    有关第三个问题、请查看 makefile_ccs_bootimage_gen  文件。 它负责生成引导映像的过程、该映像将由 ROM>加载

    文件路径:mcu_plus_sdk\examples\drivers\boot\sbl_ospi\am243x-evm\r5fss0-0_nortos\ti-arm-clang\ Makefile_ccs_bootimage_gen

    [报价]

    谢谢、非常有帮助。

    我已经创建了映像、并使用偏移0xA0000将其加载到闪存中。 但现在我看到、加载的映像包含经过编译的数据/代码、还包含大量信息、对我来说是无用的、而且很难找到实际的数据/代码起始地址。

    如何避免添加额外信息?

    以下是已编译的.hex 文件:

    $A70060000,
    00 00 00 00 00 00 00 02 38 D1 B7 17 00 00 00 06 00 00 02 00 00 00 00 0A 
    00 00 02 10 00 00 10 00 00 01 00 04 3B 03 12 6F 00 00 00 32 00 00 00 00 
    00 00 00 50 00 00 00 32 00 01 70 00 00 00 00 02 3A 83 12 6F 00 00 00 06 
    00 00 01 00 00 00 00 09 00 00 01 10 FF FF FF FF 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    EE 30 0A 41 EE 80 0A 20 EE BD 0A C0 EE 10 0A 10 E1 2F FF 1E 00 00 00 00 
    00 00 00 00 00 00 00 00 EE 30 0A 41 EE 80 0A 20 EE BC 0A C0 EE 10 0A 10 
    E1 2F FF 1E 00 00 00 00 00 00 00 00 00 00 00 00 EE 01 0A 10 EE B8 1A C1 
    EE 21 0A 00 EE 30 0A 20 E1 2F FF 1E 00 00 00 00 00 00 00 00 00 00 00 00 
    EE 01 0A 10 EE B8 1A 41 EE 21 0A 00 EE 30 0A 20 E1 2F FF 1E 


    这里是闪存部分(我的实际数据/代码从地址0x600A06C8开始)

    0x600A0000	C4068230	AC048230	010203A0	26140202	6C9AAA01	EDE8F90D	4E8289BC	B6F4D5EE	302E56FB	2A09060D	F7864886	0D01010D	81300005	300B3197	55030609	02130604	0B315355	03060930	0C080455
    0x600A004C	31435302	060F3011	07045503	654E080C	6F592077	21316B72	03061F30	0C0A0455	78655418	49207361	7274736E	6E656D75	2C2E7374	636E4920	3013312E	55030611	0A0C0B04	41544953	4D204152
    0x600A0098	0F315543	03060D30	0C030455	626C4106	31747265	061D301F	48862A09	010DF786	10160109	65626C41	67407472	69742E74	6D6F632E	0D171E30	38303432	38313732	32303334	320D175A	32393034
    0x600A00E4	34383136	5A323033	31978130	0609300B	06045503	53550213	09300B31	04550306	53020C08	30113143	5503060F	080C0704	2077654E	6B726F59	1F302131	04550306	54180C0A	73617865	736E4920
    0x600A0130	6D757274	73746E65	49202C2E	312E636E	06113013	0B045503	49530A0C	41524154	55434D20	0D300F31	04550306	41060C03	7265626C	301F3174	2A09061D	F7864886	0109010D	6C411016	74726562
    0x600A017C	2E746740	632E6974	82306D6F	0D302202	862A0906	0DF78648	05010101	02820300	8230000F	82020A02	C2000102	A50A8209	FA72202F	84E7932B	F6735A11	3F93D3EB	A3FD96BE	CFC39D7F	FF3F8127
    0x600A01C8	AE14BA02	2CFC86D8	A8EF2EDF	22005A93	04DF19FD	1C39B70A	D368703E	9329E6A7	ADD0173A	D9CEA0EB	49A828A3	4C9CBAED	FA39A9D3	8A32E51B	AD393690	0BB218FF	5DC26CC2	7280DDB6	D5764F67
    0x600A0214	F8E05362	9C455B86	BECFDFA3	9A16AE0C	3B4C6352	FB1A3F17	FDF505D7	BF1A4534	477EDE62	1CA30776	79F336D2	BAFFD1BF	60ABB48B	D1A91DB5	35EF348C	CEDB1B75	24BE79AE	F07A9935	002BBC16
    0x600A0260	33AF60C9	424ED118	FF02EFFF	8BAA6783	A4F096B9	149E6FA4	07DBEBCA	C45CCBF9	018384AC	C1204730	F0A019C2	071085D2	C32FBC3C	00156431	DD72C4E9	6B56E788	7AC3A2F8	FA12507E	069C88F4
    0x600A02AC	16A97566	7AF303BE	CF3C4ECE	B7784F78	8A95FE5A	3D3DE349	33EC38BE	CAF1AF9D	023CF1EF	D25BC707	75A50579	8D85AFE3	2E539C56	FA6B88F5	02F130DF	478C73A3	409B5EE5	5611E3A2	E1948808
    0x600A02F8	6D971275	960D2D1E	97D27EE6	0545B9DE	D43113C8	CB374407	20A31945	67910D95	A828F840	F9709880	ED4BC81B	7B30FF0C	30EE47A6	465A38D6	60C11C1E	12D1CD3B	6DD59B79	D0F581CB	5543EB96
    0x600A0344	41538BF5	056BE032	1F12AE0F	3696AED8	335398F7	8C0B23F9	DC1E7AD4	3726A357	8D8FA4DD	A2038D58	C51081A2	A59393FB	75F61E05	48CEBE17	C30E6DCC	E1D354A7	FA23E624	D86D3A65	A4E0F434
    0x600A0390	48798C34	23AEAA73	45906371	92BDDEE9	13548B5B	022B0A51	01000103	040182A3	00018230	03060C30	04131D55	01033005	2230FF01	062B0906	82010401	04010126	02133015	01020101	00010210
    0x600A03DC	00700404	02020020	5C30E400	062B0906	82010401	04020126	064D304F	48866009	04036501	40040302	6457A8BE	58F185A4	FF0FF82E	D8267917	2AE9C4BB	FA6AE87E	767203D6	13140DFD	61333C04
    0x600A0428	D81B99EC	BC85A3F3	37E227E3	9870CD03	C11B929B	75F47563	03720EEE	09061230	0401062B	01268201	30050403	01010203	09065A30	0401062B	01268201	304D0408	0040044B	00000000	00000000
    0x600A0474	00000000	00000000	00000000	00000000	00000000	00000000	00000000	00000000	00000000	00000000	00000000	00000000	00000000	02000000	01020101	00010200	09060D30	8648862A	01010DF7
    0x600A04C0	0300050D	00010282	73C4766A	44EC8A1C	E461F7E7	E1B40762	B57C62E8	2E6695F3	83BA21C3	36C4109E	C5F413A6	FD9FA103	8EB62748	1AFA7C03	F1E4BBF3	69B647AD	A7D4AACC	B9F9A000	21A5E542
    0x600A050C	29556881	E6E7846E	4F7D472F	61D65B7F	3C9051DF	33A5FFB1	2F607C9C	2687D5AE	21C10DEC	AEE3665E	6C72F8B0	98DF4A5C	60CAC7A0	100D7F5F	5E0FF10B	BB76AD08	7C5830F3	15A8B4F6	DF70C956
    0x600A0558	165754F0	1EC27235	8D6736DE	51C6F3E5	6FEE55A2	B4939C8F	5AFA801F	C11260EC	715AA1D2	35B06917	BEEEBF35	D782E011	A5A8FC3E	0511592D	8C9C33D1	8904D4E9	2C47F7BB	2B412A19	86DEAE6D
    0x600A05A4	50A128D9	1BC23224	6AAA34FE	4BA9E161	940CE2D8	73AE6A20	5C00F2C5	472F17BF	F174BF0A	BC8C6D61	C56EB42B	D9D6D710	A334F204	D30C380E	6CFE1EEB	15B41BCC	9452EFD5	CE987AAB	5546EA69
    0x600A05F0	84C83C61	013C3A8B	BB1F393F	38AA0623	D887A3BF	1A14A04A	372DDED5	BF62A281	59C45526	8E46F720	5BAD71C3	DABD67AA	BC5D2083	4FBFC233	9679405C	3B9132BF	62EC462D	C3239744	675C36DB
    0x600A063C	EB5FF18C	F3A37291	3086021D	A86743A1	D36ACB7A	588F4398	4621323C	BE83FCDF	BF484977	F1E4FCC7	950FE40D	14EB7093	4FDD6C9E	9B2073A0	C44DF4EC	14B8F094	4A887BB1	66888E52	4181830C
    0x600A0688	AF94ED91	5E672ED6	2792E71A	BCA14EED	765E8F1F	720B72E6	9B52A734	D04BAF94	10ED8E98	E8519AB1	84108F87	9763AF71	A60525FB	A507468D	B7409B22	35ADFAA9	00000000	00000002	38D1B717
    0x600A06D4	00000006	00000200	0000000A	00000210	00001000	00010004	3B03126F	00000032	00000000	00000050	00000032	00017000	00000002	3A83126F	00000006	00000100	00000009	00000110	FFFFFFFF
    0x600A0720	00000000	00000000	00000000	00000000	00000000	00000000	EE300A41	EE800A20	EEBD0AC0	EE100A10	E12FFF1E	00000000	00000000	00000000	EE300A41	EE800A20	EEBC0AC0	EE100A10	E12FFF1E
    0x600A076C	00000000	00000000	00000000	EE010A10	EEB81AC1	EE210A00	EE300A20	E12FFF1E	00000000	00000000	00000000	EE010A10	EEB81A41	EE210A00	EE300A20	E12FFF1E	1A1A1A1A	FFFFFFFF	FFFFFFFF

    下面是行 makefile、它会构建映像:

    	$(OBJCOPY) --strip-all -O binary $(PROFILE)/$(OUTNAME).out $(BOOTIMAGE_BIN_NAME)
    	$(BOOTIMAGE_CERT_GEN_CMD) --image-bin $(BOOTIMAGE_BIN_NAME) --core R5 --swrv 1 --loadaddr $(SBL_RUN_ADDRESS) --sign-key $(BOOTIMAGE_CERT_KEY) --out-image $(BOOTIMAGE_NAME) --debug DBG_SOC_DEFAULT
    


    下面是 UART flashloaded *。cfg 文件中的行:

    --file=../../test1/Debug/test1.tiimage --operation=flash --flash-offset=0xA0000

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

    1.我无法从构建中排除标准开始文件和入口点。   为此、我在 GCC 链接器中使用选项"-nostartfiles"选项、但对 TI Clang 没有任何类似之处。

    2.如何排序连接器/编译器以避免在优化期间从输出中排除某些函数/数据? 这是必需的、因为我 不想在此工程中使用入口点、编译器会"优化"所有内容、因此我需要手动定义"入口点"(工程中不能有入口点、只有数据才应放置在特定地址)。 我在 GCC 链接器脚本中使用了保留字、但   CCS/TI Clang 的链接器命令文件无法识别此字。

    [报价]

    你好,伊凡,如果我正确理解这一点 ,你建立了程序的一部分,然后编程到闪存。  我们将其称为第一个构建部分 A。程序的其余部分将在以后构建。  调用此命令后构建 B 部分。 A 部分和 B 部分之间的连接不是符号、而是您需要提前选择的硬编码地址。 我的理解是否正确?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="500225" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1403658/lp-am263p-ccs-project-without-entry-point/5382478 #5382478"]

    1.我无法从构建中排除标准开始文件和入口点。   为此、我在 GCC 链接器中使用选项"-nostartfiles"选项、但对 TI Clang 没有任何类似之处。

    2.如何排序连接器/编译器以避免在优化期间从输出中排除某些函数/数据? 这是必需的、因为我 不想在此工程中使用入口点、编译器会"优化"所有内容、因此我需要手动定义"入口点"(工程中不能有入口点、只有数据才应放置在特定地址)。 我在 GCC 链接器脚本中使用了保留字、但   CCS/TI Clang 的链接器命令文件无法识别此字。

    你好,伊凡,如果我正确理解这一点 ,你建立了程序的一部分,然后编程到闪存。  我们将其称为第一个构建部分 A。程序的其余部分将在以后构建。  调用此命令后构建 B 部分。 A 部分和 B 部分之间的连接不是符号、而是您需要提前选择的硬编码地址。 我的理解是否正确?

    [报价]

    总的来说是的、是这样。

    只有地址并不是完全硬编码、而是作为'C 部分'工程加载到闪存的地址、这实际上是硬编码(通过放置到链接器脚本中的专用存储器部分)。 但在本示波器上、我们可以将它们视为硬编码。

    但关于这些问题,请阅读我对'--relocatable '选项的回答。 我有一些结果、现在有更多特定问题。 THERA 是上面的一些代码示例。

    我发现链接器设置中的设置选项'--relocated'和 RAM 或 ROM 模型都不允许我删除'main'函数,但在这种情况下,编译器包含所有函数(其中一些可以优化掉  ),我在.map 文件中的符号地址都从0x0000xxxx 开始,尽管段运行和加载地址是正确的(符号地址匹配段地址,如果编译没有'--relocated'选项)。
    在生成的 .hex 文件中、所有数据/文本都放置在 运行地址而不是加载地址中、我认为这是错误的、因为此文件实际上应该加载到 SoC 中。

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

    你好、Ivan

    与我们的编译器专家确认后 、我们不支持这种组织和构建代码的方法。 我在这里的建议是根据编译器当前支持来组织和构建代码。  A 部分未编程到闪存中。  它组织为目标文件库。  B 部分将元件 A 库添加到其链接中。  A 部分和 B 部分之间的连接通过符号实现。  在创建最终可执行文件后、将其编程到闪存中。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在此处的建议是根据编译器当前支持情况组织和构建代码。  A 部分未编程到闪存中。  它组织为目标文件库。  B 部分将元件 A 库添加到其链接中。  A 部分和 B 部分之间的连接通过符号实现。  创建最终的可执行文件后、将其编程到闪存中。[/QUOT]

    此解决方案在我们的项目中是不可接受的、因为在实际用例中、'Part B'是在我们提供带有已闪存的'Part A'的硬件解决方案后由双方公司开发的。 因此、'B 部分'应该被编译/闪存(使用定制加载程序、这将是'A 部分'的一部分)为独立项目、这个项目可在不对'A 部分'进行任何改变的情况下被改变或更新。

    我建议只是忘记洞图片,至少现在。 您能否回答有关'--relocatable '选项的问题而不考虑整个项目? 我可以创建相关主题以使其更容易、因为这个主题会变得有点杂乱。

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

    伊凡,你好!  

    能否创建一个与可重定位问题相关的新线程、并提及与编译器标志相关的详细信息、以便直接联系到我们的编译器专家? 它会干净得多。