LED驱动
1.框架
2.完善硬件驱动:
a.看原理图
b.看2440手册
c.写代码:映射虚拟地址
3.ioremap
void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
void *ioremap(unsigned long phys_addr, unsigned long size)
入口: phys_addr:要映射的起始的IO地址;
size:要映射的空间的大小;
flags:要映射的IO空间的和权限有关的标志;
phys_addr:是要映射的物理地址,
size:是要映射的长度.
4.ioummap(*gpfcon)
5.Copy_to_user( to, &from, sizeof(from))
To:用户空间函数 (可以是数组)
From:内核空间函数(可以是数组)
sizeof(from):内核空间要传递的数组的长度
6.Copy_from_user(&from , to , sizeof(to) )
To:用户空间函数 (可以是数组)
From:内核空间函数(可以是数组)
sizeof(from):内核空间要传递的数组的长度
成功返回0,
失败返回失败数目。
7.运算符优先级:
各种运算符的优先级,至今我都没有记住,也没有打算去记这些繁琐的东西
那么我是怎么解决运算符的优先级问题的呢?
a.让表达式尽量简单,这样在同一个表达式中的运算符就比较少了,我只需要记住小学时候学习的乘除高于加减,基本上就不会遇到运算符的优先级的问题了
b.使用括号明确地表达运算顺序,不依赖于运算符的默认优先级,如果需要调整运算顺序,用括号明确表达。比如,!a&&b,我就不知道到底是先计算!还是先计算&&,但是有了括号,我想让他先先计算!就先计算!——(!a)&&b,想让他先计算&&就先计算&&——!(a&&b),根本用不着去记那些让人头疼的运算符优先级
呃,至少,位运算(bitwise operator)一定要条件反射般加上括号