i.MX6
文章平均质量分 80
“逛丢一只鞋”
这个作者很懒,什么都没留下…
展开
-
FFT频谱分析(补零、频谱泄露、栅栏效应、加窗、细化、频谱混叠、插值),Matlab、C语言代码
文章目录引言Matlab FFT函数频谱混叠栅栏效应细化技术什么是细化技术?细化FFT技术的应用:Zoom-FFT算法介绍及MATLAB实现Zoom-FFT根本没有实现“细化“?到底该怎么实现“细化”?补零补零对频谱的影响补零与离散傅里叶变换的分辨率补零与插值对FFT的影响频谱泄露信号的截断频谱泄露定义窗窗的概念常用窗函数如何选择“窗函数”?频谱泄漏的原因加窗应用(汉宁窗)加窗对频率和幅值的影响FFT变换的幅值和能量校正幅值修正谱能量修正谱转换的比例因子关系引言在对信号进行谐波分析的过程中,对时域信号进原创 2021-12-01 22:02:31 · 23560 阅读 · 6 评论 -
C语言总谐波失真(THD)实现,从理论到应用分析改进详解
文章目录引言测试信号生成THD分析代码引言从Matlab总谐波失真(THD)仿真到C语言总谐波失真(THD)应用对于如何实现THD,上篇文章中已经叙述的比较清晰,但是,正如结尾中表述,实际计算数据与理论数据差距过大,无法应用在实际的系统中。测试信号生成为了更好的分析THD,依然是生成一个测试正弦信号通过matlab生成,然后再去使用au软件进行处理M=8192*8;%fft采样点Fs=48000; %采样频率,一秒多少个采样点N=48000*4; %序列长度,总数据有多少个点f1=50;原创 2021-11-26 15:46:27 · 9022 阅读 · 2 评论 -
wav音频文件解析读取 定点转浮点分析 幅值提取(C语言实现)
文章目录引言音频编码音频编码基本原理频谱掩蔽效应时域掩蔽效应压缩编码方法音频采样音频量化PCM格式PCM 音频数据的存储PCM 音频数据的参数WAV格式WAV 格式定义WAV 文件头解析WAV解析定点数转换浮点数代码引言在之前的研究中,实现了arm平台C语言对FFT的频谱分析以及失真度测试从Matlab平台进行FFT到ARM平台C语言FFT频谱分析从Matlab谐波失真仿真到C语言谐波失真应用上述文章分析通过sine生成的信号,实际工作中需要解析外部传入的音频文件,然后再进行fft等操作音频编码原创 2021-11-25 10:26:54 · 5751 阅读 · 3 评论 -
C语言读取写入 ini 配置文件
文章目录一、了解什么是INI文件?二、INI文件的格式三、解析上述文件四、测试如下一、了解什么是INI文件?ini 文件是Initialization File的缩写,即初始化文件,这是用来配置应用软件以实现不同用户的要求。二、INI文件的格式INI文件由节、键、值组成。一个简单的的INI文件例子如下:[Setting]INIT_FLAG=0;VOLUME=1;LANGUAGE=1;如上例子,[Setting]就是节,=号左边的值是键,=号右边的是值。三、解析上述文件/*ini.h原创 2021-10-17 13:41:08 · 7166 阅读 · 2 评论 -
Linux设备模型 Bus, Class, Device和Device Driver的概念
文章目录Bus, Class, Device和Device Driver的概念设备模型的核心思想Bus, Class, Device和Device Driver的概念硬件拓扑描述Linux设备模型中四个重要概念中三个:Bus,Class和Device(第四个为Device Driver,后面会说)。Bus(总线):Linux认为(可以参考include/linux/device.h中struct bus_type的注释),总线是CPU和一个或多个设备之间信息交互的通道。而为了方便设备模型的抽象,所原创 2021-09-30 14:04:22 · 1928 阅读 · 0 评论 -
VS Code GD调试嵌入式Linux程序无法断点调试
文章目录问题vscode的launch.json添加 -g修改优化等级 -O0问题使用gdb调试嵌入式Linux上的程序时,简单的c代码小程序,通过以下的方法可以正常的调试和运行Linux嵌入式 gdb VSCode图形化调试教程但是最近编写的程序比较复杂,代码量也比较多在程序中打断点会发现没有反应,并且启动gdb之后断点符号是灰色的板子上的程序也是直接运行,没有按照断点位置停下来vscode的launch.json首先是查看vscode这边的launch.json有没有配置正确{原创 2021-09-15 15:01:43 · 1339 阅读 · 0 评论 -
嵌入式Linux | 核心板 自制底版不启动问题排查及解决(飞凌iMX6q为例)
文章目录前言USB转网口供电模块电容极性反接Boot Mode拨码Debug串口检查核心板工作条件核心板低压区前言项目中需要对底版进行裁剪重新绘制采用了飞凌的嵌入式核心板iMX6q型号底版经过重新设计之后,插上核心板,发现底版没有任何反应Debug调试接口没有任何的打印信息U-Boot都没有正常启动,现在开始排查USB转网口供电模块电容极性反接板子不能正常启动,首先就是要排查电压的问题电容或者有极性器件有没有接反果然,usb转网口的供电 出现了问题,电容因为SMT下单过程中排查疏忽,接反原创 2021-09-03 19:00:26 · 1166 阅读 · 0 评论 -
嵌入式通信必会知识点 C/C++内存对齐(详解)
1、什么是内存对齐还是用一个例子带出这个问题,看下面的小程序,理论上,32位系统下,int占4byte,char占一个byte,那么将它们放到一个结构体中应该占4+1=5byte;但是实际上,通过运行程序得到的结果是8 byte,这就是内存对齐所导致的。//32位系统#include<stdio.h>struct{ int x; char y;}s;int main(){ printf("%d\n",sizeof(s); // 输出8 retur转载 2021-09-03 16:49:05 · 377 阅读 · 0 评论 -
嵌入式Linux永久修改MAC和IP(特别适用多个网卡设计)
板子上根据设计需求设计了四个网口其中三个是从USB hub扩展来的使用了USB转网口的芯片因为没有USB转网口电路中EEPROM的烧写工具,所以没有办法直接固化到里面MAC地址和IP之类的信息所以要通过Linux的ifconfig进行配置先介绍一种临时更改的方法临时更改所谓临时更改,是指在重新启动系统后就失效的短期更改方法,较简单。Linux网卡的物理地址设置是在网络设置时进行的。首先确定你在使用root用户。假设对eth0进行设置。对要修改MAC的网卡先“关闭”ifconfig e原创 2021-09-03 15:25:43 · 3601 阅读 · 0 评论 -
嵌入式Linux测试USB接口读写速度
嵌入式Linux板子设计了一个USB Hub,然后扩展出来的USB现在要测试一下USB的性能是不是达到了设计标准使用的方法是从U盘读取一个比较大的文件,然后看读写时间找到U盘插上U盘ls /media里面的sda1就是我们挂载的U盘然后查看里面的内容使用time命令time cp ./'Adobe Acrobat DC 2020 SP.rar' /work复制文件 ‘Adobe Acrobat DC 2020 SP.rar’ 到板子的目录/work下最后可以看到读原创 2021-09-03 14:51:07 · 1491 阅读 · 0 评论 -
QT Linux平台屏蔽按键事件(installEventFilter使用) 自定义拦截按键输入
文章目录背景焦点focusfocusPolicykeypress和keyreleaseinstallEventFilter重写事件过滤器过滤组件的按键事件最终效果Qt是一个跨平台开发的框架,可以实现一套代码多平台编译运行。但是有时候我们想实现的功能却和平台深度挂钩,比如本文想要描述的键盘钩子,也就是KeyBoard Hook。在Windows平台开发时,如果我们需要监听键盘的操作或者屏蔽一些键盘操作时,比较容易的办法就是使用Windows 自带的API,包含SetWindowsHookEx、CallNe原创 2021-08-19 18:22:39 · 3542 阅读 · 0 评论 -
QT程序 与 Linux应用程序 进程间数据通信实例(TCP/IP方案)
Qt 提供了四种进程间通信的方式:使用共享内存(shared memory)交互:这是 Qt 提供的一种各个平台均有支持的进程间交互的方式。TCP/IP:其基本思想就是将同一机器上面的两个进程一个当做服务器,一个当做客户端,二者通过网络协议进行交互。除了两个进程是在同一台机器上,这种交互方式与普通的 C/S 程序没有本质区别。Qt 提供了 QNetworkAccessManager 对此进行支持。D-Bus:freedesktop 组织开发的一种低开销、低延迟的 IPC 实现。Qt 提供了 QtDB原创 2021-08-16 20:40:53 · 5222 阅读 · 1 评论 -
Linux I2C 驱动 24C256 E2PROM
文章目录I2C 总线驱动I2C 设备驱动i2c_client 结构体i2c_driver 结构体I2C 设备和驱动匹配过程1、i2c_adapter 注册/注销函数2、i2c_driver 注册/注销函数I.MX6q 的I2C 适配器驱动分析I2C 总线驱动之前类似于input输入设备都是挂载在platform总线上,platform 是虚拟出来的一条总线,目的是为了实现总线、设备、驱动框架。对于I2C 而言,不需要虚拟出一条总线,直接使用I2C总线即可。I2C 总线驱动重点是I2C 适配器(也就是原创 2021-08-01 14:46:08 · 2409 阅读 · 8 评论 -
Linux AT24C256芯片 数据手册解读
文章目录AT24C256 地址AT24C256页AT24C256写操作AT24C02读操作注意AT24C256 地址前四位(1010)是固定的,A2, A1, A0 与硬件连接有关系,外部输入电压为高时是1,外部电压输入为低是0。本设计中A2, A1, A0都是接地,所以我的设备地址是1010000X,也就是10100000 或10100001。最后一位R/W是读写位,读操作时为0,写操作时为1。对于linux IIC子系统,读写位驱动会自动添加,实际设备地址位高七位 1010000B 也原创 2021-07-28 14:17:46 · 7725 阅读 · 3 评论 -
Linux 查看设备树关系 方便好用的tree命令
官网下载http://mama.indstate.edu/users/ice/tree/打开makefile,可能需要稍微修改一下makefile文件,使用自己的j交叉编译器make交叉编译后复制交叉编译后得到的可执行文件tree,放到板子的/bin/文件夹下方可使用...原创 2021-07-27 18:09:02 · 1012 阅读 · 0 评论 -
嵌入式Linux 使用iperf3同时压力测试4个网口 解决方案
文章目录iperf介绍安装iperf被测Linux板子PC主机iperf使用Linux网口初始化配置同时测试4个网口网络性能Linux板子linux后台运行和关闭、查看后台任务fgctrl + zkillbgwindows 电脑结果iperf介绍iperf是一种命令行工具,用于通过测量服务器可以处理的最大网络吞吐量来诊断网络速度问题。它在遇到网络速度问题时特别有用,通过该工具可以确定哪个服务器无法达到最大吞吐量。安装iperf被测Linux板子板子是Linux环境,一般情况都会有iperf3,在原创 2021-07-27 09:48:00 · 7969 阅读 · 2 评论 -
Linux 输入设备 自定义键盘 input输入子系统 gpio-keys按键驱动
文章目录nano /proc/bus/input/devices原创 2021-07-21 19:13:28 · 4754 阅读 · 3 评论 -
Linux LED子系统调试与应用 设备树官方文档与 gpio-leds.c 源码详解
文章目录查看官方说明文档①、Required properties②、gpiosGPIO说明文档③、label查看官方说明文档打开文档Documentation/devicetree/bindings/leds/leds-gpio.txtnano ./Documentation/devicetree/bindings/leds/leds-gpio.txt此文档详细的讲解了Linux 自带驱动对应的设备树节点该如何编写LEDs connected to GPIO linesRequired原创 2021-07-17 11:18:32 · 5367 阅读 · 1 评论 -
Linux debugfs使用分享 软件查看gpio状态
文章目录查看gpio状态查看regulator查看clk在调试中加入debugfs有时可以起到事半功倍的效果:adb shell mkdir data/mkdir debug/创建完成目录 /data/debug 之后运行指令mount -t debugfs debugfs /data/debug可以看到安装的内容ls /data/debug 查看gpio状态cat gpio查看regulatorls /data/debug/regulator/查看clk c原创 2021-07-16 14:50:00 · 357 阅读 · 0 评论 -
Linux 设备树 status 详解
device tree中的status标识了设备的状态,使用status可以去禁止设备或者启用设备,看下设备树规范中的status可选值valueDescription“okay”表示设备正在运行“disabled”表示该设备目前尚未运行,但将来可能会运行“fail”表示设备无法运行。 在设备中检测到严重错误,确实如此没有修理就不可能投入运营“fail-sss”表示设备无法运行。 在设备中检测到严重错误,它是没有修理就不可能投入运营。 值的sss部分特定于设备原创 2021-07-15 16:44:40 · 2955 阅读 · 0 评论 -
Linux 输入设备调试详解(零基础开发)Rotary_Encoder旋转编码器驱动(EC11)通用GPIO为例 挂载input输入子系统
查看/proc/bus/input/devices文件nano /proc/bus/input现在可以看到两个设备Name 设备名字Handlers 设备节点event2注册旋转编码器设备驱动键盘原创 2021-07-14 15:47:00 · 4827 阅读 · 10 评论 -
QT开机启动指定应用程序
QT编译后,找到可执行文件,复制到评估版中这里我复制到了 /forlinx/qtbin 文件夹中然后修改session文件 nano /etc/matchbox/session在文件中添加qt可执行文件的路径重启评估版即可原创 2021-07-05 16:25:40 · 205 阅读 · 0 评论 -
IIC(I2C)总线设备地址,例如E2PROM、CH455G等器件应用
文章目录背景I2C特点IIC的物理层IIC的协议层a.数据的有效性b.起始和结束条件d.数据帧格式地址格式实战寻址E2PROMCH455G地址背景I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。经常IIC和SPI接口被认为指定是一种硬件设备,但其实这样的说法是不尽准确的,严格的说他们都是人们所定义的软硬结合体,分为物理层(四线结原创 2021-05-28 14:12:32 · 11472 阅读 · 1 评论 -
TCP通信中的“沾包”现象
文章目录TCP与UDP通信的特点TCP通信特点UDP通信特点TCP通信中的“沾包”现象自定义应用层协议TCP与UDP通信的特点关于对这两者的比较,网上一搜一大片,讲得也比较清楚。TCP通信就像打电话,双方通信之前需要建立连接、双方就位后方可开始会话;而UDP通信就像发短信,一方给另一方发送数据前,并不需要对方就位。上面两幅图显示了TCP与UDP通信过程建立的区别。除了它们通信过程建立的不同之外,两者还有以下区别:TCP通信特点1)可靠性;通信双方均就位,一方发送数据,另一方收到后会做出转载 2021-05-19 11:08:13 · 196 阅读 · 0 评论 -
Linux深入理解TCP协议(connect、bind、listen、accept)及其源码
文章目录TCP建立连接的三次握手过程探究使用Linux Socket api建立TCP连接的过程bind,listenconnect从源码角度分析TCP三次握手的过程对tcp_v4_connect的部分源码分析主要探讨的问题就是connect及bind、listen、accept背后的三次握手相关问题TCP建立连接的三次握手过程首先还是老生常谈的三次握手问题,还是照惯例先来再温习一遍第一次握手:客户端尝试连接服务器,向服务器发送syn(全称是同步序列编号)报文,syn=i,客户端进入SYN_SE原创 2021-05-18 16:33:39 · 4149 阅读 · 4 评论 -
嵌入式系统中鲁棒性的理解
文章目录前言定义不同领域中的鲁棒性分类鲁棒性与稳定性鲁棒性验证前言之前在音频算法的课题中听到过鲁棒性这个概念,一直没有明白这个是什么概念,在一篇论文中看到了对嵌入式相关描述中也出现了鲁棒性问题,所以打算研究一下。定义鲁棒是Robust的音译,也就是健壮和强壮的意思。它也是在异常和危险情况下系统生存的能力。比如说,计算机软件在输入错误、磁盘故障、网络过载或有意攻击情况下,能否不死机、不崩溃,就是该软件的鲁棒性。所谓“鲁棒性”,也是指控制系统在一定(结构,大小)的参数摄动下,维持其它某些性能的特性。根原创 2021-04-30 11:04:36 · 1801 阅读 · 2 评论 -
Linux双网卡设置IP属于同一网段的ping方法以及现象记录分析
文章目录前言ping以及MAC地址总结前言写在前面:经常遇到客户将板卡上的两个网络设备的IP地址设置为同一网段的情况,比如eth0:192.168.0.232,eth1:192.168.0.30.我的解释是,不能设置为同一网段,或者使用其中一个时候下线另外一个网卡。但是我不知道这个说法到底是根据什么,查了很多资料也没找到明确的说法,但是下面这个实验能够说明一些现象的原因。ping以及MAC地址首先查看网卡的信息ifconfig因为两个网卡都在同一个网段,所以如果这个时候直接和我们的主机(I原创 2021-04-28 11:42:54 · 16359 阅读 · 4 评论 -
Linux嵌入式 gdb VSCode图形化调试教程
文章目录介绍GDB简介交叉编译器的gdb介绍在学习单片机的时候我们可以通过集成式IDE 来进行调试,比如MDK、IAR 等。在嵌入式linux 领域是否也可以进行调试呢?答案肯定是可以的,在嵌入式linux 领域我们最常用的就是GDB 调试工具,通过GDB 来调试嵌入式C 程序。本章我们首先学习如何搭建嵌入式Linux的GDB 调试环境,然后讲解如何使用GDB 工具调试C 程序。GDB简介gdb 工具是GNU 项目调试器,基于命令行。和其他的调试器一样,我们可以使用gdb 来一行行的运行程序原创 2021-04-15 11:25:36 · 3586 阅读 · 1 评论 -
Linux 多个网卡配置静态IP地址
静态IP网络配置文件主要有以下几个:IP地址配置文件、主机名称配置文件、DNS配置文件。编辑文件/etc/network/interfaces:nano /etc/network/interfaces并用下面的行来替换有关eth0的行:# The primary network interfaceauto eth1iface eth1 inet staticaddress 192.168.0.30gateway 192.168.0.1netmask 255.255.255.0使用原创 2021-04-14 13:20:06 · 2999 阅读 · 2 评论 -
VS Code改变文件打开默认编码及自动匹配文件编码格式
描述由于Powershell和MDK工程文件集默认全部采用gb2312编码,使用VS Code打开的时候每个文件都需要选择文件编码格式,可以改变VS Code的默认编码格式,这样就方便多了。配置上方搜索框输入“编码”或“Encode”,搜索如下设置项:FIles:Encoding:下拉选择VS Code默认打开文件时选择的编码格式Files:Auto Guess Encoding:VS Code会根据打开的文件自动猜测合适的编码格式并选择该格式打开文件,默认不开启,这里选择启用。...原创 2021-04-14 09:41:48 · 1327 阅读 · 0 评论 -
USB转网口驱动信息的查看和配置
文章目录查看USB转网口转接头信息USB转网口驱动配置USB驱动信息的查看查看USB转网口转接头信息首先,查看一下没有插入转接头之前的网口信息ip addr然后插上USB转网口的转接头到开发板调试界面弹出如下的信息这里我们要注意到这几个信息,第一个就是,网卡被识别成eth1,第二个就是网卡型号:ASIX AX88772B USB 2.0 Ethernet,很重要!然后查看ip信息ip addr可以看到多出来一个eth1,就是我们的外接网卡,因为现在是默认的动态ip,所以会显示一原创 2021-04-12 15:16:35 · 7464 阅读 · 0 评论 -
Linux中echo的使用方法
echo命令我们经常使用的选项有两个,一个是-n,表示输出之后不换行。另外一个是-e,表示对于转义字符按对应的方式处理,假设不加-e那么对于转义字符会按普通字符处理。echo输出时的转义字符\b 表示删除前面的空格\n 表示换行\t 表示水平制表符\v 表示垂直制表符\c \c后面的字符将不会输出,同一时候,输出完毕后也不会换行\r 输出回车符(可是你会发现\r前面的字符没有了)\a 表示输出一个警告声音echo中的重定向能够把内容输出到文件里而不是标准输出 echo "..原创 2021-04-07 16:13:38 · 435 阅读 · 0 评论 -
Linux嵌入式USB接口的测试
文章目录须知使能U盘U盘测试须知注意, NXP官方的 Linux内核默认已经使能了 U盘!所以我们可以插上直接使用使能U盘虽然可以直接使用,但是我们还是要学习一下如何手动配置Linux内核,使能U盘U盘使用 SCSI协议,因此要先使能 Linux内核中的 SCSI协议,配置路径如下:我们还需要使能 USB Mass Storage,也就是 USB接口的大容量存储设备,配置路径如下:U盘测试在插入U盘之前ls /dev准备好一个 U盘,注意 U盘要为 FAT32格式的! NT原创 2021-04-07 11:04:39 · 1249 阅读 · 0 评论 -
Linux开发环境搭建关键的库文件搜索调用(静态库)
头文件的搜索gcc 在编译时如何去寻找所需要的头文件:编译器指定的参数 -I 给出的头文件包含路径然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH(分别对应C、C++、objective-C的头文件)GCC标准安装目录,系统标准include路径。安装GCC套件的时候可以通过–prefix参数手动指定安装位置。默认的安装位置在:gcc/x86_64-linux-gnu/7/,在这个文件夹之下包含了很多的头文件原创 2021-04-02 14:25:20 · 111 阅读 · 0 评论 -
Linux下CMake中使用pthread多线程编程调试教程及错误分析
文章目录VS Code插件CMakeLists编写编译调试第一步,debug第二步,kit第三步,Build执行问题分析Linux下编写多线程的程序,需要使用到pthread.c库,使用gcc编译,不能直接gcc product.c -o product而是需要在命令的后面添加一个命令,gcc在编译的时候通过 -L参数 手动指定的搜索路径gcc product.c -o product -lpthread所以,对于调试过程,也要进行这个的静态库的调用,现在的问题就是如何在cmake中添加静原创 2021-04-02 14:18:13 · 5208 阅读 · 3 评论 -
Linux多线程并发运行原理+代码例程详解
交叉编译#include <stdio.h>#include <pthread.h>#include <stdlib.h>/*thread1*/void thread1(void){ int i = 0; for(i = 0; i < 6; i++) { printf("This is a pthread1. \n"); if(i == 2){ pthread_exit(0);.原创 2021-04-02 09:41:09 · 2127 阅读 · 0 评论 -
Linux嵌入式驱动开发零基础入门集合(STM32过渡到Linux嵌入式)
全部传送门Linux嵌入式驱动开发01——第一个驱动Hello World(附源码)Linux嵌入式驱动开发02——驱动编译到内核Linux嵌入式驱动开发03——杂项设备驱动(附源码)Linux嵌入式驱动开发04——应用层和内核层数据传输Linux嵌入式驱动开发05——物理地址到虚拟地址映射Linux嵌入式驱动开发06——第一个相对完整的驱动实践编写Linux嵌入式驱动开发07——GPIO驱动过程记录(飞凌开发板)Linux嵌入式驱动开发08——字符设备(步步为营)Linux嵌入式驱动开发原创 2021-03-05 15:57:34 · 917 阅读 · 0 评论 -
Linux嵌入式驱动开发18——I2C通信
文章目录I2C简介i2c-dev.hi2c.hTSC2007代码测试设备树I2C简介ls /dev这里拿我们的七寸LVDS屏幕的触摸芯片为例子,通过底座的原理图,可以看到LVDS使用了I2C3的接口i2c-dev.h打开文件/include/uapi/linux/i2c-dev.hi2c_rdwr_ioctl_data 结构体代码如下所示/* This is the structure as used in the I2C_RDWR ioctl call */struct i2原创 2021-02-28 21:47:16 · 2226 阅读 · 3 评论 -
Linux嵌入式驱动开发17——输入子系统
文章目录什么是输入子系统什么是输入子系统/* * Copyright (c) 1999-2002 Vojtech Pavlik * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 as published by * the Free Software Foun原创 2021-02-28 10:18:03 · 612 阅读 · 0 评论 -
Linux嵌入式驱动开发16——按键消抖实验(内核定时器)
文章目录Linux内核定时器概念Linux内核定时器基础知识Linux内核定时器相关函数时间转换函数ms转换时钟节拍函数us转换时钟节拍函数宏DEFINE_TIMERadd_timer函数del_timer函数mod_timer函数示例代码按键消抖Linux内核定时器概念Linux内核定时器基础知识Linux内核定时器相关函数时间转换函数ms转换时钟节拍函数us转换时钟节拍函数宏DEFINE_TIMERadd_timer函数del_timer函数mod_tim原创 2021-02-25 21:18:29 · 1215 阅读 · 0 评论