play是什么牌子| 厄警失痣是什么意思| ira是什么品牌| 一个均一个金念什么| 哈密瓜为什么叫哈密瓜| 排酸肉是什么意思| 三十年婚姻是什么婚| degaia是什么牌子| 什么是理数| 检车需要什么手续| 贫血会引起什么症状| 屋后有坟有什么影响吗| 婚检检查什么| 1月26号是什么星座| cip号是什么| 感冒吃什么水果好| 艾滋病检查什么项目| 12月13号什么星座| 甲减要多吃什么食物好| 三下乡是什么意思| 绿本是什么| 胎儿右肾盂分离是什么意思| 茄子吃多了有什么坏处| 小狗不能吃什么| 看血管挂什么科| 为什么晚上不能照镜子| 鱼跃龙门是什么意思| 失眠睡不着是什么病| 汗斑用什么药| 虫至念什么| 高频是什么意思| 牛后腿肉适合做什么| 凤字五行属什么| 七月十六是什么星座| 做活检前要注意什么| 2月份生日是什么星座| 长江后浪推前浪是什么生肖| 心衰吃什么食物好| 观音土是什么| 看花灯是什么节日| 女人左眼下有痣代表什么| 阴道炎用什么药| 12月1日是什么意思| 八0年属什么生肖| 茯茶属于什么茶| 锦衣卫是干什么的| 2001年属蛇五行属什么| 静脉曲张挂什么号| 土霉素主要是治疗什么病| 梦见黑熊是什么预兆| 什么草地| 发烧吃什么水果| 打哈哈是什么意思| 乳胶是什么意思| 男人前列腺在什么位置| 两栖动物是什么意思| 尿路感染需要做什么检查| 貂蝉原名叫什么| 欲言又止是什么意思| 喉咙痛吃什么药好得最快| 省公安厅厅长什么级别| 六味地黄丸治什么病| 夏天吹空调感冒了吃什么药| 奇亚籽有什么功效| 刺梨果有什么功效| 小三阳和大三阳有什么区别| 翼龙吃什么食物| 祭司是干什么的| 什么叫黑户| 为什么一同房就出血| 为什么会出现眼袋| 发烧喝什么汤| 一直打哈欠是什么原因| 未成年喝酒有什么危害| 代茶饮是什么意思| 产后恶露是什么| 间作套种是什么意思| 无机盐包括什么| 冠状沟是什么| 戊日是什么意思| 取环后月经量少是什么原因| 什么是脑白质病| 旋转跳跃我闭着眼是什么歌| 囧途什么意思| 宝宝发烧是什么原因引起的| nt检查什么| 红色和什么颜色搭配好看| 液金是什么| 被cue是什么意思| 周边是什么意思| 梦见大火烧山是什么意思| 坐骨神经痛吃什么药好| hr是什么意思| ras医学上是什么意思| 汉语拼音是什么时候发明的| 恨天高是什么意思| 隐形眼镜什么牌子好| 蝉的鸣叫声像什么| 顺丰为什么这么快| 天什么地| 血小板平均体积偏高是什么意思| 2013年五行属什么| 什么空如洗| 吃坏东西拉肚子吃什么药| 姑爷是什么意思| 解脲脲原体阳性是什么病| 农历12月26日是什么星座| hrd是什么职位| mr是什么的缩写| 尿常规隐血弱阳性什么意思| 血管瘤是什么病严重吗| 柱镜度数是什么意思| 螳螂代表什么生肖| 梦到吃苹果是什么意思| 腱鞘炎吃什么药好使| 外聘是什么意思| 郝字五行属什么| 一什么牙刷| 右肺下叶钙化灶是什么意思| 什么的知了| 副高是什么职称| 为什么会下雨| 智齿疼吃什么药最管用| 冬枣为什么叫冬枣| 王安石是什么朝代的| 现在买什么股票好| 肾是干什么用的| 02年是什么命| 拔河是什么意思| 多彩的什么| 柳仙是什么仙| 手足口不能吃什么食物| 啪啪啪什么意思| 荨麻疹是什么引起| 兰蔻是什么牌子| 乌龟都吃什么| ug是什么单位| 宝宝发烧手脚冰凉是什么原因| 美国总统叫什么名字| 吃什么降胆固醇最快| 奈何桥是什么意思| 夫复何求是什么意思| 一个壳一个心念什么| 眼睛散瞳有什么危害| 芹菜榨汁有什么功效| 嘴干是什么病的征兆| 五服是什么意思| 盐和小苏打一起有什么作用| 二脚趾比大脚趾长代表什么| 什么是同房| 肌张力障碍是什么病| 酒糟是什么| 最大的恐龙是什么恐龙| 清欢渡是什么意思| 女士喝什么茶叶对身体好| sop是什么意思| 做人流挂什么科| 中暑吃什么好| 痣是什么| 996是什么意思| 日的偏旁有什么字| 什么枝什么叶| 旭五行属性是什么| 中出是什么意思| 结婚12年是什么婚| 下馆子什么意思| 素鸡是什么| 拍拖是什么意思| 高笋和茭白有什么区别| 拔完智齿可以吃什么| 巴士是什么意思| hp阳性是什么意思| 六块钱的麻辣烫是什么意思| 泳帽什么材质的好| 牙龈疼是什么原因| 滑膜炎用什么药治疗最好最快| 狸猫换太子什么意思| 女性脉弦是什么意思| 尿常规能查出什么| 眼睛近视缺什么维生素| 被老鼠咬了打什么疫苗| 蒙奇奇是什么动物| 文化传媒是干什么的| 四面楚歌是什么意思| 射精太快吃什么好| 6月21是什么星座| 多囊什么意思| fila是什么牌子| 身体发热是什么原因| 老是打嗝是什么病的征兆| 脱氢酶高是什么原因| 子衿什么意思| 烤麸是什么做的| 什么时候喝咖啡最好| 睡莲和碗莲有什么区别| 玲珑什么| 番茄和西红柿有什么区别| 梦到洗衣服是什么意思| 一生一世是什么生肖| 手淫导致的阳痿早泄吃什么药| 2月份生日是什么星座| 甘油三酯高应该注意什么| 水鸭是什么鸭| 无国界医生是什么意思| alb医学上是什么意思| 什么是低碳饮食| 胃泌素瘤是什么意思| balmain什么档次| 什么叫钙化| 6月12号是什么星座| 长白头发了吃什么才能把头发变黑| 固摄是什么意思| 月经不来又没怀孕是什么原因| 在什么之前的英文| 12月10日什么星座| 肌肉疼痛吃什么药| 右眼跳是什么兆头| 新晋是什么意思| 吹是什么意思| 紧迫感是什么意思| 油性皮肤适合用什么牌子的护肤品| 丝瓜不能和什么一起吃| 属羊的本命佛是什么佛| trab是甲状腺什么指标| 川芎的功效与作用是什么| 白玫瑰的花语是什么| 什么叫985| 奥利司他排油是什么油| 775是什么意思| 青青子衿什么意思| 1950年属虎的是什么命| 什么情况下需要做心脏造影| 金牛座前面是什么星座| 什么手串最好| 乐可是什么| 胚由什么发育而来| 肠系膜淋巴结肿大吃什么药| 同学过生日送什么礼物好| 当你从我眼前慢慢走过是什么歌| 土茯苓和什么煲汤最好| 鸡肠炎用什么药效果好| 什么的水流| 螳螂吃什么| 煊是什么意思| 牙齿出血是什么病征兆| 怕冷畏寒是什么原因| 动物的脖子有什么作用| 非典是什么病| 7代表什么意思| 恶露是什么东西| 什么是低保户| 猫吃什么| 什么是一二三级医院| 火字旁的字有什么| 攻是什么意思| 背沟深代表什么| 物极必反什么意思| 食管裂孔疝是什么意思| iqr是什么意思| 男人阳气不足有什么症状| 松针是什么| 梦见打仗是什么意思| 吃什么下火效果最好| 梦见办酒席是什么意思| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 活动中心 ? 板卡试用 ? 【分享开发笔记,赚取电动螺丝刀】【S32K314】芯片启动流程分析

