Microblaze 安全复位

Microblaze 安全复位

ISSUSES

VIVADO SDK 2018.3 Microblaze 软核复位后应用程序执行异常

VIVADO SDK 2018.3 Microblaze 软核复位后应用程序不执行

VIVADO SDK 2018.3 Microblaze 复位后 malloc/calloc 返回空指针

DESCRIPTION

Microblaze 复位时 BRAM 中数据会保留,CPU 复位后,应用程序将从复位向量处开始执行,.data 段用来存放程序中已初始化的全局变量和静态变量,其中的变量在程序运行后可能被修改,若程序运行需要依赖变量的初始值,则每次复位后都可能导致产生不可预测的结果

SOLUTION

Method 1

将程序复制到外部的非易失存储器内,在运行时重新将 .data 段拷贝到 RAM 中,具体见 article 30878

Method 2

修改链接脚本将程序的 .data 段复制一份,运行时从备份地址拷贝一份

lscript.ld

.data : AT ( __data_load ) {
   . = ALIGN(4);
   __data_start = .;
   *(.data)
   *(.data.*)
   *(.gnu.linkonce.d.*)
   __data_end = .;
}

...
__data_load = .;

main.c

extern unsigned char __data_load_size, __data_start, __data_end, __data_load;
//...
int main()
{
    memcpy((&__data_start), (&__data_load), ((&__data_end) -(&__data_start) + 1));
    //...
}

Related Links

malloc returns null pointer after microblaze reset

30878 - 13.1 EDK - My Software Application Operates Improperly after a CPU Reset

How to safely reset or restart execution from application on Microblaze

Microblaze User Guide

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值