led GPIO设置pwm 呼吸灯(效果并不好,耗电)

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,统一参数存储位置

然而知道这些又真的很有用吗? 我怀疑,结合生活使用。这都是哲学,都是生活管理吧

原文地址:https://www.cnblogs.com/asreg/p/6649579.html