- 博客(60)
- 收藏
- 关注
原创 Linux字符设备驱动开发
字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。Linux里面一切皆文件,驱动设备表现就是一个/dev/下的文件,如/dev/led,应用程序调用open函数打开一个设备的时候,比如led。应用程序通过write函数向/dev/led写数据。关闭设备close。编写驱动的时候,需要编写驱动的open、close、write函数。字符设备驱动struct file_operations。写驱动的时候要考虑应用开发的便利性。驱动分框架,要按照驱动框架来编写。
2024-08-09 16:57:45 1394
原创 STM32CUBEMX+PWM多一个尖峰的问题
解决:电路是默认低电平,我之前这个CH Polarity设置的是HIGH,所以被拉高了,设置成LOW就可以了。问题描述:使用TIM2的通道3产生PWM波形,产生n个数量的波形后,在停止的时候会有一个尖峰。怀疑是自动重载值临界的时候有问题,对重载值多减一个值,但还是有这个问题。
2024-08-09 16:57:02 200
原创 FPGA程序设计
me)不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端在0和1之间处于振荡状态,而不是等于数据输入端D的值。这段时间称为决断时间(resolution time)。经过resolution time之后Q端将稳定到0或1上,但是稳定到0或者1,是随机的,与输入没有必然的关系。在FPGA系统中,如果数据传输中不满足触发器的Tsu和Th不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(recovery。
2024-07-02 14:47:57 906
原创 Zynq—按键控制LED灯闪烁
ZYNQ 的 IO包括对外连接的GPIO和内部 PS 与 PL 通信的AXIO。其中对外的 GPIO 又分为两种:MIO和EMIO。MIO 和 EMIO 只是 GPIO 信号的两种接口, MIO直连到PS(数量有限), EMIO 则是PS 扩展到 PL,从PL 接出的 I/O。EMIO 依然属于 PS,只是连接到了 PL,再从 PL 输出信号。所以 MIO 不需要管脚约束,而 EMIO 需要管脚约束。I/O控制器信号的 I/O复用是不同的, 也就是说,一些 IOP(I/O Peripheral)信号。
2024-07-02 14:45:07 1049
原创 Linux-应用编程学习笔记(字符串处理)
正则表达式通常被用来检索、替换那些符合某个模式(规则)的字符串,正则表达式描述了一种字符串的匹配模式(pattern),可以用来检查一个给定的字符串中是否含有某种子字符串、将匹配的字符串替换或者从某个字符串中取出符合某个条件的子字符串。gets和scanf区别:1、gets只以回车换行符为分隔符,scanf以空格,换行符,TAB的名号都为分隔符。2、gets读取的时候,会丢弃回车换行符,scanf不会讲分隔符读走丢弃。sizeof 和 strlen 的区别。
2024-06-11 10:58:02 428
原创 STM32-CAN
CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信协议。异步半双工。
2024-06-11 10:57:23 926
原创 zynq-7015启动分析及裸机BootLoader编写(未完待续)
从APP(download区)回到BootLoader下载新的APP(download区),再到新APP(download区)运行。尝试了直接写,读出来值不对,查了好多资料,也没说到底怎做。调试的时候,可以在FSBL工程/src/fsbl_debug.h添加宏定义,可以看到启动过程中的调试信息。程序框架搭完了,网络连接不上,还没找到原因,原来的程序就行,新建的程序不行,使用的还是同一个bsp。学到了一个东西,这个地方可以调整,可以把文件烧到不同的地方。测试写入IP地址,确实没问题。升级完成,成功切换了!
2024-06-03 15:03:19 1074
原创 STM32启动过程分析
源码含义:定义一个数据段,名字为 RESET,READONLY表示只读。EXPORT表示声明一个标号具有全局属性,可被外部的文件使用。这里是声明__Vectors和 __Vectors_Size 三个标号具有全局性,可被外部的文件使用。DCD 0;Reserved;
2024-05-28 14:17:22 832
原创 Linux-应用编程学习笔记(三、文件属性和目录)
1、普通文件(ls -l 文件,权限前边第一个"-"代表普通文件;stat 文件)文本文件:ASCII字符二进制文件:数字0/12、目录文件(‘’d):文件夹3、字符设备文件(‘c’)和块设备文件(‘b’):驱动文件4、符号链接文件(‘l’):快捷方式文件5、管道文件(‘p’):进程间通信6、套接字文件(‘s’):进程间通信(网络通信)
2024-05-22 11:19:00 1011
原创 Linux-应用编程学习笔记(二、文件I/O、标准I/O)
stdio.h>虽然标准 I/O 和文件 I/O 都是 C 语言函数,但是标准 I/O 是标准 C 库函数,而文件 I/O 则是Linux系统调用;标准 I/O 是由文件 I/O 封装而来,标准 I/O 内部实际上是调用文件 I/O 来完成实际操作的;可移植性:标准 I/O 相比于文件 I/O 具有更好的可移植性,通常对于不同的操作系统,其内核向应用层提供的系统调用往往都是不同,譬如系统调用的定义、功能、参数列表、返回值等往往都是不一样的;
2024-05-21 16:09:54 869
原创 Linux-应用编程学习笔记(一、应用编程概念)
系统调用(system call) 其实是提供给应用层的应用编程接口(API) , 是 Linux 应用层进入内核的入口。通过系统调用, Linux 应用程序可以请求内核以自己的名义执行某些事情,譬如打开磁盘中的文件、读写文件、关闭文件以及控制其它硬件外设。
2024-05-21 09:52:02 326
原创 zynq-7015使用lwip-tcp远程对QSPI进行更新、QSPI FLASH启动
Vivado 2018.3、xc7z015clg485-2、小梅哥FPGA开发板、BOOT.bin(这个文件包含了bitstream文件,工程.elf,和FSBL.elf)、正点原子领航者《41_qspi_update_tcp》例程。
2024-05-16 16:19:20 1604 5
原创 Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(三)
配置完成之后, ACM9238 模块开始采集数据, 将ACM9238 模块采集的数据通过网口传输到电脑。电脑端将接收到的数据进行保存, 然后通过 MATLAB 进行进一步的分析。通过电脑上的网络调试助手, 将命令帧进行发送, 然后通过 ACZ7015 开发板上的以太网芯片接收, 随后将接收到的数据转换命令, 最终实现对 ACM9238 模块的采样频率、 数据采样个数以。MATLAB:ADCdata_to_wave_v2_2.m 文件。注:要把这个软件放到D:MFC_Data中。
2024-03-05 13:09:48 2492 7
原创 Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(二)
(为了在时钟信号的上升沿/下降沿取数据时,取得数据刚好是数据信号 rgmii_rxd 的正中间, 使得采样的数据处于最稳定的状态。用户可以在电脑上通过网口调试工具进行指令的下发,并以文件的形式保存接收到的数据,然后使用MATLAB软件进行进一步的数据处理分析。采样上限50Msps,如果期望以1Msps 的采样速率采样, 则只需要每间隔 50 个采样数据取一个结果存储或使用, 其他 49 个数据直接舍弃。控制ADC的采样速率,将12位数据转换为16位数据。将以太网接收到的数据进行解析, 得到控制命令。
2024-03-05 10:46:00 2712 2
原创 Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(一)
fifo2axi4 为 AXI4 接口转换模块,负责fifo 与 axi4 接口间的转换, 将写侧 FIFO 里的数据读出然后存储在 DDR 存储器以及将 DDR 存储器读出的数据存放到读侧 FIFO 缓存。fifo_axi4_adapter 负责FIFO接口到AXI4接口的转换,FIFO中的数据可以通过该模块写入PS端,PS端的数据也可以由该模块接收写入FIFO。在 Vivado 的 Source 窗口中,出现了新配置生成的 IP 核文件mig_7series_0(mig_7series_0.xci)。
2024-03-01 09:51:55 2708 3
原创 串口屏开发记录
项目参数型号尺寸4.3寸触摸类型电容触摸主控芯片型号通讯方式串口(RX-TX,TX-RX)编程语言陶晶驰脚本语言供电电压5V分辨率480x272。
2024-02-29 11:12:59 1273
原创 Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(前导)
DDR=Double Data Rate双倍速率,DDR SDRAM=双倍速率同步动态随机存储器,人们习惯称为DDR,其中,SDRAM 是Synchronous Dynamic Random Access Memory的缩写,即同步动态随机存取存储器。,ARM CPU的程序可以在该DDR3中运行,PS部分的DDR3存储器使用,不需要,也不能调用MIG IP来控制,只需要在设计中添加ZYNQ7 Processing System 组件,并配置好DDR相关的参数,即可使用。PS部分的DDR3主要用作。
2024-02-29 08:06:19 2978
原创 NRF52832-扩展广播
我想要设置广播名称为 “一二三四五”,当广播名称为FULL_NAME时,但是广播显示还是“一?”是乱码,后来打开nrf connect观察广播,在没连接的时候,点击一下,看了一下显示Shortened Local Name :“一?但是有个问题就是 init.config.ble_adv_extended_enabled = true;之后,搜不到蓝牙了。后来发现BLE_GAP_ADV_SET_DATA_SIZE_MAX = 31;应该是广播信息超过了,导致名称显示乱码。
2023-07-27 08:28:04 452 2
原创 嵌入式编程——节省内存空间
一、逻辑1.在必要时,用switch替代if。2.根据情况减少死循环时间。3.重复的操作用函数替换。4.判断条件能合并的合并。二、变量1.减少结构体中浪费的空间。字节对齐。2.将全局变量改为局部变量。3.结构体使用位域定义变量。4.根据数据大小定义变量。...
2022-05-14 15:31:22 336
原创 条码---知识
交叉25码(Interleaved Two of Five):0~9,当条码字符所表示的字符个数为奇数时,应在字符串左端添加“0”。交叉二五条码容易产生因信息丢失引起的误读。当扫描路径没有经过两个空白区的时候,容易把一个条码符号的条与空当成起始符或终止符而引起信息丢失或译码错误。因此交叉二五条码常用于标识固定长度的字符,此时译码器或计算机只接收固定长度的信息,短的数据信息可在开头加“0”字符以达到固定长度。另外交叉二五条码常采用保护框来防止不完全扫描而产生的数据误读。...
2022-05-11 11:10:30 187
原创 Keil堆栈设置注意事项
引用:STM32栈stack 堆栈 注意事项 Stack_Size EQU 0x000004001.定义了几个结构体,其中每个机构体都有二维数组,并且二维数组非常大,例如a[5][3300]。2.发现结构体不能malloc及初始化。3.查找网上资料发现,Heap_Size 太小了。4.看GD32启动文件,startup_gd32f10x_hd.s5.默认,Stack_Size EQU 0x000002000和Heap_Size EQU ...
2021-11-24 14:18:38 7044 5
原创 SE96X、CM500-I27条码扫描引擎使用经验
亿嘉电子的条码扫描引擎使用一样的操作。设置前后缀自定义前缀 0x69自定义后缀 0x6807 C6 04 08 00 68 41 FE 7E这是设置后缀为"A"的两条指令第一条指令红字部分根据需求选择第二条指令红字部分 68 表示后缀,41 是十六进制的"A"校验位计算:前面指令总和的补码,高位字节在前,低位在后。效验计算方式:效验前所有字节相加得出总和(不含两字节效验位),总和按位取反并加1后得出的就是效验码。如:05 D1 00 00 01相加得出总和是:0.
2021-09-22 10:51:50 590
原创 CD74HC405×
Ti公司根据输入选择通道。引脚:CD74HC4051输入状态 开启通道 Enable S0 S1 S2 L L L L A0 L L L H A1 L L H L A2 L L H H A3 L H L L A4 L H L H A5 L H H L A6.
2021-08-09 16:05:56 771
原创 《软件开发者路线图:从学徒到高手》(读书笔记)
从书籍摘录,加上了自己的经验,仅用于学习,如有侵权请联系删除。第一章 绪论什么是软件技能基于你从周围世界获得的反馈,始终不断适应并做出改变的要求。 一种对注重实效而非教条主义的向往。 一种认为分享知识胜过隐藏独享的信念。 一种敢于实验并被证明错误的意愿。 一种心理学家称之为“内控倾向”的精神。 一种对于个体而不是群体的关注。 一种包容性。 我们要以技能为中心,而非以过程为中心。 对Etienne Wenger所谓“情景学习”的一种强烈偏好。做软件学徒意味着什么对于..
2021-06-16 15:45:34 369
原创 CodeUp算法习题
题目描述:输入一个数n(1≤n≤200),然后输入n个数值各不相同的数,再输入一个值x,输出这个值在这个数组的下标(从0开始,若不在数组中则输出-1)。输入格式:测试数据有多组,输入n(1≤n≤200),接着输入n个数,然后输入x。输出格式:对于每组输入,请输出结果。样例输入:41 2 3 43样例输出:2思路:输入n,申请数组a[n],数组清0。n有多组,while(scanf("%d",&n)! = EOF) 循环输入n个数,将数放在a[i]
2021-05-14 16:08:51 451
原创 PAT算法习题
题目描述:卡拉兹(Callatz)猜想:对任何一个正整数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证(3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过 1000 ...
2021-05-14 15:47:15 387
原创 高质量程序设计指南——C++/C语言(学习笔记)
从书籍摘录,加上了自己的经验,仅用于学习,如有侵权请联系删除。封面软件质量属性正确性 健壮性 可靠性 性能 易用性 清晰性 安全性 可扩展性 兼容性:弱者设法与强者兼容,否则无容身之地;强者应当避免被兼容,否则市场将被瓜分。 可移植性精简并行过程(Simplified Parallel Process,SPP)复用分而治之优化与折中技术评审测试质量保证改错找到错误时,不要急于修改,先思考一下:修改此...
2021-04-27 20:00:47 494
原创 实用电子元器件与电路基础(学习笔记)
从书籍摘录,加上了自己的经验,仅用于学习,如有侵权请联系删除。书籍封面电子元器件电源电线开关地电阻电阻标签电容电容标识电感变压器继电器二极管晶体管TUBES(管?)晶闸管集成电路逻辑电路连接器OPTOELECTRONIC(光电?)其他...
2021-04-27 18:48:45 1443
原创 编程实用工具网址
CircuitLab网址:https://www.circuitlab.com/芯片手册网址:有型号就可以搜索芯片手册https://www.alldatasheetcn.com/娃娃工具:英文字母大小写转换等工具,编程时比较方便https://www.iamwawa.cn/daxiaoxie.html...
2021-04-27 15:50:08 136
原创 KE06Z128程序烧进去后不运行
问题:使用CodeWarrior开发过程中,编完程序,编译完成后,KE06Z128升不进去程序。前言:只是记录问题是怎么处理的,原因是什么我也不太清楚,我是这么做然后就好了,我也没有办法,《笑哭》,仅供参考。工程是公司内部经过加密的。解决方法:1.打开CodeWarrior,打开Boot工程。2.CodeWarrior软件中,上方点击Project,选择Properties,配置如下图所示。3.点击OK,回到工程中,在左侧CodeWarrior Projects中用鼠标右击工程,
2021-04-20 15:21:17 82
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人