• 313查看
  • 0回复

[芯片硬件] 浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM ima...

[复制链接]


该用户从未签到

发表于 9-3-2024 22:00:12 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


内容提要

1. Qorivva MPC560x系列汽车MCU的boot过程详解

1.1 启动模式选择(boot mode selection)

1.2 内部Flash启动模式与启动扇区(boot sector)和复位配置半字(RCHW)

1.3 Qorivva MPC560x系列MCU的5个启动扇区地址分布

2. Qorivva MPC560x系列汽车MCU的片上存储器类型和地址映射(Memory Map)及链接文件(linker file)

2.1 Qorivva MPC560x系列汽车MCU的Code Flash地址映射

2.2 Qorivva MPC560x系列汽车MCU的Data Flash地址映射

2.3 Qorivva MPC560x系列汽车MCU的SRAM地址映射

2.4 Qorivva MPC560x系列汽车MCU的链接文件(linker file)简介

3. Qorivva MPC560x系列MCU的startup过程和ROM Image作用及配置方法

3.1 Qorivva MPC560x系列MCU的startup过程与应用工程的ROM Image作用

3.2 CodeWarrior 2.10 IDE应用工程的ROM Image配置

3.3 CodeWarrior 10.x/11.x IDE应用工程的ROM Image配置

4. Qorivva MPC560x系列MCU的CodeWarrior IDE应用工程ROM Image配置和地址分配要点

4.1 CodeWarrior IDE应用工程ROM Image配置和地址分配要点

4.2 如何设置CodeWarrior IDE应用工程ROM Image配置和地址分配提高Flash利用效率

总结

1. Qorivva MPC560x系列汽车MCU的boot过程详解
Qorivva MPC560x系列MCU上电复位(POR)或者从Standby低功耗模式唤醒后,将由启动辅助模块(BAM-Boot Assit Module),运行固化在地址0xFFFF_C000的8KBBAF(BAM Firmware/code)管理MCU的启动过程,检查启动模式的硬件配置引脚FAB和ABS[2,0]的输入电平,进而决定启动模式(boot mode):
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w1.jpg

1.1 启动模式选择(boot mode selection)
Qorivva MPC560x系列MCU支持的串行启动模式(FAB = 1)及其硬件配置要求如下表:
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w2.jpg

基于UART(LINFlex)和CAN(FlexCAN)的串行启动模式(FAB = 1),需要额外配置MCU引脚,且其boot工作流程对用户时公开透明的,因此在真实的汽车ECU产品应用开发中并不实用,在此忽略,不展开详细介绍。

1.2 内部Flash启动模式与启动扇区(boot sector)和复位配置半字(RCHW)
Qorivva MPC560x系列MCU默认使用内部Flash存储器启动模式(FAB = 0),其由SSCM(System Statusand Configuration Module,系统状态和配置模块)依次从5个固定的Code Flash启动扇区(Boot Sector,也称作boot location)查找合法/正确的启动扇区结构体(boot sector structure)(其合法性有启动扇区的第一个word储存的RCHW(Reset Configuration Half-Word,复位配置半字))是否包含BOOT_ID = 0x5A决定),一旦找到合法的启动扇区结构体,即从该结构体第2个word配置的应用程序复位向量(Reset Vector,储存值为32-bit的复位函数地址)指向的复位函数开始执行应用程序的startup代码;若5个启动扇区中均未找到合法的启动扇区结构体,则MCU进入静态模式(static mode),等待MCU复位恢复(新出厂的空芯片或者擦除后未编程合法应用程序的芯片所处状态):
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w3.jpg

Qorivva MPC560x系列MCU的启动扇区结构体(boot sector structure)和复位配置半字(RCHW)定义如下:
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w4.jpg

1.3 Qorivva MPC560x系列MCU的5个启动扇区地址分布
Qorivva MPC560x系列MCU的5个固定Code Flash启动扇区(Boot Sector,也称作boot location)地址如下:
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w5.jpg

2. Qorivva MPC560x系列汽车MCU的片上存储器类型和地址映射(Memory Map)及链接文件(linker file)
Qorivva MPC560x系列汽车MCU提供了掉电不丢失数据的非易失性存储器(NVM)--Code Flash和Data Flash以及掉电数据丢失的SRAM等3种片上存储器给用户使用, 其在汽车ECU产品应用软件开发中的典型应用如下表:

片上存储器类型

典型应用

comments

Code Flash

存放应用程序代码和数据

NVM, 掉电不丢失, 通过擦除和编程写入数据, Flash block size较大。也可以用作模拟EEPROM,只是效率比Data Flash差。

Data Flash

