今天依据最新的需求要对LED灯的提示闪烁频率进行改动,将之前默认的2000ms改为10000ms,可是改动之后没有产生预料中的效果,而是变成了常量,百思不得其解,最后还是read the fucking code,从上层究竟层,一路追下来,终于发现了问题所在,以下直接上MTK的LED driver代码:


#define PMIC_PERIOD_NUM 9
// 100 * period, ex: 0.01 Hz -> 0.01 * 100 = 1
int pmic_period_array[] = {250,500,1000,1250,1666,2000,2500,10000};
//int pmic_freqsel_array[] = {99999, 9999, 4999, 1999, 999, 499, 199, 4, 0};
int pmic_freqsel_array[] = {0, 4, 199, 499, 999, 1999, 1999, 1999};static int find_time_index_pmic(int time_ms) {int i;for(i=0;i<PMIC_PERIOD_NUM;i++) {if(time_ms<=pmic_period_array[i]) {return i;} else {continue;}}return PMIC_PERIOD_NUM-1;
}int mt_led_blink_pmic(enum mt65xx_led_pmic pmic_type, struct nled_setting* led) {int time_index = 0;int duty = 0;LEDS_DEBUG("[LED]led_blink_pmic: pmic_type=%d\n", pmic_type);if((pmic_type != MT65XX_LED_PMIC_NLED_ISINK0 && pmic_type!= MT65XX_LED_PMIC_NLED_ISINK1 &&pmic_type!= MT65XX_LED_PMIC_NLED_ISINK2 && pmic_type!= MT65XX_LED_PMIC_NLED_ISINK3) || led->nled_mode != NLED_BLINK) {return -1;}LEDS_DEBUG("[LED]LED blink on time = %d offtime = %d\n",led->blink_on_time,led->blink_off_time);time_index = find_time_index_pmic(led->blink_on_time + led->blink_off_time);LEDS_DEBUG("[LED]LED index is %d  freqsel=%d\n", time_index, pmic_freqsel_array[time_index]);duty=32*led->blink_on_time/(led->blink_on_time + led->blink_off_time);

从以上代码除了能够看到其本来就不支持1999ms以上的闪烁频率之外,还看到了另外一个问题,就是新手常常发生的数组越界问题,没有採取不论什么的訪问保护。

转载于:https://www.cnblogs.com/mengfanrong/p/4310673.html

由一个LED闪烁问题发现的MTK的LED driver中存在的问题相关推荐

  1. 嵌入式开发学习笔记9-做一个好玩的LED闪烁

    嵌入式开发学习笔记9-做一个好玩的LED闪烁 前言 实际操作 程序功能 实现思路 程序源码 实现效果展示 前言 LED小灯闪烁实质是控制单片机上的I/O口,通过向I/O口循环输入高低电平,从而控制LE ...

  2. 【STC8学习笔记】STC8A8K64S4A12 程序烧录及使一个LED闪烁

    将STC8芯片型号添加到keil中 新建keil工程选择对应的芯片 我这里已我的STC8A8K64S4A12芯片为例 编写程序一个LED闪烁的程序 #include <STC8.h>sbi ...

  3. 使用STM32cubeMX写一个简单的LED闪烁

    非常简单的一个LED闪烁 希望对大家有所帮助 本人也是初接触cubeMX 之前一直用MDK标准库来写 朋友推荐了这玩意 便拿来试试 这玩意某些地方确实方便 而且ST公司好像16年就不再更新标准库了 所 ...

  4. 一个按键控制LED闪烁与关闭(定时器中断)

    来源: 单片机简单程序_zhjysx的博客-CSDN博客https://blog.csdn.net/zhjysx/category_11558658.html 作用:用一个开关切换LED闪烁模式以及关 ...

  5. 51单片机 | 点亮第一个LED | LED 闪烁实验 | LED流水灯实验

    文章目录 一.51单片机GPIO介绍 1.GPIO概念 2.GPIO 结构框图与工作原理 2.1 P0端口 2.2 P1端口 2.3 P2端口 2.4 P3端口 2.5 要点 二.LED简介 三.硬件 ...

  6. STM32之定时器中断控制LED闪烁

    上篇博客我们是用延时函数实现了LED的闪烁,今天我们使用STM32的定时器来使LED闪烁. 关于32的定时器的种类,今天我在这先不做过多的说明,有时间我会再另写一篇博客来专门介绍32的定时器.今天我们 ...

  7. 控制led闪烁次数_单片机驱动LED灯的进阶之路

    对于大多数单片机的学习者或者是从事单片机行业的工程师来说,单片机驱动LED闪烁起来的时候,基本都是我们入坑的开始,同时当时的那种兴奋与喜悦都是难以忘怀的,从LED灯亮起,到闪烁,再到各种流水灯,能开心 ...

  8. 51单片机(入门保姆级教程)——LED闪烁及流水灯

    一.LED基本原理和知识 图1 LED共阳极原理图 1.1 LED共阴极和共阳极的含义 LED的最小单元是发光二极管.发光二极管是区分正负极的,正向导通,反向截止.共阴极就是发光二极管的负极连接在一起 ...

  9. 【致敬未来的攻城狮计划】--RA2E1 开发板测评(2)LED闪烁

    前言 (1)首先感谢 李肯前辈的活动,从而申请到了RA2L1开发板的测评. (2)注意,学习本文之前要学习 瑞萨Renesas RA2L1 开发板测评(1)--keil环境配置: (3)我们拿到开发板 ...

  10. 串口接收-控制LED闪烁(VerilogVivado)

    前言 此文介绍uart串口串口接收-控制LED的verilog实现和testbench的编写,仿真环境为vivado 2018.3. 提示:以下是本篇文章正文内容,下面案例可供参考 一.实现原理 [设 ...

最新文章

  1. Boosting和Bagging: 如何开发一个鲁棒的机器学习算法
  2. 红宝书阅读笔记——缓冲区对象
  3. pandas中的函数—— .map()
  4. OpenShift Origin中的Kubernetes Spark运算符(第1部分)
  5. (2) MongoDB基本概念及与关系型数据库的对照
  6. 计算机专业英语词汇mp3,【听单词】计算机专业英语词汇音频106,计算机英语单词MP3...
  7. 制作自己的linux内核,打造属于你自己的Linux系统
  8. PHP案例:数组用法演示
  9. 《The C programming language》学习笔记
  10. Unity组件脚本的常用类和结构体GameObject
  11. Git 拉取远程最新代码
  12. idea文件夹代颜色代表的含义
  13. 51单片机学习笔记(8)——74HC573锁存器
  14. 迪士尼照片_迪士尼经典游戏,《狂热》和更多Linux游戏新闻
  15. android 个推封装,Android个推快速集成
  16. 颠覆物理学的中微子:宇宙中飞行速度几乎达到光速
  17. TBM410-ASEMI的4A贴片整流桥TBM410
  18. Oracle 储存生僻字
  19. 10款超级优雅的Go语言开发工具
  20. MiniSTM32F103实现家庭普通电路中的电流谐波检测

热门文章

  1. centos6.5 安装svn可视化管理工具 if.svnadmin
  2. Short, Integer, Long缓存
  3. linux系统调用和库函数调用
  4. OSPF 配置实验1
  5. linux web目录写入权限命令,Linux下Web目录和文件安全权限设置
  6. 常用shell命令(未完待续)
  7. 【渝粤教育】国家开放大学2018年春季 8647-21T工程经济与管理 参考试题
  8. [渝粤教育] 西南科技大学 国际贸易理论与实务 在线考试复习资料2021版(1)
  9. OpenAI对强化学习环境的汇总
  10. python中数据存入execle、读取excel数据