这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 行业应用 » 汽车电子 » 【S32K3XX】全局变量(.data)初始化过程

共1条 1/1 1 跳转至

【S32K3XX】全局变量(.data)初始化过程

高工
2025-09-22 08:22:58     打赏

【简介】

            在S32K3XX 芯片中链接文件中对全局变量的处理的如下,从以下的处理可以看出初始化的全局变量会被放到__sram_data_rom 的ROM空间存放。

.sram_data : AT(__sram_data_rom)
{
. = ALIGN(4);
__sram_data_begin__ = .;
. = ALIGN(4);
*(.ramcode)
. = ALIGN(4);
*(.data)
*(.data*)
. = ALIGN(4);
*(.mcal_data)
. = ALIGN(4);
__sram_data_end__ = .;
} > int_sram

__sram_data_rom_end = __sram_data_rom + (__sram_data_end__ - __sram_data_begin__);

从 GCC 的链接脚本的中的说明AT语法指定全局变量的LMA 地址放到plash 中。

image.png

对应语法说明如下

image.png

以下是编译后的map 文件

.sram_data      0x20406648      0x108 
                0x20406648                . = ALIGN (0x4)
                0x20406648                __sram_data_begin__ = .
                0x20406648                . = ALIGN (0x4)
 *(.ramcode)
 .ramcode       0x20406648       0x88 ./RTD/src/Clock_Ip_Specific.o
                0x204066d0                . = ALIGN (0x4)
 *(.data)
 .data          0x204066d0        0x0 ./FreeRTOS/Source/croutine.o
 .data          0x204066d0        0x0 ./FreeRTOS/Source/event_groups.o
 .data          0x204066d0        0x0 ./FreeRTOS/Source/list.o
 .data          0x204066d0        0x0 ./FreeRTOS/Source/queue.o
 .data          0x204066d0        0x0 ./FreeRTOS/Source/stream_buffer.o
 .data          0x204066d0        0x4 ./FreeRTOS/Source/tasks.o
                0x204066d0                uxTopUsedPriority
 .data          0x204066d4        0x0 ./FreeRTOS/Source/timers.o
 .data          0x204066d4        0x4 ./FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.o
 .data          0x204066d8        0x0 ./FreeRTOS/Source/portable/MemMang/heap_4.o
 .data          0x204066d8        0x0 ./Project_Settings/Startup_Code/Vector_Table.o
 .data          0x204066d8        0x0 ./Project_Settings/Startup_Code/exceptions.o
 .data          0x204066d8        0x0 ./Project_Settings/Startup_Code/nvic.o
 .data          0x204066d8        0x0 ./Project_Settings/Startup_Code/startup.o
 .data          0x204066d8        0x0 ./Project_Settings/Startup_Code/startup_cm7.o
 .data          0x204066d8        0x0 ./Project_Settings/Startup_Code/system.o
 .data          0x204066d8        0x0 ./RTD/src/C40_Ip.o
 .data          0x204066d8        0x0 ./RTD/src/C40_Ip_Ac.o
 .data          0x204066d8        0x0 ./RTD/src/Cache_Ip.o
 .data          0x204066d8        0x0 ./RTD/src/Cache_Ip_HwAcc_ArmCoreMx.o
 .data          0x204066d8        0x4 ./RTD/src/Clock_Ip.o
 .data          0x204066dc        0x0 ./RTD/src/Clock_Ip_Data.o
 .data          0x204066dc        0x0 ./RTD/src/Clock_Ip_Divider.o
 .data          0x204066dc        0x0 ./RTD/src/Clock_Ip_DividerTrigger.o
 .data          0x204066dc        0x0 ./RTD/src/Clock_Ip_ExtOsc.o
 .data          0x204066dc        0x0 ./RTD/src/Clock_Ip_FracDiv.o
 .data          0x204066dc        0x0 ./RTD/src/Clock_Ip_Frequency.o
 .data          0x204066dc        0x0 ./RTD/src/Clock_Ip_Gate.o
 .data          0x204066dc        0x0 ./RTD/src/Clock_Ip_IntOsc.o
 .data          0x204066dc        0x0 ./RTD/src/Clock_Ip_Irq.o
 .data          0x204066dc        0x0 ./RTD/src/Clock_Ip_Monitor.o
 .data          0x204066dc        0x0 ./RTD/src/Clock_Ip_Pll.o
 .data          0x204066dc        0x0 ./RTD/src/Clock_Ip_ProgFreqSwitch.o
 .data          0x204066dc        0x0 ./RTD/src/Clock_Ip_Selector.o
 .data          0x204066dc        0x0 ./RTD/src/Clock_Ip_Specific.o
 .data          0x204066dc        0x0 ./RTD/src/Det.o
 .data          0x204066dc        0x0 ./RTD/src/Det_stub.o
 .data          0x204066dc        0x0 ./RTD/src/Hse_Ip.o
 .data          0x204066dc        0x0 ./RTD/src/Igf_Port_Ip.o
 .data          0x204066dc        0x0 ./RTD/src/IntCtrl_Ip.o
 .data          0x204066dc        0x0 ./RTD/src/Lpuart_Uart_Ip.o
 .data          0x204066dc        0x0 ./RTD/src/Lpuart_Uart_Ip_Irq.o
 .data          0x204066dc        0x0 ./RTD/src/Mu_Ip_Irq.o
 .data          0x204066dc        0x0 ./RTD/src/OsIf_Interrupts.o
 .data          0x204066dc        0x0 ./RTD/src/OsIf_Timer.o
 .data          0x204066dc        0x0 ./RTD/src/OsIf_Timer_System.o
 .data          0x204066dc        0x0 ./RTD/src/OsIf_Timer_System_Internal_Systick.o
 .data          0x204066dc        0x0 ./RTD/src/Power_Ip.o
 .data          0x204066dc        0x0 ./RTD/src/Power_Ip_AEC.o
 .data          0x204066dc        0x0 ./RTD/src/Power_Ip_CortexM7.o
 .data          0x204066dc        0x0 ./RTD/src/Power_Ip_DCM_GPR.o
 .data          0x204066dc        0x0 ./RTD/src/Power_Ip_FLASH.o
 .data          0x204066dc        0x0 ./RTD/src/Power_Ip_MC_ME.o
 .data          0x204066dc        0x0 ./RTD/src/Power_Ip_MC_RGM.o
 .data          0x204066dc        0x0 ./RTD/src/Power_Ip_MC_RGM_Irq.o
 .data          0x204066dc        0x0 ./RTD/src/Power_Ip_PMC.o
 .data          0x204066dc        0x0 ./RTD/src/Power_Ip_PMC_Irq.o
 .data          0x204066dc        0x0 ./RTD/src/Power_Ip_Private.o
 .data          0x204066dc        0x0 ./RTD/src/SchM_Crypto_43_HSE.o
 .data          0x204066dc        0x0 ./RTD/src/SchM_Dio.o
 .data          0x204066dc        0x0 ./RTD/src/SchM_Mcl.o
 .data          0x204066dc        0x0 ./RTD/src/SchM_Mcu.o
 .data          0x204066dc        0x0 ./RTD/src/SchM_Port.o
 .data          0x204066dc        0x0 ./RTD/src/SchM_Uart.o
 .data          0x204066dc        0x0 ./RTD/src/Siul2_Dio_Ip.o
 .data          0x204066dc        0x0 ./RTD/src/Siul2_Port_Ip.o
 .data          0x204066dc        0x0 ./RTD/src/Tspc_Port_Ip.o
 .data          0x204066dc        0x0 ./board/Siul2_Port_Ip_Cfg.o
 .data          0x204066dc        0x0 ./board/Tspc_Port_Ip_Cfg.o
 .data          0x204066dc        0x0 ./common/debug.o
 .data          0x204066dc        0x0 ./common/hardfault_test.o
 .data          0x204066dc        0x0 ./common/hardfault_track.o
 .data          0x204066dc        0x0 ./common/hexdump.o
 .data          0x204066dc        0x0 ./common/mini_printf.o
 .data          0x204066dc        0x0 ./common/ringbuffer.o
 .data          0x204066dc        0x0 ./common/utilities.o
 .data          0x204066dc        0x0 ./generate/src/C40_Ip_Cfg.o
 .data          0x204066dc        0x0 ./generate/src/Clock_Ip_Cfg.o
 .data          0x204066dc        0x0 ./generate/src/Hse_Ip_Cfg.o
 .data          0x204066dc        0x0 ./generate/src/Igf_Port_Ip_Cfg.o
 .data          0x204066dc        0x0 ./generate/src/IntCtrl_Ip_Cfg.o
 .data          0x204066dc        0x0 ./generate/src/Lpuart_Uart_Ip_Sa_PBcfg.o
 .data          0x204066dc        0x0 ./generate/src/OsIf_Cfg.o
 .data          0x204066dc        0x0 ./generate/src/Power_Ip_Cfg.o
 .data          0x204066dc        0x0 ./generate/src/Power_Ip_PBcfg.o
 .data          0x204066dc        0x0 ./littleshell/littleshell.o
 .data          0x204066dc        0x0 ./misc/reset_reason.o
 .data          0x204066dc        0x0 ./src/hse_service.o
 .data          0x204066dc        0x0 ./src/main.o
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-atoi.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-memcmp.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-memcpy-stub.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-memmove.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-memset.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-sprintf.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-strcat.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-strcmp.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-strcpy.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-strlen.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-strncmp.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-strncpy.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-strtol.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-ctype_.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-errno.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-impure.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-nano-svfprintf.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-nano-vfprintf_i.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-memchr.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-nano-freer.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-nano-mallocr.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-nano-reallocr.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-sbrkr.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-mlock.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-nano-msizer.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-reent.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/thumb/v7e-m+fp/hard\libgcc.a(_arm_truncdfsf2.o)
 .data          0x204066dc        0x0 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libnosys.a(sbrk.o)
 *(.data*)
 .data._impure_ptr
                0x204066dc        0x4 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-impure.o)
                0x204066dc                _impure_ptr
 .data.impure_data
                0x204066e0       0x60 c:/nxp/s32ds.3.6.1/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-impure.o)
                0x20406740                . = ALIGN (0x4)
 *(.mcal_data)
 .mcal_data     0x20406740        0x8 ./RTD/src/C40_Ip.o
 .mcal_data     0x20406748        0x4 ./RTD/src/Power_Ip.o
                0x20406748                Power_Ip_pfReportErrorsCallback
 .mcal_data     0x2040674c        0x4 ./RTD/src/Siul2_Dio_Ip.o
                0x2040674c                Siul2_Dio_Ip_au32BaseAdresses
                0x20406750                . = ALIGN (0x4)
                0x20406750                __sram_data_end__ = .

从map 文件的__sram_data_rom/__sram_data_rom_end 的值可以知道全局变量的LVM(load address)。

image.png


上述代码为初始化的全局变量的数据拷贝过程,将ROM 中的数据加载到RAM中。




共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]