上节回顾:代码写的更漂亮一些
1、用宏定义寄存器名字。
2、用b .来实现死循环
3、用.global把_start链接属性改为外部,消除警告
编译时警告信息:arm-linux-ld warning: cannot find entry symbol _start: defaulting to 00000000没有找到 _start: 因为_start的作用域是文件内。外面的文件看不见编译链接时就报错。解决办法是在_start前加(.global)把链接属性改为外部可见。
1、问题提出:如何只点亮中间1颗(两边是熄灭的)LED
分析:程序其实就是写了GPJ0CON和GPJ0DAT这2个寄存器而已,功能更改也要从这两个下手。
GPJ0CON寄存器不需要修改,GPJ0DAT中设置相应的输出值即可。
2、直接解法(不使用位运算)和它的弊端
GPJ0DAT= 0x28(十六进制)、(二进制0b00101000 ) 因为GPJ0DAT只有8个bit位。我们现在要设置的是要把中间的也就是第4位写入0两边的3和5写入1其余位不关心。
总结:(1)这样写可以完成任务
(2)这样写有缺陷。缺陷就是需要人为的去计算这个特定的设置值:而且看代码的也不容易看懂。
解决方案:在写代码时用位运算去让编译器帮我们计算这个特定值。(这里用位运算只影响编译时间,不会影响运行 时间,所以直解写法也提高不了程序运行速度)
3、常用位运算:与、或、非、移位
位与(&) 位或(|) 位非(取反~) 移位 (左移 << 右移 >>)
GPJ0DAT寄存器8bit图
一步步点亮LED4_用位运算实现复杂点亮要求
最新推荐文章于 2022-08-01 01:21:00 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)