龙芯LS1C0300B win+eclipseCPU 不运行/卡死/编译 问题

本文记录了解决MIPS架构CPU在启动时遇到的程序不运行问题。通过检查初始化代码、硬件配置及串口通信,最终发现是由于130字节数组未满足4字节对齐导致的异常。修复方法是确保数组长度为4的倍数,从而避免总线错误。这一问题揭示了MIPS平台对内存地址对齐的严格要求。
摘要由CSDN通过智能技术生成

最近遇到龙芯LS1C0300B win+eclipseCPU 不运行/卡死/编译 问题。
现象:编译完成无报错,烧写进去CPU不运行。
怀疑可能是没移植好。然后就认认真真的排查了各种初始化代码(main.c里面的代码,还有串口初始化),没问题啊;
然后测试电压晶振,都正常;
感觉CPU不应该一点都起不来吧,所以又不得不去看start.S的代码。然后发现CPU运行不正常会打印异常代码的啊,继续查看,发现打印异常代码需要用汇编驱动串口,默认是串口2,修改成串口11(我做的板子上设计的调试口是串口11,在start.S里面修改哦),不会的可以参考下图串口2修改
在这里插入图片描述
仿照这两个,写串口11即可。
然后编译,下载。打印出asm uart2 init ok!,然后又继续找这个提示信息,将2改成11,再编译下载,打印出asm uart11 init ok!,证明串口11调通了。
但不打印其他任何信息,证明CPU可以正常跑,肯定是程序不对了。然后将添加的几个文件挨个添加,屏蔽函数,一步一步操作,最后定位:u8 unxxxxx[130]; 数组。屏蔽掉就好了,不屏蔽就不运行。难道是内存满了?正好就差这个数组?那我将130修改为1,编译后也不运行;证明不是内存满的问题;
然后百度mips 的读取。发现个好东西:
(https://www.cnblogs.com/nx520zj/p/5653461.html)
[ 3.MIPS平台的地址对齐。
在 MIPS 平台上,lh 读取一个半字时,存储器的地址必须是 2 的整数倍; lw 读取一个字时,存储器的地址必须是 4的整数倍; sd 写入一个双字时,存储器的地址必须是 8 的整数倍。倘若访存时,目标地址不对齐,则会引起异常,典型的是系统提示“总线错误”后,直接杀死进程。]
原来是4的倍数才行,将130改成4,编译后成功运行,改成256,也是成功运行,因为刚开始是130,2的倍数,不能运行;所以证明的确是4字节对齐的原因。
为什么是4字节对齐?可能是mips本身架构的原因,也可能是编译优化的原因。编译后将变量存储到了奇数的地址或者 是一个四字节地址中的第二或者第三字节的位置,那肯定会发生数据错位,那么CPU就可能跑飞了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值