用于模拟EEPROM数据备份或者参数标定结果保存

NVM, 掉电不丢失, 通过擦除和编程写入数据, Flash block size较小以保证模拟EEPROM实现效率。也可以用应用程序代码储存。

SRAM

全局变量和系统堆栈

掉电数据丢失,POR之后使用前需要进行ECC初始化;通常有8KB单独供电的 Standby SRAM用于在最低功耗模式(standby mode)下保存关键用户数据;
本小节将介绍Qorivva MPC560x系列汽车MCU的不同片上存储器的地址映射(memory map)和链接文件(linker file)。
2.1 Qorivva MPC560x系列汽车MCU的Code Flash地址映射
Qorivva MPC560x系列汽车MCU的Code Flash以0x0000_0000为起始地址,长度/大小由MCU part number的第3位数字N决定(详细的part number命名规则请参考MCU的datasheet):


    N ≤ 5 的part number,Flash大小为(N * 128KB) ,比如MPC5604B/P/S,第3位数字为4,则其Code Flash大小为4 * 128KB = 512KB;

    N = 6 的part number,Flash大小为1MB ,而MPC5606B,第3位数字为6,则其Code Flash大小为1MB;

    N = 7 的part number,Flash大小为1.5MB ,而MPC5607B,第3位数字为7,则其Code Flash大小为1.5MB;

MP560xP系列MCU的part number命名规则:
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w6.jpg

MP5605/6/7B系列MCU的part number命名规则:
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w7.jpg

2.2 Qorivva MPC560x系列汽车MCU的Data Flash地址映射
Qorivva MPC560x系列汽车MCU的Data Flash以0x0800_0000为起始地址,长度/大小固定为64KB;
2.3 Qorivva MPC560x系列汽车MCU的SRAM地址映射
Qorivva MPC560x系列汽车MCU的SRAM以0x4000_0000为起始地址,长度/大小由具体的MCU part number决定:
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w8.jpg

浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w9.jpg

2.4 Qorivva MPC560x系列汽车MCU的链接文件(linker file)简介
Qorivva MPC560x系列汽车MCU的用户应用程序代码编译结果通过IDE工具链提供的链接器(linker)按照应用工程的链接文件(linker file)链接生成最终的编译结果elf文件和S19/HEX/BIN等编程文件。
因此,应用工程的链接文件必须与目标MCU的片上存储器资源地址映射匹配,才能保证最终链接的结果下载/编程到目标MCU后能够正常工作。
以下为MPC5604P的CodeWarrior 2.10 IDE 应用工程创建时默认添加的链接文件,其中,MEMORY{ }包含存储器区域(region)的地址分配(默认不包含Data-Flash,用户可以根据实际需要添加);SECTION{ }则包含具体的代码和数据段放置规则,并提供了startup过程中初始化SRAM所必须的全局地址信息(symbols):MEMORY{    boot_flash:           org = 0x00000000,   len = 0x00010000    interrupts_flash:     org = 0x00010000,   len = 0x00010000    internal_flash:       org = 0x00020000,   len = 0x00060000     internal_ram:         org = 0x40000000,   len = 0x00007C00     stack_ram:            org = 0x40007C00,   len = 0x0400}/* This will ensure the rchw and reset vector are not stripped by the linker */FORCEACTIVE { "bam_rchw" "bam_resetvector"}
SECTIONS{  .boot LOAD (0x00000000) : {} > boot_flash  /* LOAD (0x0) prevents relocation by ROM copy during startup */
   GROUP : {                /* Note: _e_ prefix enables load after END of that specified section */      .ivor_branch_table (VLECODE) LOAD (ADDR(interrupts_flash)) : {}      .intc_hw_branch_table (VLECODE) LOAD (_e_ivor_branch_table) ALIGN (0x800) : {}      .ivor_handlers (VLECODE) LOAD (_e_intc_hw_branch_table) : {} /* Each MPC555x handler require 16B alignmt */   } > interrupts_flash
   GROUP : {      .intc_sw_isr_vector_table ALIGN (2048) : {} /* For INTC in SW Vector Mode */
       .text_vle (VLECODE) ALIGN(0x1000): {             *(.text)             *(.text_vle)             *(.fini)             *(.eini)         }       .init  : {}       .init_vle (VLECODE) : {             *(.init)             *(.init_vle)          }        .ctors : {}        .dtors : {}        .rodata (CONST) : {            *(.rdata)            *(.rodata)         }      .sdata2       : {}      extab      : {}      extabindex : {}   }   > internal_flash
  GROUP : {      .data  (DATA) : {}       .sdata (DATA) : {}      .sbss  (BSS)  : {}      .bss   (BSS)  : {}      .PPC.EMB.sdata0 : {}      .PPC.EMB.sbss0  : {}  } > internal_ram}   