共4条 1/1 1 跳转至

【分享开发笔记,赚取电动螺丝刀】【S32K314】芯片启动流程分析 20

高工
2025-08-04 08:55:14   被打赏 40 分(兑奖)     打赏
百度 但这些表现与其他一些腹部疾病具有相似性,如急性胆囊炎、胃十二指肠溃疡穿孔、急性阑尾炎等,若非专业医师,很容易漏诊误诊。

【简介】

我们在之前介绍了S32K146 的使用方法,S32K系列哟那个的比较多的已经是S32K3系列,我们基于S32K314 芯片先熟悉下对应的启动代码.

step1. 启动代码的第开始是关闭中断,初始化通用寄存器R0-R7为0

_start:
Reset_Handler:
/*****************************************************/
/* Skip normal entry point as nothing is initialized */
/*****************************************************/
 cpsid i
 mov   r0, #0
 mov   r1, #0
 mov   r2, #0
 mov   r3, #0
 mov   r4, #0
 mov   r5, #0
 mov   r6, #0
 mov   r7, #0

step2 使能MSCM控制的时钟信号,本段代码首先检查MSCM 的时钟状态是否开启,如果未开启则通过MC_ME(Mode Entry Module
) 的MCME_PRINT1_C0FB0_CLKEN 寄存器开启时钟

