从 RX24T 到 RX26T:一次芯片移植的完整复盘

技术笔记  ·  2026-09-11

上个月把一台量产逆变器的控制板从瑞萨 RX24T 挪到了 RX26T,业务逻辑一行没动,全是底层功夫。复盘一下,给同样要跨内核移植的朋友省点时间。

移植前先画"差异地图"

不要上来就改代码。我先把三份手册摆在桌上:RX24T 用户手册、RX26T 用户手册、还有官方的差异说明(R01AN6502),逐项过一遍外设清单,标出三类:照搬 / 改寄存器 / 重新设计。时钟树是重灾区——24T 与 26T 的 PLL 倍频路径不同,我们锁 80MHz 主频的前提下,PCLKA-D 与 FCLK 的分频全要重排。

中断向量与启动文件

RX 系列的向量表是链接段问题的高发地。 old 工程里有依赖数组段摆放的代码,在新工程里直接换成了显式函数指针表,避免链接器把段合并顺序改了之后中断跳错门。

/* 显式向量注册,替代依赖段顺序的写法 */
void *const g_vectors[] = {
    (void *)stack_top,
    PowerON_Reset_PC,        /* reset */
    (void *)0,               /* reserved */
    isr_mtu0_underflow,      /* SPWM 载波 */
};

时钟与外设时钟门控

26T 外设多了独立的门控位,初始化顺序错了会读回全 0。我们的经验是外设初始化函数第一行先开时钟门控,最后一行再自检一遍寄存器复位值,不符合预期直接停在断言里。

踩过的坑

  • 浮点:26T 带 FPU,但启动文件没开 FPCCR 时,硬浮点指令直接进 Fault;
  • 位带操作别名区两代地址不同,宏别照抄;
  • 编译器从 V2 升到 V3 后,const 常量默认进 CDcmp 段,老链接脚本要补段定义。

总结:移植不是"改寄存器",是把依赖芯片的假设全部显式化。地图画得越细,后面返工越少。

评论已关闭
wen 的博客. All Rights Reserved. Theme Jasmine by Kent Liao.
本站总访问  ·  访客