/* Freescale CodeWarrior compiler address designations */
_stack_addr = ADDR(stack_ram)+SIZEOF(stack_ram);_stack_end  = ADDR(stack_ram);
/* These are not currently being used_heap_addr  = ADDR(.bss)+SIZEOF(.bss);_heap_end   = ADDR(internal_ram)+SIZEOF(internal_ram);*/__IVPR_VALUE = ADDR(interrupts_flash);
/* L2 SRAM Location (used for L2 SRAM initialization) */
L2SRAM_LOCATION = 0x40000000;
3. Qorivva MPC560x系列MCU的startup过程和ROM Image作用及配置方法
3.1 Qorivva MPC560x系列MCU的startup过程与应用工程的ROM Image作用
基于CodeWarrior IDE的Qorivva MPC560x系列MCU应用工程代码,由CodeWarrior IDE工具链集成的EWL(Embedded Warrior Library)库完成startup启动(从复位函数_start()到跳转至应用程序入口main()运行)。
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w10.jpg

完成的主要工作包括:


    ① 初始化CPU内核寄存器和堆栈(__init_registers())

    ② 初始化MCU硬件,主要是SRAM的ECC初始化(__init_hardware())

    ③ 初始化SRAM,包括.data和.bss段的全局变量初始化(__init_data())

    ④ 用户可控startup初始化,主要包括heap分配,C++初始化以及用户添加的个性化硬件或者软件初始化代码(__init_user())

    ⑤ 跳转到应用程序入口main()

EWL(Embedded Warrior Library)库由NXP/Freescale开发,在其提供的启动代码(startup code) __start.c中定义了RAM初始化API函数--__init_data()及其调用的__copy_rom_section()和__init_bss_section():/***************************************************************************//* *  __init_data * *  Initialize all (RAM) data sections, copying ROM sections as necessary. * *  dst      destination RAM address *  size    number of bytes to zero * *  we now overload the function in the event that the user wants pic pid * *//***************************************************************************/#pragma overload void __init_data(void);extern void __init_data(void){  __rom_copy_info *dci;  __bss_init_info *bii;
   /* Copy from ROM to RAM: */
  dci = _rom_copy_info;  while (1) {    if (dci->rom == 0 && dci->addr == 0 && dci->size == 0) break;     __copy_rom_section(dci->addr, dci->rom, dci->size);     dci++;  }
   /* Initialize with zeros: */
  bii = _bss_init_info;  while (1) {    if (bii->addr == 0 && bii->size == 0) break;     __init_bss_section(bii->addr, bii->size);     bii++;  }}/***************************************************************************//* *  __copy_rom_section * *  Copy the ROM section to RAM if dst and src are different and size *  is nonzero. * *  dst      destination RAM address *  src      source ROM address *  size    number of bytes to copy *//***************************************************************************/extern void __copy_rom_section(void* dst, const void* src, unsigned long size){  if (size && (dst != src)) {    memcpy(dst, src, size);    __flush_cache( dst, size );  }}
/***************************************************************************//* *  __init_bss_section * *  Initialize the RAM section to zeros if size is greater than zero. * *  dst      destination RAM address *  size    number of bytes to zero *//***************************************************************************/extern void __init_bss_section(void* dst, unsigned long size){  if (size) {    memset(dst, 0, size);  }}其中,使用应用工程链接时链接器生成的_rom_copy_info和_bss_init_info结构体进行.data段和.bss段的全局变量初始化。
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w11.jpg

其结构体类型(__rom_copy_info[]和__bss_init_info[])定义和全局信息符号(_rom_copy_info[]和_bss_init_info[])声明如下(在EWL的__ppc_eabi_linker.h文件中):/* *  Special symbol for copying sections from rom to ram: _rom_copy_info *  if size field is zero, there are no more valid sections *  see __init_data for example.  _rom_copy_info is a true C variable. * *  this version is used except when the abi is sda pic/pid */
typedef struct __rom_copy_info {  char *     rom;    /* address in rom */  char *     addr;    /* address in ram (executing address) */  unsigned int  size;    /* size of section */} __rom_copy_info;
__declspec(section ".init") extern __rom_copy_info   _rom_copy_info[];  /* An array of all initialized (data, text or mixed) sections */
/* *  Special symbol for initializing bss type sections: _bss_init_info *  if size field is zero, there are no more valid sections *  see __init_data for example.  _bss_init_info is a true C variable. * *  this version is used except when the abi is sda pic/pid */
typedef struct __bss_init_info {  char *     addr;    /* address in ram (executing address) */  unsigned int  size;    /* size of section */} __bss_init_info;
__declspec(section ".init") extern __bss_init_info   _bss_init_info[];  /* An array of all uninitialized data sections */从以上定义可看到:_rom_copy_info[]的每一个成员包含:代码/数据段初始化值在ROM中的存储地址(rom)和其在RAM中的运行时地址(addr)和大小(size),占用3个word地址(12字节);_bss_init_info[]的每一个成员无需初始化值,只要数据段其在RAM中的运行时地址(addr)和大小(size),占用2个word地址(8字节);
以下是从一个MPC5604P的CodeWarrior IDE应用工程链接结果的map文件中截取.init段存储器分布结果,可以看到_rom_copy_info[]和_bss_init_info[]被指定链接到链接文件的初始化段(.init section)中, 前者包含7个成员(0x54 = 84字节),存储地址为0x0002026C,后者只有2个成员(0x10 = 16字节),存储地址为0x000202C0:
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w12.jpg

