tq2440 MMU实验收获

本实验根据《韦东山 嵌入式linux完全手册》进行.

主要参考资料:ARM920T Technical Reference Manual


1.刚开始的时候,直接把书中附带的源代码编译之后dnw到板子上了.结果发现led灯是常亮的,并不是源代码中实现的跑马灯.源代码中已经在GPBDAT = (~(i<<5))之前添加了wait()函数来减缓led变换的速度.但是好像这个wait函数并没有实现目的.看了下Makefile,原来arm-linux-gcc -Wall -O2 -c -o $@ $<当中启用了优化,把wait()这个函数直接优化掉了。

解决方案.关闭GCC优化;或者,将static inline void wait(unsigned long dly)修改为static inline void wait(volatile unsigned long dly).


2.为什么wait函数要用static inline修饰?

inline只不过是个优化而已,跟宏函数比较相似.有没有对实验效果无明显影响


static才是关键.为什么要用static?因为head.S当中对pc的操作采用了明确的地址ldr pc, =0xB0004000来调用main函数


假如不添加static,程序无法正常运行.

假如在led.C将wait函数的实现代码移到main之后,去掉static,程序正常运行.


所以更方便的方法是使用ldr  pc,=main.

注意bl main(bl 指令范围的有效范围是前后32M)所以有可能超出范围.


经过此次实验,发现还有必要学习下编译以及C程序内部结构相关的知识.





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值