1、什么是Flash Driver
考虑到汽车ECU升级过程中可能存在外部干扰导致跑飞情况,如果直接将flash擦除有关程序固化到bootloader中,有可能在汽车运行过程中导致单片机flash被擦除或篡改的可能性,严重影响汽车的功能安全,所以一般会将与flash相关的程序单独剥离出bootloader,打包作为flash driver通过上位机下发的方式给到单片机。同时,单片机在接收到完整的flash driver包并通过校验后,会将其放入ram段执行调用;当在IAP升级过程中出现异常掉电或完成升级跳转至app程序中时,在ram段中的flash driver就不复存在了。

2、实验过程
在仔细思考flash driver运行过程后,我发现想要实现功能主要有以下疑问点:①如何将driver部分代码从flash搬入ram段执行;②如何在代码中(这里指整个代码工程)没有driver代码的情况下给driver分配一块区域;③通过什么方式将driver代码写入到规定好的ram段中。
由于仅做实验用途,我选用了最简单的测试代码——LED闪烁,测试环境为AutoChips杰发的AC7840x系列单片机开发板(ARM核 编译器Keil5),将LED闪烁的代码从工程中剔除,再通过按键触发将LED闪烁代码写入ram段,实现这个测试,下面我将根据这三个疑问点分布展开:
2.1 如何将driver部分代码从flash搬入ram段执行
通过Keil5的Linker修改.sct文件实现,操作步骤如下:
2.1.1 修改c代码
在想要放入ram段执行的函数前后分别加入#pragma arm section code = "XXX"和#pragma arm section字段,其中XXX可以自命名。要注意,如果你包含的函数中存在函数的调用,建议将所有相关的函数均包含在section字段中间(初始化函数不用放入),方便我们后面进行实验。

文章讲述了FlashDriver在汽车ECU升级中的作用,以及如何通过Keil5和.sct文件将driver代码从Flash搬入RAM执行,以确保功能安全。作者通过LED闪烁实验演示了代码迁移和内存区域分配的过程。
最低0.47元/天 解锁文章
5万+





