自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(76)
  • 资源 (1)
  • 收藏
  • 关注

原创 LDD学习笔记 -- Linux字符设备驱动

例如前面的伪字符设备,有一块内存数组(设备内存buffer)。当用户程序在该设备文件上发出read系统调用时,应该将数据从设备buffer传到用户buffer。设备创建时候在VFS注册设备号,虚拟文件系统,将设备文件的设备号与驱动程序列表进行比较,选择正确的驱动程序,并将用户请求连接到对应驱动程序的文件操作方法。用户空间的指针不是完全可信的,用户地址空间有时可能无效,虚拟内存管理器可以交换出这些内存位置。字符设备指的是像内存区域这样的硬件组件,通常称为伪设备;可以动态申请主设备号,保证唯一性,传输设备号(

2024-01-07 20:50:14 1079 1

原创 LDD学习笔记 -- Linux错误码

错误码会从内核空间传到用户空间,用户空间的errno会被设置称内核模块返回的错误值,用户程序以确定内核空间的系统调用处理发生的错误。系统调用和库函数使用这些错误代码指示程序执行期间可能发生的各种错误情况。终端设备上不支持某个操作,通常用于和ioctl相关的错误。当一个文件/目录已存在,尝试使用相同名称创建操作时返回。Pip,试图写入没有读取器的管道,或管道写入操作失败。例如没有访问文件/资源等特定操作的权限。被引用的文件/目录在文件系统中不存在。请求的设备或资源已被另一个进程使用。文件中具体错误码的定义。

2024-01-07 18:42:32 546

原创 LDD学习笔记 -- Linux设备驱动概述

概述分类字符设备驱动块设备驱动设备文件设备驱动:配置和管理设备的一段代码。负责与硬件设备进行交互,并导出应用程序和其他内核模块可以用来访问设备的接口。该代码能够通过向设备发送数据来配置设备,能够处理设备的请求。为用户空间提供了正确访问设备的接口,用户空间的应用程序可以和设备通信,让OS或应用程序知道如何处理设备。用户应用程序通过writeopenread系统调用与设备对话。系统调用被驱动代码处理,以接触设备的各种寄存器。内核的作用是。

2024-01-04 19:31:26 479

原创 LDD学习笔记 -- Linux内核模块

在运行时添加 / 删除的代码Linux支持在系统启动和运行时从内核中动态的插入或移除代码。在运行时添加/删除的代码叫做内核模块。Linux内核模块通过向内核引入新的功能(安全、设备驱动、文件系统驱动、系统调用、其他)来动态的扩展内核的功能。模块化的方法,像正在运行的内核的插件。嵌入式Linux系统可以由最小的基本内核镜像 + 可选的设备驱动/其他功能通过模块插入按需提供例如一个热拔插的USB设备,它的驱动程序(Linux内核模块),当其插入后会动态加载到内核中。

2024-01-03 19:33:31 1008

原创 LDD学习笔记 -- 用户空间 & 内核空间

代码运行在内核空间,CPU不受限模式。内核代码可以不受限制的访问系统资源,包括内存、硬件外设、处理器指令、控制设置;系统调用处理程序(System call handlers),内核空间的一部分,负责执行系统调用;用户空间应用包括日常软件,网页浏览器、文本编辑器、媒体播放器、任何与用户交互的程序;内核空间包含关键部分:Linux调度器、设备驱动、和操作系统各个子系统相关的代码;用户及应用程序执行的内存空间,在用户空间,CPU以受限模式运行;指操作系统内存的一部分,内核(操作系统的核心)在此驻留并执行;

2024-01-02 16:22:42 442

原创 LVGL使用

配置成1,使用用户自定义的malloc/free,需要把下面的。配置成0,使用LVGL内部的内存管理,分配走。用LVGL自带的可以监测内存占用情况。中,调用LVGL的心跳。

2023-06-28 16:30:50 943

原创 LVGL--Font

也称位图字体,其中每个字形都以一组二维像素信息表示。难以进行放缩,特定的点阵字体只能清晰地显示在相应的字号下。否则文字呗强行放大会有损字形,产生马赛克式的锯齿边缘。对于字号8-14px的尺寸较小的汉字字体,现今仍然被使用于荧幕显示上,能够提供更高的显示效果。

2023-05-25 21:35:47 3028

原创 嵌入式显示框架LVGL

LVGL官网一个免费开源的轻量、多功能图形库,提供嵌入式GUI所需的功能,具备易于使用的图形元素、美观的效果和低内存占用。TouchGFX介绍一款针对STM32微控制器进行了优化的免费高级图形软件框架,为基于STM32的硬件快速完成GUI应用程序。TouchGFX由三个主要部分组成:两个工具和一个框架。TouchGFX Designer 拖放式图形构建PC工具TouchGFX Generator STM32CubeMXPC工具进行软硬件配置可生成工程。

2023-05-25 20:45:22 48

原创 Git remote 及 提交操作步骤

创建github账号,添加ssh-key,fork某个仓库(apach/nuttx为例),本地git已经配置好了前提。更新名称为remote_repository的远程仓库上的所有branch的最新commit-id,记录到。是一个版本链接,记录在本地的一个文件中,指向目前已经从远程仓库取下来的分支的末端版本。[本地,远程github fork的都和社区里的一样了]来添加当前本地仓库的远程仓库,这样本地仓库会知道当。,建立了本地仓库和远程仓库的关联,以后只需要。本地从自己的github克隆fork的代码。

2023-05-24 20:35:21 821

原创 CPU Architecture

大多数程序运行在用户模式,不能访问系统所以资源,需进行模式切换,用户模式不能直接进行模式切换,需要借助。在某种模式下,CPU使用的是这种模式的资源(例如寄存器),免去保存上一模式所使用的寄存器。芯片内核寄存器组,Cortex-A9有9种运行模式,每种模式都有一组与之对应的寄存器组。来完成模式切换,需要切换模式时,用户程序产生异常,在异常处理过程中完成处理器模式切换。R14(LR)链接寄存器,7个物理寄存器,其中一个是User和Sys和Hyp共用的;选取了使用频率高的简单指令,指令长度固定,多为单周期指令。

2023-05-19 14:36:56 690

原创 VSCode嵌入式开发环境搭建

看这个链接就可以了,后面下载调试有点问题看下3.3。

2023-03-21 19:12:40 4256

原创 VSCode打开 C(嵌入式) 工程的一些记录

快速使用VSCode阅读编辑嵌入式C代码,快速配置c_cpp_properties.json

2022-08-07 12:30:17 1197

原创 《构建之法》笔记---第十章 典型用户和场景

典型用户(Persona)和场景(Scenario),软件功能说明书(FunctionalSpec)和技术说明书(DesignDoc),功能驱动是设计(FDD),用例(UseCase)

2022-07-28 08:51:23 233

原创 《构建之法》笔记---第六章 敏捷流程

敏捷流程及其原则,Backlog、Burn-down、Sprint、Scrum方法论,各种软件开发方法论的优缺点,选择软件流程的根据

2022-07-20 18:53:47 190

原创 《构建之法》笔记---第四章 两人合作

代码规范,极限编程,结对编程,两人合作的不同阶段

2022-07-15 19:03:18 270

原创 《构建之法》笔记---第二章 个人技术和流程

个人技术和流程 单元测试 回归测试 效能分析 个人软件开发流程

2022-07-09 18:27:39 228

原创 GNU GCC 编译

这篇起源于我试用g++指令编译c文件可以,gcc指令编译cpp文件出错了,加-lstdc++参数可以,。(以为gcc只编译c g++只编译cpp)哎,只想说我对这个世界一无所知。。。????GNU(GNU‘s Not Unix)????官网GNU是一个自由软件操作系统—就是说,它尊重其使用者的自由。GNU操作系统包括GNU软件包(专门由GNU工程发布的程序)和由第三方发布的自由软件。GNU的开发使你能够使用电脑而无需安装可能会侵害你自由的软件。GNU计划GNU计划,是由Richard Stal

2021-12-08 19:49:04 1342

原创 VSCode使用的一些配置

????磨刀不误砍柴功?是嘛????VSCode使用的一些配置VSCode 快捷键VS Code for C/C++ Project [????](https://code.visualstudio.com/docs/languages/cpp)安装插件 `C/C++`安装编译器配置IntelliSense [c_cpp_properties.json]构建应用程序(build)[Task.json]简单的单个文件有makefile文件的工程调试程序(debug)[launch.json]xxx.json

2021-11-15 20:07:32 2720 1

原创 STM32CubeMX(HAL库)--记我的1个智障操作 (ʘʚʘ嘎?

STM32CubeMX【HAL库】--记我的1个智障操作 (ʘʚʘ嘎?简单说:复杂且啰嗦地说(因为比较无聊且不想干啥):简单说:问题:stm32的一个开发板,成功下载并跑一个程序后,再想下载就下载不进去了,可以看到Debug里选择ST_LINK后,识别不到设备,无法下载了。下载方式:ST_LINK排除:接线什么的没有问题;设备管理器里的通用串行设备的驱动也正常;程序里并没有占用SWD的IO口。原因:使用的工程里文件stm32f1xx_hal_msp.c 有句话把Debug调试接口

2021-07-04 23:43:54 274 4

原创 加密算法简单了解——数字签名和证书

哒哒哒添加链接描述添加链接描述添加链接描述

2021-06-28 13:35:39 1502 1

转载 加密算法简单了解——HASH、MAC及一些加密模式

加密算法简单了解——HASH、MAC及一些加密模式hash算法MAC(消息验证码)算法hash与MAC对比MAC与对称加密算法组合的一些不同加密模式Encrypy-and-MAC(E&M)MAC-then-Encrypt(MtE)Encrypt-then-MAC(EtM)主要从几篇文章中学到的:https://zhuanlan.zhihu.com/p/270949014hash算法将任意数据都转换成一个固定长度的字符串。通过哈希后的值几乎无法推导出原文(单向,不可逆)。而且两个不同的原文哈希后

2021-06-21 15:27:01 5596

转载 .ini文件——配置文件

.ini文件 - 配置文件简介文件扩展名==格式==实例作用经验【转载】:https://blog.csdn.net/a123441/article/details/90668032为什么要用INI文件?如果我们的程序没有任何配置文件时,这样的程序对外是全封闭的,一旦程序需要修改一些参数必须要修改程序代码本身并重新编译,这样很不好,所以要用配置文件,让程序出厂后还能根据需要进行必要的配置;配置文件有很多,如INI配置文件,XML配置文件,还有就是可以使用系统注册表等。简介*.ini文件是Initia

2021-05-31 16:39:34 4807

原创 APDU应用协议数据单元

APDU应用协议数据单元0.PDU(ProtocolDataUnit)1.APDU(ApplicationProtocolDataUnit)1.1 APDU1.2 命令APDU的四种组成格式1.3通用APDU指令集1.4响应APDU格式参考链接0.PDU(ProtocolDataUnit)协议数据单元。对等层次直接传递的数据单位。物理层的PDU是数据位(bit),数据链路层的PDU是数据帧(frame),网络层的PDU是数据包(packet),传输层的PDU是数据段(segment),其他更高层次的PD

2021-05-17 00:08:21 2082

原创 加密算法简单了解

加密算法简单了解术语数据加密加密算法宏观三大类对称加密(私钥加密)算法非对称加密算法哈希算法链接术语明文(plaintext):没有进行加密,能够直接代表原文含义的信息密文(ciphertext):经过加密处理后,隐藏原文含义的信息加密(encryption):将明文转换成密文的实施过程解密(decryption):将密文转换成明文的实施过程密码算法:密码系统采用的加密方法和解密方法,随着基于数学密码技术的发展,加密方法一般称为加密算法,解密方法一般称为解密算法。密钥 :分为加密密钥和解密密

2021-05-16 17:29:58 874

原创 联想G40-70旧物改造小总结——替换固态硬盘电池光驱啥的

联想G40-70旧物改造小总结——替换固态硬盘电池光驱硬件固态硬盘光驱位的机械硬盘软件参考连接记录一下挽救旧笔记本生命的过程,好像给它做手术哈哈硬件内存条之前已经加了一个,所以现在有两个内存条。要做的是:买一块固态硬盘替换原先的机械硬盘,在固态里面安装系统和软件;再买一个硬盘支架,和替换下来的固态硬盘安到一起把原先光驱替换下来;买个新电池换换,感觉新电池也就那样,待机很一般就三个小时左右,不过旧电池更辣鸡。固态硬盘查一下自己电脑硬盘的接口型号,在电脑官网服务处输入主机编号查询一下硬件配置

2021-02-11 12:52:52 7416 5

原创 C/C++学习指南》语法篇—笔记 (二十三、模板)

C/C++学习指南》语法篇—笔记 (二十三、模板)template:定义一个模板,自动适应各个类型template <typename T>T findmax(T arr[], int len){ T val = arr[0]; ...}相同的算法,元素类型用T代替。使用时,用<>来具体指导typename的类型。int result = findmax<int>(arr,4);类模板template <typename T>cl

2020-08-08 21:28:52 152

原创 《C/C++学习指南》语法篇—笔记 (二十二、内部类与名字空间)

《C/C++学习指南》语法篇—笔记 (二十二、内部类与名字空间)内部类名字空间内部类把一个类定义写在另一个类的内部Class AAA{public: //定义一个内部类 class Inner { public: char name[64]; };};在使用内部类时,类名要使用全称 AAA::InnerAAA::Inner a;特别:内部类和外部类互相没有特权,不是朋友关系,不是父子关系,没有任何特殊关系。外部类无法自由访问内部类,内部类也同样无法自由访问外部类。名字

2020-08-08 21:17:55 152

原创 《C/C++学习指南》语法篇—笔记 (二十一、重载操作符)

《C/C++学习指南》语法篇—笔记 (二十一、重载操作符)重载算数操作符重载算数操作符class Fraction{public: Fraction(int n, int d):num(n),den(d) { } int num; //分子 int den; //分母};operator +是重要的重载操作符,形式上类似于成员函数重载操作符形式上像一个函数,但它不是函数名称:operator +,固定不变返回值:类型不变,总是为该对象的类型参数:基本上也不变受public

2020-08-08 21:07:43 156

原创 《C/C++学习指南》语法篇—笔记 (二十、拷贝构造函数)

《C/C++学习指南》语法篇—笔记 (二十、拷贝构造函数)拷贝构造函数是一种特殊的构造函数:是构造韩叔叔,函数名的类名、没有返回值特殊的构造函数,参数形式的固定的 const Object(类名)& otherclass Object{public: Object(const Object& other);};作用:以一个对象为蓝本,来构造另一个对象,a是b的一个拷贝/备份,两者内容完全相同。Object b;Object a(b); //或写成 Object

2020-08-08 20:33:18 141

原创 《C/C++学习指南》语法篇—笔记 (十九、继承)

《C/C++学习指南》语法篇—笔记 (十九、继承)继承概念虚拟继承(函数重写)继承关系中的构造与析构类的大小多重继承纯虚函数与抽象类继承概念class B 继承于 class A,把A称为父类(基类),把B称为子类(派生类)class B : public A {};当B继承与A时,自动将父类中的所有public成员继承。访问修饰符:protected(受保护的):该成员不能被外部访问,同private该成员可以被子类继承,同public子类和父类在内存上的关系:子类对象的前半部

2020-08-08 20:09:59 157

原创 《C/C++学习指南》语法篇—笔记 (十八、动态创建对象)

《C/C++学习指南》语法篇—笔记 (十八、动态创建对象)在C++中,用new/delete操作符取代malloc/free标准库函数申请/释放一个对象:int* p = new int; 或 int* p = new int(12); //设初始值delete p;特殊:new返回值直接就是对象指针,不用转换类型,new的时候可以设初始值,new操作符不用手动计算申请空间大小。申请/释放多个对象:int* p = new int[1024]; delete [] p;注:使用[]指

2020-08-07 22:15:36 177

原创 《C/C++学习指南》语法篇—笔记 (十七、面向对象编程 类)

《C/C++学习指南》语法篇—笔记 (十七、面向对象编程 类)类(class)面向对象编程,一种设计思想。面向对象编程的实现:假设存在一个对象,初步设想它应该提供哪些服务。定义如何使用它的服务,细化为函数。创建销毁对象,其它功能函数(该对象提供的服务)选择一种实现方法,写程序完成上述函数接口。类(class)是对结构体struct的增强,也是用于自定义类型。将关键字struct改为class;增加访问修饰符 pubilc/private/protectedclass Object{p

2020-08-07 21:57:09 156

原创 《C/C++学习指南》语法篇—笔记 (十六、多文件项目及编译过程)

《C/C++学习指南》语法篇—笔记 (十六、多文件项目及编译过程)extern项目生成过程 build头文件及include预处理指令--define宏定义★★★main函数的参数与返回值externextern:声明外部函数。在A.cpp中使用B.cpp中的函数,需要extern声明。extern:声明外部全局变量在A.cpp中访问B.cpp中的全局变量,需要extern声明作用:告诉编译器,在某个cpp文件中,存在那么一个函数/全局变量。符号(symbol):把函数名和全局变量名称为符号。

2020-08-05 21:29:14 220

原创 《C/C++学习指南》语法篇—笔记 (十五、文件操作)

《C/C++学习指南》语法篇—笔记 (十五、文件操作)保存数据到文件写入数字写入字符串写入结构体读取数据文件用于持久的存储数据。断电后数据不消失,下次加点,可以读取。文件属性:文件名路径长度,以字节计算内容只读/读写标准C函数操作文件:fopen:打开一个文件fclose: 关闭文件fwrite:写入数据fread:读出数据保存数据到文件1、打开文件FILE* fopen(const char* filename, const char* mode);filenam

2020-08-04 22:21:57 171

原创 《C/C++学习指南》语法篇—笔记 (十四、ANSI C标准函数库)

《C/C++学习指南》语法篇—笔记 (十四、ANSI C标准函数库)sprintf 与 sscanf ANSI组织,定义了C标准,及标准库函数,即这套函数在任何平台上都被支持,且保证函数功能一致(基本一致)。ANSI C标准函数库(中文)sprintf 与 sscanf <stdio.h>sprintf 与 sscanf 字符串的格式化与解析sprintf:将相关内容格式化到目标缓冲区里#include <stdio.h>...char buf[128];s

2020-08-04 16:25:02 183

原创 《C/C++学习指南》语法篇—笔记 (十三、字符串)

《C/C++学习指南》语法篇—笔记 (十三、字符串)字符串的几种形式字符串操作字符串插入/删除字符串分割C分格字符串 (C-Style String)在内存中紧密排列的一串字符,以0结尾。以内存的首地址来代表该字符串,char*字符串的几种形式字符数组 char buf[128] = "hello"; char* p = buf;char*指针字符串常量 "hello world"注:都是 char*类型的字符串常量:字符串常量类型是const char*,它本身表示一个内存地址

2020-08-04 15:33:37 126

原创 《C/C++学习指南》语法篇—笔记 (十二、引用)

《C/C++学习指南》语法篇—笔记 (十二、引用)C++特有的。引用 (a reference of target):本质上是指针,指针类型: ---------- 引用类型:int* int&double* double&Object* Object&指针定义int a = 123;int* p = &a; //【p指向了变量a】*p = 999;引用定义:i

2020-08-04 11:35:47 114

原创 《C/C++学习指南》语法篇—笔记 (十一、链表)

《C/C++学习指南》语法篇—笔记 (十一、链表)链表概念有头链表的构造(插入/删除操作简单)插入与删除节点链表与数组比较链表概念数据结构里的一种类型:把若干个对象用指针串联起来,形成一个链状的数据结构,称之为“链表”。C/C++中实现链表:用struct语句定义一个类型,重:在俩面添加一个成员变量next,用于指向下一个对象。Struct Student{ int id; char name[16]; Student* next;}下面构建一个链表://① 先准备好四个对象Stu

2020-08-04 10:50:37 188

原创 《C/C++学习指南》语法篇—笔记 (十、结构体)

《C/C++学习指南》语法篇—笔记 (十、结构体)结构体定义C/C++的基本数据类型:char/short/float/double 数组,指针将基本的数据类型组合起来,形成新的数据类型 “自定义类型”例如:定义一个新类型struct student{ int id; int grade; char name[32];}结构体定义基本形式: 其中,struct是关键字,TypeName为新类型的名称,Members是一系列成员变量。struct TypeName{ //Memb

2020-08-03 22:19:30 139

原创 《C/C++学习指南》语法篇—笔记 (九、动态分配内存--malloc_free)

《C/C++学习指南》语法篇—笔记 (九、动态分配内存--malloc_free内存管理器 MM非常重要:堆 (MM管理的内存区域)malloc函数free函数注:特点问题:数组一块连续内存,长度 (常量)必须在代码里固定。内存管理器 MMMM,Memory Manager :系统中存在一个内存管理器,负责管理一堆闲置的内存。MM提供服务:应用程序可以想MM申请(借出)一块指定大小的内存,用完之后再释放(还回)。void* ptr = malloc(1024); //申请,从MM借出内存free

2020-08-03 20:39:25 140

socket_ctoc.zip

C++实现服务端和客户端通信,先运行服务端程序,再运行客户端。程序嗯嗯嗯,C++实现服务端和客户端通信,先运行服务端程序,再运行客户端。

2020-03-14

空空如也

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

TA关注的人

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