- 博客(63)
- 资源 (1)
- 收藏
- 关注
原创 linux-UART
UART的全称是Universal Asynchronous Receiver and Transmitter,即异步发送和接收。图中的电平分为TTL/CMOS以及RS-232电平。1.1接线:把串口的Tx和Rx连接起来。1.app发送接受数据。
2024-11-01 20:44:24 340
原创 Linux中SPI
基于平台总线设备驱动模型实现。在probe函数中除了生成spi_master,还会创建spi_device结构体。根据SCK的电平以及数据在第一个跳变沿还是第二个跳变沿传输,SPI传输总共有四种模式。spi设备也有自己的驱动程序,提供spi设备的访问能力。spi控制器有驱动程序,提供spi的传输能力。3.SPI总线设备驱动模型。4.1SPI控制器驱动程序。4.spi设备驱动框架图。4.2SPI设备驱动程序。
2024-10-30 19:59:46 333
原创 VIM的使用
修改键盘映射的方式:交换Linux中大写锁定键和Esc按键的位置。安装命令 yum-install xmodmap。7.文本对象 范围文本对象。9.设置标记,快速回跳。4.VIM学习初体验。
2024-10-30 19:35:28 320
原创 GCC及GDB的使用
(假如程序出错的时候,没有产生core文件,就要通过ulimit来设置;ulimit -c unlimited)这里还是没出来core文件,后续再排查为什么。r: 没有设置断点的时候,r会将程序运行完。5.当程序出现错误的时候,比如指针越界。6.调试一个正在运行的进程。su root之后重新查看。4.3观察某个变量的值。会产生一个core文件。1.GDB的主要功能。
2024-10-29 21:44:15 233
原创 linxu-i2c驱动-eeprom
经过排查是由于,读写之后,没有加延时,可能会导致数据的覆盖。这个程序中还存在一些小问题,不过实现了数据的传输。后续可以把这个延时时间取短点,这里直接取值2s。eeprom的地址为0x50。对driver程序进行更改。
2024-10-27 21:24:25 185
原创 linxu - I2C
I2C 协议采用双线结构传输数据,包括一个数据线和一个时钟线(即 SDA 和 SCL 线),其中 SDA(Serial Data)线用于双向数据传输,而 SCL(Serial Clock)线则用于同步数据传输的时钟信号。IIC 协议(Inter-Integrated Circuit,可简写为 I2C),是一种用于各种电子设备之间进行通信和数据交换的串行通信协议。I2C 设备的地址为 8 位,但是时序操作时最后一位不属于地址,而是 R/W 状态位。所以有用的是前 7 位,使用时地址整体右移一位处理即可。
2024-10-27 15:59:32 273
原创 9.Linux按键驱动-工作队列
1.2 在probe函数中初始化工作队列。1.1在gpio结构体中定义工作队列。1.3.在中断服务程序中调度工作队列。
2024-10-27 09:52:48 202
原创 8.Linux按键驱动-中断下半部
由运行结果可知,在驱动中检测到两次按键按压事件(tasklet函数被调用两次),由于上节中的定时器消抖,导致key_timer_expire函数只被调用了一次,故read函数只执行了一次,应用程序只能获取后一个按键值。1.1在gpio结构体中添加tasklet_struct结构体。1.2在probe函数中初始化tasklet结构体。1.3在中断服务程序中调度tasklet。应用程序和Makefile和上节一致。1.4在这个函数中执行其它任务。
2024-10-27 09:34:54 302
原创 7.Linux按键驱动-定时器
3.2在probe函数中,设置定时器,修改定时器超时时间,添加定时器。3.4在超时函数中,唤醒等待队列,执行原来中断服务程序执行的那些任务。3.1 在按键结构体中,添加timer_list成员。3.3在按键中断函数中,修改定时器超时时间。
2024-10-27 09:04:49 304
原创 6.Linux按键驱动-阻塞与非阻塞
核心在于驱动程序中的.read函数的支持。立即返回,无法读出,返回-1。默认打开文件时候是阻塞的。1.设置打开方式为非阻塞。
2024-10-26 23:37:08 298
原创 5.Linux按键驱动-fasync异步通知
当应用程序收到SIGIO信号的时候, sig_func函数就会被调用,调用read函数读取按键的值。2.2APP把自己的pid告诉驱动程序。2.1绑定信号和信号处理函数。
2024-10-26 23:02:44 240
原创 4.Linux按键驱动-poll监听文件描述符
在while循环中读取数据之前,首先调用poll函数(对应于驱动中的gpio_poll),如果产生了按键按压事件,那么 ret为1,且fds的revens为POLLIN。当产生中断时,中断服务程序中回唤醒等待队列,.poll函数会返回POLLIN | POLRDNORM。根据上述分析可知,只有当产生了按压之后,才会进入到if的第一个分支,调用read函数。那么,在这种情况下,可以去掉gpio_read函数中第87行的代码。3.在驱动程序中,添加对poll函数的支持。2.1定义文件监听描述符及超时时间。
2024-10-26 22:14:22 265
原创 3.Linux按键驱动-添加循环队列
3.在open函数中,等待条件变量。当获得条件变量时,判断条件是否为真,为真时,将数据从内核空间拷贝到用户空间。2.在中断服务程序中,记录按键值,并且唤醒等待队列。1.添加环形缓冲区的代码。
2024-10-26 21:25:43 296
原创 2.Linux按键驱动-创建字符设备,通过应用程序读取按键值
3.在中断处理函数中唤醒等待队列,然后在read函数中返回按键值。4.4在中断服务程序中,给全局变量赋值,并且唤醒等待队列。4.2 gpio_remove函数中添加对应的删除代码。4.5此时,.read函数会将数据拷贝回用户空间。4.1 gpio_probe中添加字符设备代码。1.在上一个博客的基础上,添加一个字符设备。2.在probe函数中注册字符设备。4.3 定义全局变量,等待队列。3.3Makefile文件。
2024-10-26 18:14:37 395
原创 Linux复习-C++
7.define和inline的区别。8.前置++和后置++区别。4.静态链接和动态链接。3.C与C++的区别。5.指针和引用的区别。6.类和结构体的区别。
2024-10-26 13:53:26 521
原创 Linux驱动入门实验班day03-GPIO子系统概述
对于按键GPIO4_14:对应第四组第14个引脚。gpiochip3 ,从96开始,gpio4对应的下列。
2024-08-04 14:21:20 215
原创 Linux驱动入门实验班day03-另一种注册cdev的方式
会将主设备号major对应的所有次设备号,对应的设备节点,总是访问到驱动程序hello_drv。将上边字符设备范围变化为2,可以手动创建节点。解决方式:分配某个区域给主设备号。这个问题,会导致主设备号不够用。如何自动获得主设备号。
2024-08-04 11:11:19 202
原创 Linux中动态库的制作
程序启动之后,动态库会被动态加载到内存中,通过ldd(list dynamic dependencies)命令检查动态库的依赖关系。动态库:GCC进行链接的时候,动态库的代码不会被打包到可执行程序中。静态库:GCC进行链接时,会把静态库中代码打包到可执行程序中。如何定位共享库文件?3.运行main函数。
2023-04-18 12:00:40 198
原创 Linux中静态库的制作
静态库和动态库的区别是:静态库在程序的链接阶段被复制到了程序中;动态库在链接阶段没有被复制到程序中,而是在程序运行时由系统动态加载到内存中供程序调用。库是计算机上的一类文件,可以简单的把库文件看成一种代码仓库,它提供给使用者一些可以直接拿里用的变量、函数或类。库是一种特殊的程序,编写库的程序和编写一般的程序区别不大,只是库不能单独运行。将.o文件打包,使用ar工具(archive)使用gcc命令制作.o文件。r-将文件插入备存文件中。lib:前缀(固定)
2023-04-17 12:53:48 112
原创 基2fft实现、二次最佳平方逼近多项式、牛顿迭代法
根据信号与系统的相关理论[4],根据本学期的数字信号处理作业实验得出的相关结论,对正弦信号进行采样,采样频率在满足采样定理的前提下,还需要满足信号频率不能是信号频率的2倍,这样会导致采样点信息一致,不能恢复出原始的信息。正弦信号2倍采样结果如图2.3所示,当 的时候,会在信号的每一个周期采两个点,采到的所有点值一致,故不能得到正确的频谱。当 固定, 减小信号频谱特性会变好。由FFT基本原理可以知道,当N为2的幂次方时,FFT运算包含 级运算,并将每一级编号 ,每一级包含 组,每组包含 个鲽形单元,...
2022-08-12 18:25:25 1685
原创 以zigzag方式对矩阵数据遍历
遍历顺序:代码:clear,clc;%实现zigzag方式提取矩阵的的元素len1=4;len2=4;m1=cell(len1,len2);m2=cell(1,len1*len2);m3=ones(len1,len2);for m4=1:len1 for lp2=1:len2 m1{m4,lp2}=[char('A'+(m4-1)*len2+lp2-1)]; endendm5=1;m6=1;m3(1,1)=0;m2(1,1)=m1(1,1);c
2022-01-05 13:13:30 329
原创 将N个学生分为G组
代码:% %%考试分组%%考试分组%随机性N=69;%69个人G=4;%分组数目data=1:N;%每个人的初始索引%%给每个人随机分配索引data_index=zeros(1,N);for loop=1:N index=randi(N-loop+1); data_index(loop)=data(index); data=data(find(data~=data(index)));enddata_indexlast_num=fix(N/G);%最后一组的人
2021-12-02 15:57:22 104
原创 求解二次最佳平方逼近多项式
求解二次最佳平方逼近多项式%以后没事不要编程解决数学练习册上边的题目了%49-7 38-5都可以用clear,clc%求解二次逼近问题N=2;low=0;high=1;%积分的区间syms x;syms y;y=1/(1*x^2+1);p_x=x;%积分的权值a=zeros(1,N);b=zeros(1,N-1);g0=1;%要用元胞数组来定义吗?% g=1;% g=[cell(g0),cell(g0),cell(g0)];%暂时只能先用这个办法了for loop=1:N+1
2021-11-27 11:38:28 60
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人