#ifndef NO_MSCM_CLOCK_INIT
InitMSCMClock:
  /* If the MSCM clock is enabled, skip this sequence */
  ldr r0, =MCME_PRTN1_COFB0_STAT
  ldr r1, [r0]
  ldr r2, =MCME_MSCM_REQ
  and r1, r1, r2
  cmp r1, 0
  bne SetVTOR

  /* Enable clock in PRTN1 */
  ldr r0, =MCME_PRTN1_COFB0_CLKEN
  ldr r1, [r0]
  ldr r2, =MCME_MSCM_REQ
  orr r1, r2
  str r1, [r0]

  /* Set PUPD field */
  ldr r0, =MCME_PRTN1_PUPD
  ldr r1, [r0]
  ldr r2, =1
  orr r1, r2 
  str r1, [r0]

  /* Trigger update */
  ldr r0, =MCME_CTL_KEY
  ldr r1, =MCME_KEY
  str r1, [r0]
  ldr r1, =MCME_INV_KEY
  str r1, [r0]
#endif
/* Check MSCM clock in PRTN1 */
WaitForClock:
  ldr r0, =MCME_PRTN1_COFB0_STAT
  ldr r1, [r0]
  ldr r2, =MCME_MSCM_REQ
  and r1, r1, r2
  cmp r1, 0
  beq WaitForClock

MSCM 的时钟信号对应MCME 控制寄存器的bit 24 位来控制。

image.png

MSCM 包含了系统的很多关键寄存器的访问 所以要确保打开MSCM 的时钟

image.png

未开启MSCM的时钟前对应的寄存器是无法访问的

image.png

以下流程图是手册中对MC_ME 时钟配置的流程说明图,跟上述代码流程是一致的代码中未进行PUPD 的状态判断,直接等待的MSCM 的时钟状态位enable.

step3 更新中断向量表指向内存区域

SetVTOR:
/* relocate vector table to RAM */
ldr  r0, =VTOR_REG
ldr  r1, =__RAM_INTERRUPT_START
str  r1,[r0]

__RAM_INTERRUPT_START 的位置在link file中进行定义

image.png

image.png

step4 根据coreid 来设置core 的MSP 指针,配置好SP指针后就可以来调用C函数了

/*GetCoreID*/
ldr  r0, =0x40260004
ldr  r1,[r0]

