自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(142)
  • 收藏
  • 关注

原创 智能家居项目

整体:通过手机或语音输入,对外设的控制1. 对灯开关控制:支持回家模式,离家模式2. 人脸识别开锁3. 火灾报警,蜂鸣器响4. 本地oled屏,显示语音播报信息5. app端显示监控画面+火灾报警+cpu温度+灯和锁状态6. app端除视频监控外,可实现远程操作(内网穿透)7. app端可控制摄像头功能(录像或监控画面显示)8. 守护进程,保证不退出

2023-05-03 14:54:29 1401 1

原创 树莓派内核驱动编写——控制GPIO的输出

目录一、地址一、地址总线地址

2021-01-17 16:51:57 1019

原创 Linux网络编程

1、网络协议

2020-12-30 21:58:54 524 1

原创 C语言琐碎知识

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码

2020-11-21 16:23:05 684

原创 STM32F103点亮LED,3种方式

目录1、寄存器1.1、开启GPIOE对应时钟1.1.1、找到GPIOE对应时钟1.1.2、找到对应基地址1.1.3、找到APB2的偏移地址1.1.4、编写程序开启PE5时钟1.2、配置PE5对应寄存器1.2.1、找到对应基地址1.2.2、找到配置寄存器IOPE的所有偏移地址1.2.3、配置CRL寄存器1.3、控制ODR或BSRR和BRR寄存器点亮LED1.3.1、控制ODR寄存器亮灭1.3.2、控制BSRR和BRR寄存器亮灭2、库函数3、位操作4、总结1、寄存器1.1、开启GPIOE对应时钟1.1.1

2020-11-20 20:44:12 2816 1

原创 Linux rpmsg源码分析

RPMsg是利用通道进行数据通信,先用 /dev/rpmsg_ctrl0 设备通过ioctrl生成端点,然后使用生成的端点进行通讯名称服务,VIRTIO_RPMSG_F_NS 宏,不开启就不使用名称服务,使用就需要m核心先发送信息才可以注册设备m核心LinuxRPMsg内核驱动框架涉及到RPMsg框架、virtio框架、remoteproc子系统和mailbox子系统mailbox,驱动开发者可自我注册client生成设备提供APP层直接进行核间通信分析物理层,创建virtio dev。

2025-05-18 17:02:43 597

原创 vim的配置

【代码】vim的配置。

2025-05-10 17:32:39 408

原创 DMA映射

dmesg | grep -i dma 命令可以查看内核中可以申请的一致性内存大小空间,这个大小和系统平台有关,下面是64位系统。一般支持多种类型的缓冲区,常见的有。存在内存的一致性问题。是使用专门的接口分配一块。对内存进行访问的,所以。

2025-04-20 11:32:09 827

原创 xdma 驱动分析

xlx_wait_event_interruptible_timeout 等待中断唤醒。初始化DMA请求 xdma_init_request(sgt, ep_addr);处理描述符使用情况达到或超过引擎最大描述符数量的情况。

2025-04-20 10:04:28 1175

原创 创龙3588——debian根文件系统制作

开始构建,最终进入run_build_hooks 传入参数 build debian。make-targets | make-usage 参数的执行分支。run_build_hooks 函数。创建输出目录,软连接redme等。设置环境变量,处理特殊命令等。输出显示最终配置信息。

2025-01-02 16:37:19 1201

原创 of操作函数——获取中断资源

文章目录irq_of_parse_and_mapirqd_get_trigger_typeirq_get_irq_datagpio_to_irqof_irq_getplatform_get_irqirq_of_parse_and_mapunsigned int irq_of_parse_and_map(struct device_node *dev, int index);从设备节点的"interrupts"属性中解析和映射对应的中断号说明:dev: 设备节点, 表示要解析的设备节点。ind

2024-11-12 10:45:20 499

原创 systemd

在centos6之前使用上面方式(串)在centos7之后(含centos7)使用systemd来管理程序, 通过查看链接指向了systemd程序:(并)

2024-11-11 11:01:56 1125

原创 of 操作函数——获取属性

