GPIO管脚设置为高电位,那么它一直都是高电位
然后调试的时候,用全局变量调试速度杠杠的啊
一个局部传参给全局,然后直接从全局那边取值····· 这样比较快,尤其是驱动调试功能的时候
==代码写的太少啦,还有对硬件驱动这块的了解也还太少啦,其实就是GPIO管教配置,那么问题来了
为什么我往/sys/class/leds/brightness下输入255 然后/dev/就可以收到数值?
中间有 PC -->adb.exe --> 终端 --> dev --> led_GPIO 好像也没有那么复杂哈
基本设计流程如下:
1.先把对应需要设置的GPIO管脚设置成只有你可以操作
2.创建一个led_dev设备
3.在led_dev设备里注册一个定时器根据yaffs来设定时间频率,
1s一个周期设置
0.5s 灯从灭到亮
0.5s灯从亮到灭
4.创建一个线程在对应的定时器设置时间之后,不段的进行相同数据的写入
5.当然很重要的还是不断调试了。
6.代码设计(要清楚定时器调用频率,以及线程调用最短延迟)
定时器不断设定时间,然后创建一个线程,不段根据这个时间来进行数据的写入
1s
0.1 - 0.2 线程不断写入 00000
0.2 - 0.3 10000
0.3 - 0.4 11000
0.4 -0.5 11100
0.5 - 0.6 11110
0.6-0.7 11111
0.7-0.8 11110
0.8-0.9 11100
0.9-1.0 11000
1.0-1.1 10000
5.已知问题,线程延时函数使用的是mdelay() 这种函数会一直占着cpu,往往导致cpu占用率高达50%
但是发现,用msleep()效果又会很渣,在实验的时候发现用usleep()可以达到很好的效果
即使发现msleep(1) 与usleep(1000)的效果也完全不一样。
由于是用软件仿真pwm,而且是用单位时间内的频闪来改变光强,所以肯定没有pwm通过电压改变的来的效果好
可以学到的知识,
led设备驱动的添加
驱动线程的使用,kthread 关键是看别人怎么用的
GPIO 模拟pwm设计
内核定时器的使用,(msleep usleep udelay mdelay 这几个函数的区别)
内核延迟函数与sleep函数的区别(一个忙等待,耗cpu 一个不是,但是浪费资源)
内核模块调试技巧,全局变量调试方法
=====================
再补充一点软件代码设计的知识
代码设计架构也是,先从其他地方获取数据,然后统一保存到一个大全局结构体里。(业务需求模型,与服务器数据交互保存)
恩 这是一个普遍设计,像高通的nv,统一参数存储位置
然而知道这些又真的很有用吗? 我怀疑,结合生活使用。这都是哲学,都是生活管理吧