ldr  r0, =MAIN_CORE
cmp  r1,r0
beq  SetCore0Stack
b SetCore1Stack

SetCore0Stack:
  /* set up stack; r13 SP*/
  ldr  r0, =__Stack_start_c0
  msr MSP, r0
  b DisableSWT0
  
SetCore1Stack:
  /* set up stack; r13 SP*/
  ldr  r0, =__Stack_start_c1
  msr MSP, r0

__Stack_start_c0/__Stack_start_c1 的定义在link 文件中进行定义

image.png

step5 对 SRAM进行初始化,来更新ECC 

RamInit:
    /* Initialize SRAM ECC */
    ldr  r0, =__RAM_INIT
    cmp  r0, 0
    /* Skip if __SRAM_INIT is not set */
    beq SRAM_LOOP_END
    ldr r1, =__INT_SRAM_START
    ldr r2, =__INT_SRAM_END
    
    subs    r2, r1
    subs    r2, #1
    ble SRAM_LOOP_END

    movs    r0, 0
    movs    r3, 0
SRAM_LOOP:
    stm r1!, {r0,r3}
    subs r2, 8
    bge SRAM_LOOP
SRAM_LOOP_END:

对整个SRAM 区域进行初始化

image.png

step6 初始化ITCM来更新ECC

ITCM_Init:
    /* Initialize ITCM ECC */
    ldr  r0, =__ITCM_INIT
    cmp  r0, 0
    /* Skip if __TCM_INIT is not set */
    beq ITCM_LOOP_END

    /* Enable TCM */
    LDR r1, =CM7_ITCMCR
    LDR r0, [r1]
    LDR r2, =0x1
    ORR r0, r2
    STR r0, [r1]

    ldr r1, =__INT_ITCM_START
    ldr r2, =__INT_ITCM_END
    
    subs    r2, r1
    subs    r2, #1
    ble ITCM_LOOP_END

    movs    r0, 0
    movs    r3, 0
ITCM_LOOP:
    stm r1!, {r0,r3}
    subs r2, #8
    bge ITCM_LOOP
ITCM_LOOP_END:


image.png

step7 初始化DTCM

DTCM_Init:
    /* Initialize DTCM ECC */
    ldr  r0, =__DTCM_INIT
    cmp  r0, 0
    /* Skip if __DTCM_INIT is not set */
    beq DTCM_LOOP_END
    /* Enable TCM */
    LDR r1, =CM7_DTCMCR
    LDR r0, [r1]
    LDR r2, =0x1
    ORR r0, r2
    STR r0, [r1]

    ldr r1, =__INT_DTCM_START
    ldr r2, =__INT_DTCM_END
    
    subs    r2, r1
    subs    r2, #1
    ble DTCM_LOOP_END

    movs    r0, 0
    movs    r3, 0
DTCM_LOOP:
    stm r1!, {r0,r3}
    subs r2, #8
    bge DTCM_LOOP
DTCM_LOOP_END:

 stsp 8 初始化DATA 段和 bss 段数据

/************************/
/* Erase ".bss Section" */
/************************/
_DATA_INIT:
#ifndef RAM_DATA_INIT_ON_ALL_CORES
    /* If this is the primary core, initialize data and bss */
    ldr  r0, =0x40260004
    ldr  r1,[r0]

    ldr  r0, =MAIN_CORE
    cmp  r1,r0
    beq  _INIT_DATA_BSS
    b    __SYSTEM_INIT
#endif

_INIT_DATA_BSS:
  bl init_data_bss

step9 调用SystemInit 函数进行系统初始化

/******************************************************************/
/* Autosar Guidance 10 - In the start-up code a default           */
/* initialization of the MCU clock system shall be performed      */
/* including global clock prescalers.                             */
/******************************************************************/
__SYSTEM_INIT:
  bl SystemInit
/*================================================================================================*/
/*
 * system initialization : system clock, interrupt router ...
 */


