
嵌入式
文章平均质量分 58
풍殇い^κ
这个作者很懒,什么都没留下…
展开
-
stm32mp135d bringup
关于 stm32mp135d的移植 一共分为4个部分文件系统编译后面再说,使用 buildroot 或者 yocto我的板子型号为:代码正点原子为基础在这之前,bringup,可以先从。原创 2024-04-26 17:22:53 · 714 阅读 · 0 评论 -
Stm32CubeMX 生成设备树
使用STM32CubeMX配置Stm32设备树。原创 2024-04-26 16:54:38 · 1518 阅读 · 0 评论 -
Linux之Makefile学习
关于Linux系统下Makefile学习的简单总结1.Makefile简介2.基本函数3.解释代码中的含义1.条件编译2.变量定义3.解决目标文件和依赖4.伪目标4.代码测试1.Makefile2.module13.module24.include5.build1.Makefile简介一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile原创 2021-02-07 22:52:03 · 342 阅读 · 0 评论 -
网络OSI模型的简单总结
网络OSI模型的简单总结1.什么是OSI?2.七层模型1.物理层2.数据链路层(Data Link Layer)3.网络层(Network Layer)4.传输层(Transport Layer)5.会话层(Session Layer)6.表示层(Presentation Layer)7.应用层1.什么是OSI?Open System Interconnection开放式系统互联:把网络通信的工作分为7层,(从下到上)分别是物理层,数据链路层,网络层,传输层,会话层,表示层和应用层。这种框架性的设计原创 2021-01-01 21:07:43 · 447 阅读 · 1 评论 -
树莓派串口简单测试语音识别模块
1.使用语音模块:LDV7 语音识别模块模块参数:型号:YS-LDV7名称:一体化语音识别模块规格:43*29.7MM供电电压:5V (内部工作电压 3.3V)待机电流:30MA识别时电流:45MAIO 口输出:高电平为 3.3V通信方式:串口通信(5V TTL 电平,不可直接接 RS232、RS485)2.简单使用模块实际原理为 1 片 STC11 单片机+1 片 LD3320 组合形成的一款语音识别模块,语音识别部分已写好驱动程序,用于只需要对 STC 单片机进行编程加入自己的原创 2020-12-30 17:01:06 · 1264 阅读 · 3 评论 -
树莓派控制继电器
树莓派控制继电器1.需要用到wiringPi库,故包含下面头文件2.使用前确保接口正常初始化3.配置引脚4.让对一个已配置为输出模式的引脚输出指定的电平信号5.例子1.需要用到wiringPi库,故包含下面头文件# include<wiringPi.h>2.使用前确保接口正常初始化int wiringPiSetup (void) 3.配置引脚返回:执行状态,-1表示失败 当使用这个函数初始化树莓派引脚时,程序使用的是wiringPi 引脚编号表。void pinMode (i原创 2020-12-27 19:32:14 · 482 阅读 · 0 评论 -
Linux—gdb调试简单实现
1.GDB简述GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能:(1)启动程序,可以按照工程师自定义的要求随心所欲的运行程序。(2)让被调试的程序在工程师指定的断点处停住,断点可以是条件表达式。 (3)当程序被停住时,可以检查此时程序中所发生的事,并追索上文。 (4)动态地改变程序的执行环境。不管是调试Linux内核空间的驱动还是调试用户空间的应用程序,掌握gdb的用法都是必须。2.安装gdb增强工具gdb工具时系统自带的,但是为原创 2020-12-24 12:50:59 · 433 阅读 · 0 评论 -
Linux学习—strtok函数的基本实现
1.简述分解字符串为一组字符串。s为要分解的字符,delim为分隔符字符(如果传入字符串,则传入的字符串中每个字符均为分割符)。首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。头文件#include<string.h>原型char *strtok(char s[], const char *delim);使用NULL才可以获取后面的字符,应该为第一次分割后str已经被破坏 char *p; char str[128] = {"hello world原创 2020-12-24 11:44:22 · 372 阅读 · 1 评论 -
Linux嵌入式学习—信号通讯
信号基本概念信号(signal)是linux进程通讯中唯一的异步通讯方式。信号从软件层次上看是对中断机制的一种模拟。一个进程收到信号时的处理方式与CPU收到中断请求时的处理方式一样。收到信号的进程会跳入信号处理函数,执行完后再跳回原来的位置继续执行。信号来源:有一类信号是已经被定义好的,如数据异常、指令异常、定时器、abort等。他们都有自己特殊的用法,如:发生异常时会触发异常信号。头文件#include <signal.h>函数原型ypedef void (*sighandle原创 2020-12-03 12:56:32 · 253 阅读 · 1 评论 -
基于链表实现的学生成绩管理系统
C语言学习成果,主要是加强对链表的熟练操作。。。#include<stdio.h>#include<stdlib.h>//学生结构体struct Student { int ID; int Chinese; int Math; int English; struct Student *next;};//班级结构体struct Class{ int Classnum; struct Student *stuHead; struct Class *n原创 2020-12-24 09:56:14 · 1389 阅读 · 1 评论 -
ftp云盘—服务端server
题目ftp云盘,代码编写分为客户端,服务端,配置文件通过TCP协议,利用套接字socket具体实现。实现功能分为客户端(lls,lpwd,lcd),服务端(ls,cd,pwd,)以及双方文件交互功能(get,put)此为ftp云盘服务端#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <stdlib.h>#include <netinet/in.原创 2020-12-24 09:44:06 · 682 阅读 · 0 评论 -
ftp云盘—客户端client
题目ftp云盘,代码编写分为客户端,服务端,配置文件通过TCP协议,利用套接字socket具体实现。实现功能分为客户端(lls,lpwd,lcd),服务端(ls,cd,pwd,)以及双方文件交互功能(get,put)此为ftp云盘客户端//包含头文件#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <stdlib.h>#include <net原创 2020-12-24 09:33:59 · 531 阅读 · 0 评论 -
ftp云盘—配置文件
#define LLS 1#define LPWD 2#define LCD 3#define CD 4#define LS 5#define PWD 6#define PUT 7#define GET 8#define QUIT 9struct Msg{ char data[128]; char dataBuf[128];};原创 2020-12-24 09:33:06 · 267 阅读 · 0 评论 -
Linux 交叉编译
交叉编译是什么,为什么要交叉编译交叉编译是什么?交叉编译 是在一个平台上生成另一个平台上的可执行代码。我们再windows上面编写C51代码,并编译成可执行代码,如xx.hex,是在c51上面运行,不是在windows上面运行 我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out, 是在树莓派上面运行,不是在ubuntu linux上面运行 编译:是在一个平台上生成在该平台上的可执行代码 C51 交叉编译的发生在keil(集成环境上面) stm32 ..原创 2020-12-21 21:03:57 · 671 阅读 · 1 评论 -
Linux 文件系统
1. 什么是文件系统? 常规认知: 根目录 文件系统是操作系统用于明确存储设备组织文件的方法。 以上说的方法:就是文件管理系统(程序),简称文件系统 2. 文件系统(文件管理系统的方法)的种类有哪些? FAT VFAT NTFS EXT1/2/3/4 HFS .... 树莓派查看文件系统的命令: df -T vfat : boot(bootloader, kernel) (基于磁盘) ext4 : 根目录 (基于磁盘) tmpfs : 内存文件系统3. 什么是分区?win原创 2020-12-19 21:19:04 · 197 阅读 · 2 评论 -
Linux内核配置
树莓派高阶开发课程ubuntu18.04版本安装环境自行搭建,包括一些基本安装,vi,ifconfig等,自行百度关键字操作。树莓派等芯片带操作系统的启动过程 C51,STM32(裸机)》》》》》》C直接操控底层寄存器实现相关业务。 业务流程型的裸机代码 遥控灯: while(1) 垃圾桶:WemosD1 LOOP 恩智浦智能车: stm32 X86,Intel windows 启动过程: 电源 -》 BIOS -》windows内核-》C原创 2020-12-19 12:07:15 · 668 阅读 · 0 评论 -
树莓派开发—基础配置
1.树莓派刷机插入读卡器,打开文件,会自动识别到内存卡,点击写入即可,而后将内存卡插入树莓派。2.树莓派登录2.1HDMI视频线 连接到显示器2.2串口 2.2.1设备破解 默认情况,树莓派的串口和蓝牙连接。 想办法断开蓝牙连接,把串口用来数据通信 https://blog.youkuaiyun.com/syjsxxjy/article/details/80774262 修改系统配置,启用串口登录树莓派1.打开SD卡根目录的"config.txt"文件,将以下内容添加在最后并且保原创 2020-12-13 18:45:01 · 639 阅读 · 0 评论 -
(Linux下)基于Nucrses的贪吃蛇小游戏
代码核心是基于链表的使用要运行此代码,需要安装Nucrses库#include<curses.h>#include<stdio.h>#include<stdlib.h>#include <pthread.h>//使用绝对值确保方向#define UP 1#define DOWN -1#define LEFT 2#define RIGHT -2struct Snack{ int row; int原创 2020-12-12 19:55:53 · 497 阅读 · 1 评论 -
Linux嵌入式学习—网络编程
1.socket概念Linux中的网络编程是通过socket接口来进行的。socket是一种特殊的I/O接口,它也是一种文件描述符。它是一种常用的进程之间通信机制,通过它不仅能实现本地机器上的进程之间的通信,而且通过网络能够在不同机器上的进程之间进行通信,socket也有一个类似于打开文件的函数调用,该函数返回一个整型的socket描述符,随后的连接建立、数据传输等操作都是通过socket来实现的;2.socket类型1)流式socket(SOCK_STREAM) à用于TCP通信流式套接字提供可原创 2020-12-12 18:02:13 · 612 阅读 · 1 评论 -
Linux嵌入式学习—多线程
(1)线程概述进程是程序执行时的一个实例,即它是程序已经执行到何种程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。(2)使用线程的理由使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式。我们知原创 2020-12-03 13:14:36 · 1446 阅读 · 1 评论 -
Linux嵌入式学习—共享内存
简介:共享内存具有最高的效率共享内存是进程间通信中最简单的方式之一。共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针。当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改。实现步骤:1.创建共享内存头文件:#include <sys/ipc.h>#include <sys/shm.h>原型:int shmget(key_t key, size_t size, int shmflg);原创 2020-12-01 12:13:50 · 366 阅读 · 1 评论 -
Linux嵌入式学习—消息队列
消息队列:msgrcv, msgsnd - message operationsThe msgsnd() and msgrcv() system calls are used, respec‐tively, to send messages to, and receive messages from,a message queue. The calling process must have write permission on the message queue in order to sen原创 2020-12-01 11:58:48 · 471 阅读 · 1 评论 -
Linux基础学习—命名管道
原型#include <sys/stat.h>int mknod(const char* path, mode_t mod, dev_t dev);int mkfifo(const char* path, mode_t mod);特点为了使任意两个进程之间能够通信,就提出了命名管道(named pipe 或 FIFO)。1、与管道的区别:提供了一个路径名与之关联,以FIFO文件的形式存储于文件系统中,能够实现任何两个进程之间通信。而匿名管道对于文件系统是不可见的,它原创 2020-12-01 11:37:09 · 268 阅读 · 1 评论 -
Linux基础学习—匿名管道
进程可以通过调用函数pipe()创建一个管道。函数pipe()的原型如下:int pipe(int fildes[2]);从本质上来说,pipe()函数的功能就是创建一个内存文件,但与创建普通文件的函数不同,函数pipe()将在参数fildes中为进程返回这个文件的两个文件描述符fildes[0]和fildes[1]。其中,fildes[0]是一个具有“只读”属性的文件描述符,fildes[1]是一个具有“只写”属性的文件描述符,即进程通过fildes[0]只能进行文件的读操作,而通过fildes原创 2020-12-01 10:39:11 · 339 阅读 · 1 评论 -
Linux基础学习—popen函数
popen()函数函数定义#include <stdio.h>FILE * popen(const char *command , const char *type );int pclose(FILE *stream);函数说明 popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程。这个管道必须由pclose()函数关闭,而不是fclose()函数。pclose()函数关闭标准I/O流,等待命令执行结束,然后返回she原创 2020-11-29 18:22:50 · 594 阅读 · 1 评论 -
Linux基础学习—system函数
system函数:表头文件#include<stdlib.h>定义函数int system(const char * string);函数说明 system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令返回值 如果fork()失败 返回-1 如果exec()失败,表示不能执行Shell,返回值相当于Shell执行了exit(127) 如果执行成功则返回子Shell的终止状态System与e原创 2020-11-29 18:17:13 · 409 阅读 · 0 评论 -
Linux基础学习—exec与fork共同使用
exec与fork共同使用,修改配置文件数据#include<sys/types.h>#include<sys/stat.h>#include<stdio.h>#include<unistd.h>#include<string.h>#include<stdlib.h>#include<fcntl.h>int main(){ pid_t pid; while(1){ int data; prin原创 2020-11-29 18:07:30 · 380 阅读 · 1 评论 -
Linux基础学习—exec组函数
exec函数功能: 在调用进程内部执行一个可执行文件。可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。exec函数族提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了。这6个函数可以划分为两组:(1)execl、execle和execlp。(2)execv、execve和execvp。exec函数的原型如下:原创 2020-11-29 17:58:36 · 797 阅读 · 1 评论 -
Linux基础学习—fork,vfork函数
fork函数fork系统调用用于创建一个新进程,称为子进程,它与进程(称为系统调用fork的进程)同时运行,此进程称为父进程。创建新的子进程后,两个进程将执行fork()系统调用之后的下一条指令。子进程使用相同的pc(程序计数器),相同的CPU寄存器,在父进程中使用的相同打开文件。它不需要参数并返回一个整数值。下面是fork()返回的不同值。负值:创建子进程失败。零:返回到新创建的子进程。正值:返回父进程或调用者。该值包含新创建的子进程的进程ID#include<stdio.h..原创 2020-11-27 16:48:47 · 249 阅读 · 1 评论 -
Arduino下的 基于Wemos的智能开盖垃圾桶
来个小项目,练练手。。。此感应垃圾桶是基于超声波感知距离而实现#include <Servo.h>#define Echo D5#define Trig D6#define EnginePIN D2Servo myengine;long getTime(){ digitalWrite(Trig,HIGH); delayMicroseconds(10); digitalWrite(Trig,LOW); //发送一个10us的脉冲 return pu原创 2020-11-26 20:02:40 · 982 阅读 · 0 评论 -
Wemos芯片部分功能使用
Wemos芯片基本使用特性1 .基于 ESB8266EX2.Arduino兼容,使用RDUINO IDE来编程3.11 X l/O 引脚4.1 X ADC引脚(输入范围O-3.3V)5.板载5V 1A幵关电源(髙输入电压24V)1.描述:开启串口,通常置于setup()函数中。原型:Serial.begin()2.参数;•speed:波特率,一般取值9600,115200等config:设置数据位、校验位和停止位。亲认SERIAL_8N1表示8个数据位,元校验位,1个停止位无原创 2020-11-26 20:00:38 · 696 阅读 · 0 评论 -
关于链表的一些简单使用
简述链表原理类似于这样,用结构体建立起每个节点的联系,即next中存放下一个节点的地址struct Test{int data;//用于存放数据struct Test *next;//用于存放下一个节点的头};.第一步Ctrl +Shift +T 叫出命令操作界面(二)一些最简单,比较常用的指令vi + 文件名新建或打开文件 进入文件后的编辑命令(1)按 “ i ” 进入编辑模式,可对文件进行编辑不同于wind原创 2020-11-25 17:10:09 · 217 阅读 · 1 评论