从该应用工程编译生成的S19文件(.mot):
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w13.jpg

可以查到相应的ROM copy段(_rom_copy_info[])信息如下,仅6个有用的section,最后一个为全0的结束标识section:

ROM copy section

rom(store)

address

addr(runtime)

address

size

comments

1

0x0000_0000

0x0000_0000

0x8

.boot section

2

0x0001_0000

0x0001_0000

0xF4

.ivor_branch_table section

3

0x0002_0000

0x0002_0000

0x26C

.text_vle section

4

0x0002_026C

0x0002_026C

0x64

.init section

5

0x0002_02D0

0x0002_02D0

0x1F4

.init_vle section

6

0x0002_04C8

0x4000_0000

0x14

.data section

7

0x0000_0000

0x0000_0000

0

END
bss init段(_bss_init_info[])信息如下,仅1个有用的section,最后一个为全0的结束标识section:

bss init section

addr(runtime)

address

size

comments

1

0x4000_0018

0x4

.sbss section

2

0x0000_0000

0

END
通过对比,可以发现以上信息正是map文件最后的ROM image Memory Map表内容:
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w14.jpg

要生成_rom_copy_info[]和_bss_init_info[]全局信息符号,必须配置勾选CodeWarrior工具链的链接器“Generate ROM Image”选项,生成应用工程代码链接结果的ROM Image。
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w15.jpg

Notes:为了保证最终生成的结果下载目标MCU后能够正常工作,必须正确设置ROM Image Address和RAM Buffer Address of ROM Image地址。


    ROM Image Address:ROM image分配的Flash存储地址

    RAM Buffer Address of ROM Image:指定用于Flash image编程器使用的RAM缓存地址;

Notes:对于CodeWarrior提供的Flash编程器,ROM Image Address和RAM Buffer Address of ROM Image地址必须设置相同。
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w16.jpg

Tips:EWL库的源代码保存在工具链安装目录下:


    CodeWarrior 2.10 IDE:

    <IDE Installation path>\MCU\PA_Support\ewl\

    CodeWarrior 10.x/11.x IDE:

    <IDE Installation path> \PowerPC_EABI_Support\Runtimel\

Tips:NXP提供免费S32DS for Power IDE也可以支持Qorivva MPC560x系列MCU的应用软件开发,但是其使用的工具链为GNU的GCC,而非CodeWarrior,且其应用工程启动过程是NXP定制的,并未使用EWL库的启动代码,因此,不需要配置和生成ROM image。
Tips:关于CodeWarrior IDE工具链的map文件内容细节和完整的startup过程介绍,请参考如下公众号文章(点击文章标题即可直接跳转阅读):
《CodeWarrior IDE使用Tips-Qorivva MPC56xx应用工程map文件全解析(CW 2.10/10.x )》;
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w17.jpg

3.2 CodeWarrior 2.10 IDE应用工程的ROM Image配置
CodeWarrior 2.10 IDE应用工程的 ROM Image配置方法如下:
选中应用工程的Flash编译目标(build target),点击工程属性配置快捷图标:
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w18.jpg

然后,在工程属性的Linker -> EPPC Linker配置中,勾选“Generate ROM Image”即可生成该应用工程的ROM Image,进而设置其ROM Image Address和RAM Buffer Address of ROM Image:
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w19.jpg

3.3 CodeWarrior 10.x/11.x IDE应用工程的ROM Image配置
在Qorivva MPC560x系列MCU的CodeWarrior 10.x/11.x IDE应用工程的Flash编译目标(build target)的工程属性中的C/C++ Build -> Settings -> Tool Settings -> PowerPC Linker -> Output配置中,勾选“Generate ROM Image”即可生成该应用工程的ROM Image,进而设置其ROM Image Address和RAM Buffer Address of ROM Image:
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w20.jpg