void SystemInit(void)
{
    uint32 i;
    uint32 coreMask = 0UL;
    uint8 coreId = OsIf_GetCoreID();
#ifdef MPU_ENABLE
    uint8 index = 0U;
    uint8 regionNum = 0U;
#endif /* MPU_ENABLE */    
    switch(coreId)
    {
        case CM7_0:
            coreMask = (1UL << MSCM_IRSPRC_M7_0_SHIFT);
            break;
        case CM7_1:
#ifdef S32K324
            coreMask = (1UL << MSCM_IRSPRC_M7_1_SHIFT);
#endif
            break;
        default:
            coreMask = 0UL;
            break;
    }

    /* Configure MSCM to enable/disable interrupts routing to Core processor */
    for (i = 0; i < MSCM_IRSPRC_COUNT; i++) 
    {
        IP_MSCM->IRSPRC[i] |= coreMask;
    }
/**************************************************************************/
                      /* FPU ENABLE*/
/**************************************************************************/
#ifdef ENABLE_FPU
    /* Enable CP10 and CP11 coprocessors */
    S32_SCB->CPACR |= (S32_SCB_CPACR_CPx(10U, 3U) | S32_SCB_CPACR_CPx(11U, 3U)); 

    ASM_KEYWORD("dsb");
    ASM_KEYWORD("isb");
#endif /* ENABLE_FPU */
/**************************************************************************/
                      /* MPU ENABLE*/
/**************************************************************************/  
#ifdef MPU_ENABLE
/**************************************************************************/
                      /* DEFAULT MEMORY ENABLE*/
/**************************************************************************/
    /* Init MPU table for memory layout*/
    /* Cover all memory on device as background set all memory as strong-order and no access*/
    rbar[0]=0x00000000UL;
    rasr[0]=0x1004003FUL;
    
    /* ITCM for cortex M7 if no set it as zero */
    rbar[1]=(uint32)__INT_ITCM_START;
    rasr[1]=0x0104001FUL;
    /*Program flash which would extract from linker symbol*/
    rbar[2]=(uint32)__ROM_CODE_START;
    rasr[2]=0x060B002BUL; 

    /*Data flash which would extract from linker symbol*/
    rbar[3]=(uint32)__ROM_DATA_START;
    rasr[3]=0x16050023UL;  /* Device, Non-cache, Share */
    
    /*DTCM for cortex m7 if no set it as zero*/
    rbar[4]=(uint32)__INT_DTCM_START;
    rasr[4]=0x01040021UL; 
    
    /*Ram unified section  + stack*/
#if !defined(S32K344) && !defined(S32K324)
    rbar[5]=(uint32)__INT_SRAM_START;
    rasr[5]=((uint32)0x030B0001UL)|(((uint32)__RAM_CACHEABLE_SIZE - 1) << 1);   
#else
    rbar[5]=(uint32)__INT_SRAM_START;
    /*disable subregion 7-8*/
    rasr[5]=((uint32)0x030B0001UL)|(((uint32)__RAM_CACHEABLE_SIZE - 1) << 1)|(1<<15)|(1<<14); 
#endif
    
    /*Ram non-cache section plus int result which is using for test report*/
    rbar[6]=(uint32)__RAM_NO_CACHEABLE_START;
    rasr[6]= ((uint32)0x130C0001UL)|(((uint32)__RAM_NO_CACHEABLE_SIZE - 1) << 1);

    /*Ram shareable section*/
    rbar[7]=(uint32)__RAM_SHAREABLE_START;
    rasr[7]=((uint32)0x130C0001UL)|(((uint32)__RAM_SHAREABLE_SIZE - 1) << 1);
    /* Additional configuration for peripheral device*/
    
    /*AIPS_0*/
    rbar[8]=0x40000000UL;
    rasr[8]=0x13050029UL; 
    
    /*AIPS_1*/
    rbar[9]=0x40200000UL;
    rasr[9]=0x13050029UL; 
    
    /*AIPS_2*/
    rbar[10]=0x40400000UL;
    rasr[10]=0x13050029UL; 
    
    /*QSPI Rx*/
    rbar[11]=0x67000000UL;
    rasr[11]=0x13050013UL; 
    
    /*QSPI AHB*/
    rbar[12]=0x68000000UL;
    rasr[12]=0x030B0035UL;
    
    /*QSPI AHB*/
    rbar[13]=0xE0000000UL;
    rasr[13]=0x13040027UL;
    
    ASM_KEYWORD("dsb");
    ASM_KEYWORD("isb");

    /*Checking if cache is enable before*/
    if (((((uint32)1U << (uint32)17U) & S32_SCB->CCR) != (uint32)0) || ((((uint32)1U << (uint32)16U) & S32_SCB->CCR) != (uint32)0))
    {
 /*synchronize cache before update mpu */
        sys_m7_cache_clean();
        sys_m7_cache_disable();
    }
    /* Set default memory regions */
    for (index = 0U; index < 15; index++)
    {
        if ((rasr[index]&(uint32)0x1) == (uint32)0x1)
        {
            S32_MPU->RNR  = regionNum;
            S32_MPU->RBAR = rbar[index];
            S32_MPU->RASR = rasr[index];
            regionNum++;
        }
    }

    /* Enable MPU */
    S32_MPU->CTRL |= S32_MPU_CTRL_ENABLE_MASK;

    ASM_KEYWORD("dsb");
    ASM_KEYWORD("isb");

#endif /* MPU_ENABLE */
/**************************************************************************/
            /* ENABLE CACHE */
/**************************************************************************/
#if defined(D_CACHE_ENABLE) || defined(I_CACHE_ENABLE)
    sys_m7_cache_init();
#endif /*defined(D_CACHE_ENABLE) || defined(I_CACHE_ENABLE)*/    
}


