-
- 拷贝代码及数据到RAM CopyCodeToRam ()
28xx的FLASH按扇区操作,但除正在操作的扇区外,其他扇区同样不可读。因而在开始程序刷新后,所有代码都必须在RAM里运行。而代码是存储在FLASH中,在开始程序刷新之前,应该把刷新相关的代码拷贝到RAM中。
刷新相关代码包括:
- 诊断网络层代码(15765-2)
- 诊断层代码(uds)
- 看门狗服务
- FLASH操作接口代码
- 定时器代码
- 中断服务程序
刷新相关的代码拷贝到RAM后,从RAM开始执行刷新程序。
|
函数原型 |
Void CopyCodeToRam(void) |
|
函数作用 |
把代码从FLASH拷贝到RAM |
|
函数参数 |
无 |
|
函数说明 |
被main()调用。 |
表10 函数bblk_pre_run_from_ram ()说明
MCU硬件看门狗的周期为25毫秒(依赖于硬件设计,TBD)。
MCU软件看门狗的周期20毫秒(TBD)。
使能软件看门狗(周期TBD)。
由于软件看门狗服务bblk_kick_sw_wd()会连续两次写相同的寄存器,故代码应用汇编编写,以免被优化器优化,从而导致软件看门狗失败。
相关函数说明如下:
|
函数原型 |
void bblk_enable_sw_wd(void) |
|
函数作用 |
使能DSP软件看门狗 |
|
函数参数 |
无 |
|
函数说明 |
被bblk_run_from_ram()调用 |
|
函数原型 |
void bblk_disable_sw_wd(void) |
|
函数作用 |
禁止DSP软件看门狗 |
|
函数参数 |
无 |
|
函数说明 |
被bblk_run_from_ram ()调用 |
|
函数原型 |
void bblk_kick_sw_wd (void) |
|
函数作用 |
软件看门狗服务 |
|
函数参数 |
无 |
|
函数说明 |
被bblk_kick_watchdog ()调用 |
|
函数原型 |
void bblk_kick_hw_wd (void) |
|
函数作用 |
硬件看门狗服务 |
|
函数参数 |
无 |
|
函数说明 |
被bblk_kick_watchdog ()调用 |
|
函数原型 |
void bblk_kick_watchdog (void) |
|
函数作用 |
看门狗服务,包括硬件狗和软件狗 |
|
函数参数 |
无 |
|
函数说明 |
被bblk_run_from_ram ()调用 |
由于进行Flash擦除及编程等操作时需要的时间很长,所以用定时器中断来执行看门狗服务。
定时器溢出时间为10毫秒(依赖于看门狗,TBD)。
|
函数原型 |
void bblk_init_timer (void) |
|
函数作用 |
初始化定时器 |
|
函数参数 |
无 |
|
函数说明 |
被start_task_timer()调用 |
|
函数原型 |
void bblk_set_timer_period (void) |
|
函数作用 |
设置定时器时间 |
|
函数参数 |
无 |
|
函数说明 |
被start_task_timer()调用 |
表19 函数bblk_set_timer_period ()说明
|
函数原型 |
void bblk_start_task_timer (void) |
|
函数作用 |
设置定时器时间 |
|
函数参数 |
无 |
|
函数说明 |
被bblk_run_from_ram()调用 |
表20 函数bblk_start_task_timer ()说明
进入FLASH操作前,调用bblk_enter_flashing()将定时器中断服务函数切换到bblk_enter_flashing_isr()。
完成FLASH操作后,调用bblk_post_flashing()将定时器中断函数切换到bblk_normal_isr()。
|
函数原型 |
void bblk_enter_flashing(bool use_flashing_isr) |
|
函数作用 |
切换定时器中断服务函数 |
|
函数参数 |
use_flashing_isr:是否切换到bblk_enter_flashing_isr() |
|
函数说明 |
在进行FALSH操作前调用 |
表21 函数bblk_enter_flashing ()说明
|
函数原型 |
void bblk_post_flashing(void) |
|
函数作用 |
切换定时器中断服务函数到bblk_normal_isr()。 |
|
函数参数 |
无 |
|
函数说明 |
在进行FALSH操作前调用 |
|
函数原型 |
void bblk_enter_flashing_isr(void) |
|
函数作用 |
完成看门狗服务,清楚定时器中断标志位,调用到bblk_enter_flashing_isr() |
|
函数参数 |
无 |
|
函数说明 |
中断服务程序。如果FLASH操作时间过长,则在中断服务中调用网络层函数。 |
表23 函数bblk_enter_flashing_isr ()说明
|
函数原型 |
void bblk_normal_isr(void) |
|
函数作用 |
完成看门狗服务,清楚定时器中断标志位 |
|
函数参数 |
无 |
|
函数说明 |
中断服务程序 |
文章描述了在28xx系列芯片上,由于FLASH在更新时的限制,需要将相关代码复制到RAM中执行。这个过程涉及诊断网络层、UDS、看门狗服务、FLASH操作接口、定时器和中断服务程序。在更新过程中,启用看门狗服务,包括硬件和软件看门狗,以防止程序冻结。此外,使用定时器中断来定期服务看门狗,并在进入和退出FLASH操作时切换中断服务函数。
643

被折叠的 条评论
为什么被折叠?