4. Qorivva MPC560x系列MCU的CodeWarrior IDE应用工程ROM Image配置和地址分配要点
4.1 CodeWarrior IDE应用工程ROM Image配置和地址分配要点
综合以上介绍,Qorivva MPC560x系列MCU的CodeWarrior IDE应用工程ROM Image配置和地址分配要点总结如下:
① 仅Flash编译目标需要配置ROM image, RAM编译目标无需生成ROM image;
② ROM Image Address和RAM Buffer Address of ROM Image地址必须设置相同;
③ ROM Image Address和RAM Buffer Address of ROM Image地址设置必须与应用工程的链接文件(linker file)中Flash地址分配一致,以避免对代码段进行拷贝;
④ ROM Image不能占用boot sector structure(Qorivva MPC560x系列MCU有5个boot sector)和中断向量表区域(4KB地址对齐);
Tips:Qorivva MPC560x系列MCU使用的PowerPC e200z0内核的中断向量前缀寄存器(IVPR)是其特殊寄存器SPR 63,用于存放内核系统异常向量表的基地址。该寄存器宽度也为32-bit,但仅最高20-bit有效,低12-bit为0,所以PowerPC e200z0内核的系统异常向量表必须按2^12=4KB地址对齐:
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w21.jpg

Tips:关于Qorivva MPC56/57xx系列MCU内核异常和中断处理的细节,请参考以下公众号文章(点击文章标题即可直接跳转阅读),此处不再赘述:
        《浅谈嵌入式MCU软件开发之MPC56_57xx系列MCU PowerPC e200系列内核异常(IVORx)与IRQ中断处理详解》;
由于Code Flash的0x0000_0000地址为boot sector 0所在地址,不推荐放置用户代码和数据,通常用于存放boot sector structure(8字节),以保证Qorivva MPC56/57xx系列MCU能够正常启动;而PowerPC e200z0内核要求其中断向量表按照4KB地址对齐,若在boot sector structure后面紧挨着存放内核中断向量表的话,ROM image允许设置的最小地址为0x2000(8KB),这也是CodeWarrior 10.x/11.x IDE新建Qorivva MPC560x系列MCU应用工程的默认配置:
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w22.jpg

4.2 如何设置CodeWarrior IDE应用工程ROM Image配置和地址分配提高Flash利用效率
如果使用Qorivva MPC560x系列MCU的CodeWarrior IDE应用工程创建时默认添加的链接文件,编译应用工程,最终生成的编译结果中init段分配的0xFF0字节Code Flash只用了244字节,剩余地址空间的都被浪费掉了:
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w23.jpg

为此,可以对应用工程的链接文件的存储器地址分配MEMORY{}做如下修改:① 将初始化段init的长度修改为实际编译结果大小,即0x250(其中存放应用工程的启动代码,不会随着应用代码的增加而改变,除非用户自己修改,或者改变工程的编译优化等级);SECTIONS{     GROUP : {    /* Section used for initialization code: __ppc_eabi_init.c,     MPC56xx_HWInit.c, MPC56xx_init_*.c and the entry point (__startup).     */      .init LOAD(ADDR(init)) : {}      .init_vle (VLECODE) LOAD(_e_init) : {        *(.init)        *(.init_vle)      }    } > init}② 将中断向量表储存段exception_handlers地址移到MCU(MPC5604P, 512KB) Code Flash的最后4KB(必须满足4KB地址对齐的要求);
③ 将应用代码和数据储存段internal_flash地址提前到紧挨着初始化段init结束地址,即0x260,并其长度+0xDA0:
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w24.jpg

同时,将应用工程的链接器ROM image生成地址配置修改与链接文件地址分配一致,以保证最终编译结果能够被CodeWarrior IDE的Flash Programmer正常加载并运行:
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w25.jpg

这样即可将浪费的3488(0xDA0)字节 Code Flash利用起来了:
浅谈嵌入式MCU软件开发之Qorivva MPC560x系列MCU的boot和startup过程详解及ROM image配置要点w26.jpg

总结
本文详细介绍了Qorivva MPC560x系列汽车MCU的boot和startup过程、存储器类型和地址映射以及CodeWarrior IDE应用工程的Flash编译目标ROM Image的作用和配置要点,希望对正在使用CodeWarrior IDE开发Qorivva MPC560x系列MCU应用程序的读者有所帮助和启发。

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 1-2-2025 07:58 , Processed in 0.337759 second(s), 32 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.