/* Cache apis which are using for cache initilization, please make sure MPU is enable before calling these apis. Due to limitation of speculative access on cortex m7, MPU need to be initialized before enable cache. So if user specify -DDISABLE_MPUSTARTUP, cache will be disable in startup as well. If user want to enable cache again please call cache api after RM_init() or MPU_init() */

static INLINE void sys_m7_cache_init(void)
{     
#ifdef D_CACHE_ENABLE   
    uint32 ccsidr = 0U;
    uint32 sets = 0U;
    uint32 ways = 0U;

   
    /*init Data caches*/
    S32_SCB->CSSELR = 0U;                       /* select Level 1 data cache */
    ASM_KEYWORD("dsb");
    ccsidr = S32_SCB->CCSIDR;
    sets = (uint32)(CCSIDR_SETS(ccsidr));
    do {
      ways = (uint32)(CCSIDR_WAYS(ccsidr));
      do {
        S32_SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) |
                      ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk)  );  
        ASM_KEYWORD("dsb");
      } while (ways-- != 0U);
    } while(sets-- != 0U);
    ASM_KEYWORD("dsb");
    S32_SCB->CCR |=  (uint32)SCB_CCR_DC_Msk;  /* enable D-Cache */
    ASM_KEYWORD("dsb");
    ASM_KEYWORD("isb");
#endif /*D_CACHE_ENABLE*/

#ifdef I_CACHE_ENABLE  
    /*init Code caches*/
    ASM_KEYWORD("dsb");
    ASM_KEYWORD("isb");
    S32_SCB->ICIALLU = 0UL;                     /* invalidate I-Cache */
    ASM_KEYWORD("dsb");
    ASM_KEYWORD("isb");
    S32_SCB->CCR |=  (uint32)SCB_CCR_IC_Msk;  /* enable I-Cache */
    ASM_KEYWORD("dsb");
    ASM_KEYWORD("isb");
#endif /*I_CACHE_ENABLE*/

}


static INLINE void sys_m7_cache_disable(void)
{        
    sys_m7_cache_clean();
    S32_SCB->CCR &= ~((uint32)1U << 17U);
    ASM_KEYWORD("dsb");
    ASM_KEYWORD("isb");
    S32_SCB->CCR &= ~((uint32)1U << 16U);
    ASM_KEYWORD("dsb");
    ASM_KEYWORD("isb");
}