文章目录of_find_propertyof_property_count_elems_of_sizeof_property_read_u32_indexof_property_read_u64_indexof_property_read_variable_u32_arrayof_property_read_stringof_find_propertystruct property *of_find_property(const struct device_node *np, const char *

2024-11-10 16:56:12 775

原创 of 操作函数——获取设备树节点

文章目录of_find_node_by_nameof_find_node_by_pathof_get_parentof_get_next_childof_ find_ compatible_ nodeof_find_matching_node_and_matchof_find_node_by_namestruct device_node *of_find_node_by_name(struct device_node *from, const char *name);通过指定的节点名称在设备树中进行

2024-11-09 15:11:07 553

原创 设备树基本语法

用户根据特定需求添加的属性。这些属性可以用于提供额外的信息、 配置参数或元数据, 以满足设备或系统的特定要求。

2024-11-03 12:52:48 970

原创 dsp入门

选择properties。

2024-06-30 15:10:37 316

原创 cmake入门

cmake的作用,其实就是自动生成makefile,从而简化了makefile的编写,使其更加简单快捷。先附上完整工程的cmake通过cmake 来生成makefile,并指定编译器等make编译,make install安装。

2024-06-30 10:20:15 686

原创 智能离网微逆变系统

2022光伏电子单片机部分。电压,电流采样AD值。

2023-06-03 17:18:15 2336 2

原创 驱动(3种实现方法,2条路线)

设备和用户之间的桥梁,内核结构由用户级,内核级,硬件级驱动,操作硬件部分代码设备驱动模型其实是Linux内核为了管理硬件上的设备和对应的驱动制定的一套软件体系类(class)、总线(bus)、设备(device)、驱动(driver)、udev(自动创建设备节点和设备类)sysfs等都属于设备驱动模型的范畴。类(class)、总线(bus)、设备(device)、驱动(driver)都是 Linux 里面的一个结构体。每一个结构体变量都能代表一个实例kobject和对象生命周期。

2023-04-09 16:06:46 2972

原创 ftp云盘(3.0)

重新优化ftp项目,用到共享内存、信号量互斥与同步、大文件拆分传输、信号传递以及内网穿透

2023-03-25 17:12:34 772

原创 内核启动过程分析

总结:start_kernel函数中调用了很多的xx_init函数,全都是内核工作需要的模块的初始化函数,这些初始化之后内核就具有了一个基本的可以工作的条件了。位置在:linux-rpi-4.14.y/init/main.c。start_kernel函数位于main.c中。

2022-12-20 10:51:12 907

原创 根文件系统

发行版=内核+rootfs根文件系统根文件系统是特殊用途的文件系统根文件系统也必须属于某种文件系统格式,如ext3,ext4,FAT文件系统是一些代码,是一套软件这套软件的功能就是对存储设备的块(扇区)进行管理将这些扇区的访问变成了对目录和文件名的访问上层访问一个文件时,文件系统会将这个目录+文件名转换成对扇区号的访问不同的文件系统的差异就在于对这些扇区的管理策略和方法不同,譬如坏块管理、碎片管理。

2022-11-17 20:16:43 1149

原创 内核概述及配置编译

make xxx_defconfig解决的问题是大部分的配置项(这一步结束后99%的配置项就已经正确了),下来就是对个别不同的针对我们的开发板进行细节调整,细节调整就通过make menuconfig来完成。tristate意思是三态(对应Y、N、M三种选择方式),bool是要么真要么假(对应Y和N)本配置项依赖于另一个配置项,如果那个依赖的配置项为Y或者M,则本配置项才有意义。如果依赖的哪个配置项本身被设置为N,则本配置项根本没有意义。并不要求依赖的配置项一定是一个,可以是多个,而且还可以有。

2022-11-11 14:56:45 2513

原创 uboot环境变量和硬件驱动

ENV_SIZE环境变量最大内存,10k二、printenv命令

2022-10-27 19:54:14 1119

原创 uboot命令体系

uboot管理方式是:通过自定义段,实现。管理方式:数组,链表等。

2022-10-17 18:22:14 903

原创 uboot(五)—— main_loop

此函数会执行参数 s 指定的一系列命令,也就是环境变量 bootcmd 的命令。位置:u-boot-2022.01/common/main.c 40行。

2022-10-12 12:41:16 1029

原创 uboot(四)—— board_init_r

清bss段,然后执行board_init_r/** Clear BSS section ,清除bss段*/*/*/#endif。

2022-10-08 20:12:38 1297

原创 uboot(三)—— crt0_64.S(relocate_code)

位置u-boot-2022.01\arch\arm\lib\crt0_64.S。调用relocate_code实现重定位。的加载提供内存,避免内存践踏。搬运到高端内存区,为。

2022-10-08 20:02:41 628

原创 uboot(二)—— crt0_64.S(board_init_f函数)

board_init_f 在u-boot-2022.01\common\board_f.c。board_init_f_alloc_reserve:最终算出gd的内存地址,top指向。文件位置:u-boot-2022.01/arch/arm/lib/crt0_64.S。board_init_f_init_reserve:实例化gd,并初始化为0。现在我们已经映射了DRAM并开始工作,我们可以重新定位代码并继续从DRAM运行。串口、定时器、设备树、malloc、cpu、DM驱动模型、dram、

2022-10-03 19:44:03 1573

原创 uboot(一)—— start.S

进行地址无关的相对地址修复,以此保证后续在跳入c语言部分时可正常执行,一般不定义此配置则是继续往下执行boot流程。3.位置在 u-boot-2022.01/arch/arm/cpu/armv8/start.S。1.uboot编译完成后有一个uboot-boot.lds链接器文件。2.打开里面有一个ENYRY(_start),符号所在的文件就是整个程序的起始文件。对一些系统寄存器进行初始化。

2022-09-30 20:12:15 1248 1

原创 树莓派uboot配置编译

OS跑起来前,需要的一段引导程序负责部署整个计算机系统,引导操作系统内核启动并给内核传参提供一个命令行界面供人操作是一个开源项目,uboot就是universal bootloader(通用的启动代码)命令行用的行缓存,linux终端设计有3种缓冲机制:无缓冲、行缓冲、全缓冲。

2022-09-27 16:47:15 2217

原创 Makefile

定义和使用变量,和shell一样都没有变量类型,直接定义使用,引用变量时用$(var)

2022-09-16 16:49:59 290 1

原创 shell脚本

shell脚本其实是一类语言而不是一个语言。常用shell语言:sh、bash、csh、ksh、perl、python等脚本语言一般在嵌入式中应用,主要是用来做配置解释运行shell解析器会逐行的解释shell程序代码,然后一行一行的去运行。(顺序结构)shell是弱类型语言(语言中的变量如果有明确的类型则属于强类型语言;变量没有明确类型就是弱类型语言)shell中赋值的=两边是不能有空格的引用一个变量必须使用$符号,$符号就是变量解引用符号变量引用的时候可以$var,

2022-09-16 12:30:10 398

原创 树莓派电脑虚拟机3设备连接

2.固定ip,打开 sudo vi /etc/rc.local,输入ifconfig eth0 192.168.2.20。1.打开网络编辑器,桥接模式,选择本地网卡。ifconfig eth0 192.168.2.20 //固定IP,参数2是网卡名。2.进入Linux,点击有线设置(Wired Settings)1.输入ifconfig,查看eth0网卡,ip地址。设置IPv4,为手动,写入ip地址和子网掩码。1.树莓派断开串口登录,使用以太网登录。打开以太网设置,IPv4为固定IP。

2022-09-15 14:47:34 1135

原创 ARM裸机二

cache是一种内存,叫高速缓存。从容量来说:CPU < 寄存器 < cache < 内存DDR(RAM)从速度来说:CPU > 寄存器 > cache > 内存DDR(RAM)

2022-09-10 10:48:13 388

原创 ARM汇编

{r0-r6,pc} ^ ^作用:在目标寄存器有pc时,会同时将spsr写入cpsr,用于异常模式返回。协处理器和MMU,cache,TLB等处理有关,功能上和操作系统的虚拟地址映射,cache管理等有关。寄存器寻址:mov r1,r2 r1=r2;伪指令:本质不是指令,编译器环境提供,目的是指导编译过程,不会生成机器码。取指令--------->译码------------>执行。寄存器移位寻址:mov r0,r1,lsl #3。...

2022-09-01 16:29:44 424

原创 MSP432P 汇编,C语言点灯

一个指针变量占用4字节内存空间(无论是什么类型的指针变量都是4,类型只决定可以访问的内存空间是多少字节,例如:char*只能访问1字节内存,int*访问4个连续的内存空间4字节)注:写入只能用STRH指令,不能用STR(因为是16位数据,用STR是32,会超出越界)所以指针类型也必须是16位的,32位会越界访问(导致程序不能正常运行),对应P1口的8个IO,设置其工作模式,输入输出。可以看出P1口的寄存器DIR,OUT地址分别是。,对应P1口的8个IO,设置其输出高低电平。地址是32位,存储是16位。...

2022-09-01 16:23:29 1020

原创 ARM裸机

一、从源码到cpu执行过程二、汇编和高级语言差异三、CISC和RISC四、程序和数据五、冯诺依曼结构与哈佛结构六、寄存器七、内存外存

2022-08-28 17:30:39 348

原创 光伏电子工程的设计与实施2022——单片机力控部分实现思路

主控IAP15W4K61S4,外设有串口屏,8010,485,WiFi,都是通过串口实现通讯。EEPROM实现断电数据保护。

2022-08-23 12:59:17 3617 2

原创 STC——EEPROM(断电数据保护)

IAP15系列没有EEPRMOM,用户可直接操作用户程序区扇区檫除,没有字节檫除写入要先檫除,然后在写入。

2022-07-15 16:15:06 2276 2

dsp开发环境搭建手册,无安装包

dsp开发环境搭建手册,无安装包

2024-06-30

typora编辑器.zip

typora编辑器.zip

2023-03-14

光伏电子工程的设计与实施2022 赛题2单片机代码

光伏电子工程的设计与实施2022 赛题2单片机代码 没用WiFi部分代码,代码没有注释而且命名不规范(因为是练习时随手打的) 思路在博文:https://blog.csdn.net/m0_51247005/article/details/125478010

2023-03-14

Ncurse贪吃蛇源码

Ubuntu环境,Ncurse贪吃蛇源码,实现蛇的移动长大,撞墙或自己死亡。

2023-03-14

光伏电子工程的设计与实施

光伏电子工程的设计与实施

2022-10-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除