static INLINE void sys_m7_cache_clean(void)
{  
#ifdef D_CACHE_ENABLE
    uint32 ccsidr = 0U;
    uint32 sets = 0U;
    uint32 ways = 0U;
    
    S32_SCB->CSSELR = 0U;                       /* select Level 1 data cache */
    ASM_KEYWORD("dsb");
    ccsidr = S32_SCB->CCSIDR;
    sets = (uint32)(CCSIDR_SETS(ccsidr));
    do {
      ways = (uint32)(CCSIDR_WAYS(ccsidr));
      do {
        S32_SCB->DCCISW = (((sets << 5) & (uint32)0x3FE0U) |
                      ((ways << 30) & (uint32)0xC0000000U)  );  
        ASM_KEYWORD("dsb");
      } while (ways-- != 0U);
    } while(sets-- != 0U);
    
    S32_SCB->CSSELR = (uint32)((S32_SCB->CSSELR) | 1U);
#endif /*D_CACHE_ENABLE*/

#ifdef I_CACHE_ENABLE      
    S32_SCB->ICIALLU = 0UL;
#endif /*I_CACHE_ENABLE*/    
    ASM_KEYWORD("dsb");
}

该函数会根据配置宏开启cahche 及配置MPU 属性信息等

step 10  开启中断跳转到main 函数从而完成启动

/******************************************************************/
/* Call Main Routine                                              */
/******************************************************************/
_MAIN:
  cpsie i
  bl startup_go_to_user_mode
  bl main



专家
2025-08-04 09:30:33     打赏
2楼

汇编和C的混合,有难度。谢谢分享!


工程师
2025-08-04 16:19:00     打赏
3楼

综合系统分析的很好,有没有一些其他的应用场景? 比如说启动的时候判断寄存器触发OTA更新一类的


专家
2025-08-04 08:23:03     打赏
4楼

一个系统的启动很重要。当年看6410的时候,这个地方也花了很长时间。感谢楼主分享。


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
狗狗发抖是什么原因 公章一般是什么字体 减肥晚餐吃什么好 早晨起来嘴苦是什么原因 太上皇是什么意思
胃胀吃什么水果 心悸是什么原因引起的 香蕉与什么食物相克 牛鞭是什么东西 人体成分分析是检查什么
眼皮发肿是什么原因 甘油三酯高会引起什么病 迎春花什么时候开 跳闸是什么原因 什么是白虎
痛风急性期吃什么药 1990年是什么命 clinique是什么牌子的化妆品 2020年什么年 小孩表演后卸妆用什么
男人高冷是什么意思啊hcv8jop0ns6r.cn 儿童补钙吃什么hcv8jop3ns4r.cn 脚肿什么病hcv9jop1ns7r.cn 1909年属什么生肖hcv8jop4ns2r.cn 梦见手链断了是什么意思hcv8jop7ns4r.cn
同房后为什么会出血hcv7jop5ns3r.cn 大便为什么是黑色的是什么原因hcv9jop0ns4r.cn 什么叫眩晕hcv8jop5ns8r.cn 肝脏彩超能检查出什么xinmaowt.com 肺纤维化什么意思hcv8jop1ns3r.cn
高危病变是什么意思hcv7jop6ns4r.cn 用激素药有什么副作用xinjiangjialails.com 节肢动物用什么呼吸hcv8jop1ns1r.cn 每天半夜两三点醒是什么原因hcv8jop3ns7r.cn 清朝为什么会灭亡cl108k.com
为什么十二生肖老鼠排第一imcecn.com 做腹腔镜手术后需要注意什么hcv7jop5ns4r.cn 梦到前女友征兆是什么mmeoe.com 脾的作用是什么hcv9jop0ns8r.cn 想飞上天和太阳肩并肩是什么歌hcv8jop0ns7r.cn
百度