自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(138)
  • 问答 (1)
  • 收藏
  • 关注

原创 2.12 链接脚本

GNU Linux环境下,链接脚本一般是xxx.lds,如u-boot下的链接。不同系统下,链接脚本的文件后缀一般不一样。脚本u-boot.lds。

2024-04-14 15:01:09 163

原创 2.10 C和汇编混合编程

GNU编译器对ANSI C扩展,使用__asm__修饰,表示后面的代码为。内嵌汇编,其后可选择使用__volatile__告诉编译器不要优化代码。ARM编译器对ANSI C进行扩展,使用__asm在C语言中内嵌汇编。使用满递减FD堆栈,入栈出栈操作使用LDMFD/STMFD。内嵌单行汇编代码示例。

2024-04-14 14:36:18 200

原创 2.6 ARM体系结构及指令

• Load/store体系结构,只能处理寄存器的数据 (从内存里加载)• 固定指令长度、单周期指令• 流水线• 倾向于使用更多的寄存器用来存储数据。

2024-04-14 14:02:38 439

原创 2.5 指令集、微架构与编译器

具体表现为CPU硬件电路,其功能是,实现指令集规定的各种操作、运算注:微架构仅仅是一个CPU内核(CPU硬件电路), 是指令集的一个具体实现,它不是SOC。

2024-04-13 21:25:40 804

原创 2.4 总线与地址

I/O端口I/O内存。

2024-04-13 19:21:27 133

原创 2.2 X86与ARM架构对比分析

整个系统使用同一个时钟频率。

2024-04-13 16:33:57 257 1

原创 批量创建 markdown 文件的脚本

批量创建

2023-03-05 23:14:35 139

原创 Linux man 手册中各种括号的含义

man手册中各种括号的含义

2023-03-05 22:32:55 732

原创 Qt 64位链接 mysql8.0 中出现的问题及其解决办法

1. driver not loaded 原因总结MinGW编译器中找不到 MySql驱动或者驱动位数不对MinGW编译器找不到 MySql动态库或者动态库有问题代码写的有问题https://blog.csdn.net/l0p0c/article/details/865437602. 编译Qt MySql驱动2.1 参考https://www.bilibili.com/video/BV1Jk4y167tt2.2 坑点mysql安装路径有空格在pro文件中添加 INCLUDEPATH

2022-05-01 15:42:33 829

转载 玩转AOSP源码编译

整理搬运一下大佬的文章https://www.bilibili.com/video/BV19f4y1r7E6http://liuwangshu.cn/batcoder/aosp/3-compiling-aosp.html1. 前言1.1 repo安卓源码包含数百个git库, googole开发了 repo工具来管理安卓版本库。repo 使用python对git进行了封装。1.2 内核源码AOSP源码中不包含内核源码,需要单独下载。common 通用的 linux内核源码msm 用于高通

2021-09-20 22:16:41 5500 1

原创 MISC 驱动代码实例与流程分析

MISC 驱动代码实例与流程分析这是一个 蜂鸣器的杂项驱动,源码来自正点原子画了一个流程图视频链接如下https://www.bilibili.com/video/BV1fJ411i7PB?p=621. 熟悉 MISC驱动的各个模块1.1 驱动入口与出口/* 驱动入口函数 */static int __init miscbeep_init(void){ return platform_driver_register(&miscbeep_driver);}/* 驱动出

2021-09-12 17:38:40 197

翻译 IO多路复用_epoll

文件描述符的上限查看一个进程可以打开的socket描述符上限 cat /proc/sys/fs/file-max可以通过修改配置文件的方式修改该上限值sudo vi /etc/security/limits.conf//在文件尾部写入以下配置,soft软限制,hard硬限制。* soft nofile 65536* hard nofile 100000函数接口/** * @description: 创建一个epoll 句柄 * @param {int} size 要监听的文件描

2021-07-26 21:32:19 97

翻译 IO多路复用_poll

poll函数 说明 /** * @description: 等待 数组中的任意一个描述符 可以执行 * @param {struct pollfd} *fds 要监听的 文件数组的指针 * @param {nfds_t} nfds 需要被监控的文件描述符的 数目 * * @param {int} timeout 设置等待 * -1:阻塞等待 *

2021-07-26 21:29:53 138

翻译 IO多路复用_select

端口复用io 多路复用 支持应用同时在多个文件描述上阻塞//允许创建端口号相同但IP地址不同的多个socket描述符int opt = 1;setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));select接口函数/*** @description: 阻塞等待文件描述状态的改变* @param {int} nfds 监控的文件描述符集里 最大文件描述符加1* @para

2021-07-26 21:29:24 52

原创 LINUX 网络套接字函数注释 极简版

socket模型创建流程图socket 函数#include <sys/types.h>#include <sys/socket.h>/** * @description: 用来建立一个新的 socket * @param {int} domain 指定使用何种的地址类型 完整的定义在/usr/include/bits/socket.h * AF_INET/PF_INET ipv4协议 * AF_IN

2021-07-25 01:13:59 102

原创 STL容器的常见操作的总结

参考资料https://zhuanlan.zhihu.com/p/363771232https://mp.weixin.qq.com/s?__biz=MzIyNjA5NjgzOQ==&mid=2247483755&idx=1&sn=8609a6315727e37a7b7e3f2c594ae2dd&chksm=e874e2c3df036bd51a356853c3734bb0701d0ae05bed7a4c8651eb4ba1fc260fa033997c22e9&sc

2021-07-07 16:58:28 306

原创 wpa_suplicant 详解 文章收集

wpa_suplicant 详解 文章收集参考资料https://w1.fi/wpa_supplicant/devel/index.htmlhttps://zhuanlan.zhihu.com/p/24246712https://www.cnblogs.com/lidabo/p/5062204.htmlhttps://blog.csdn.net/jy1075518049/article/details/51015141https://blog.csdn.net/zm19930923zm/arti

2021-05-30 23:56:26 706 1

原创 c++正则中的坑

c++正则中的坑转义在string 中 两个 \ \在xml 文件中需要转义的符号本文由 简悦 SimpRead 转码, 原文地址 www.jianshu.comXML 中不允许出现一些特殊字符,这些字符需要使用转义字符代替显示结果描述转义字符十进制 空格&nbsp;&#160;<小于号&lt;&#60;>大于号&gt;&#62;&与号&amp;&#38;"双引号&quot;&#34

2021-05-30 23:51:49 96

原创 iptable 常用策略及其命令

iptable 常用策略及其命令1.说明精简于《Linux宝典 第四版》340-346页2.表表说明-t filter-t NAT-t mangle3.查看当前的规则iptables -L4.drop 不同链上的包iptables -p INPUT DROPiptables -p OUTPUT DROPiptables -p FORWARD DROP5.接收或拒绝ICMP包iptables -A INPUT -p ICMP -i eth0

2020-11-10 21:57:22 740

原创 9.22 内存管理单元MMU(下)

9.22 内存管理单元MMU(下)权限管理通过页表项管理页表项地址转换信息访问权限交换分区内存不够用的时候在磁盘开辟空间页帧指向磁盘空间

2020-11-02 00:03:31 111

原创 9.21 内管管理单元MMU(上)

9.21 内管管理单元MMU(上)MMU 内存管理单元地址转换![[Pasted image 20201003231724.png]]地址转换(改进) 页帧号+页内偏移虚拟地址1000410 代表虚页号0004代表页内偏移![[Pasted image 20201003231846.png]]权限管理交换分区MMU的TLB加速解析内核空间的页表...

2020-11-02 00:03:00 111

原创 9.20 位域

9.20 位域位域的应用信息的压缩存储、节省存储单元读写方式方便、可读性强操作系统内核、驱动源码:tcphdr注意事项位域不能跨越字节存储长度不允许超过一个字节允许匿名函数代码#include<stdio.h>#include<string.h>struct register_usb{ unsigned short en:1; unsigned short ep:4; //ep占4个位 unsigned short mode:3;};struct

2020-11-02 00:02:20 84

原创 9.19 位运算(下)

9.19 位运算(下)寄存器读写操作1 .#include<stdio.h>#define BIT_0 0x1#define BIT_1 0x1<<1#define BIT_2 0x1<<2#define BIT_3 0x1<<3#define BIT_5 0x1<<5#define BIT_6 0x1<<6#define BIT_9 0x1<<9#define BIT_12 0x1<<1

2020-11-02 00:01:54 82

原创 9.18 位运算(上)

9.18 位运算(上)位运算应用场合特殊算法嵌入式位运算符操作运算符取反~左移<<右移>>与&异或^或\经典用法高低位互换int main2(void){ printf("%X\n",0xAABB); printf("%X\n",0xAABB>>8 | 0xAABB<<8 & 0xFF00); //从右向左 return 0;} mask &

2020-11-01 23:50:12 75

原创 9.17 IO端口与IO内存

9.17 IO端口与IO内存CPU与外设通信51单片机直接赋值(统一编址)sbit P10=P1^0;P10 = 1;汇编格式:mov P1,#01Bsetb p1.0![[Pasted image 20201003195007.png]]通过控制器IP寄存器配置(独立编址)GPFCON |= BIT0设置GPF0为输出管脚输出1:GPFDAT[0]=1![[Pasted image 20201003195102.png]]外设控制器的寄存器独立编址IO端口:每个寄存器对

2020-11-01 23:49:41 89

原创 9.16 内存、外存与外设

9.16 内存、外存与外设按速度排列寄存缓存内存外存存储分类内存又称主存:CPU能直接寻址的存储空间、存取速度快包括:RAM、ROM、cache等外存又称辅存:除CPU缓存和内存以外的存储器包括:磁盘、NAND Flash、SD卡、EEPROM等外部设备计算机系统中输入、输出设备的统称(包括外存)外设:鼠标、键盘、显卡、声卡、打印机、磁盘外设接口:UART、USB、I2C、GPIO、I2S、Ethernet、AD/DA外设控制器设备控制:打开、关闭、运行协议控制:USB

2020-11-01 23:49:10 1796

原创 9.15 存储抽象:文件系统

9.15 存储抽象:文件系统文件系统格式化对存储设备的抽象地址管理:文件/目录与磁盘存储地址的映射权限管理:文件读写、安全保护统一接口:文件系统的相关系统调用文件系统的挂载文件系统要先挂载到某一个目录,然后才能使用mount的本质:改变映射关系根目录“/”Linux内核初始化后,创建的一个根目录接着会mount第一个文件系统:根文件系统其它分区、磁盘、SD先mount到RootFS上,然后通过文件接口访问根文件系统Linux内核运行所需要的一些目录:挂载、命令、库启动脚本、配

2020-11-01 23:48:35 128

原创 9.13 存储器映射(上)

9.13 存储器映射(上)存储器分类ROMRead Only Memory:只读、不能写、数据断电不消失PROM:可以写一次EPROM:可多次紫外线照射擦除EEPROM:可多次电擦除,可访问和修改任何一个字节Flash :广义的EEPROM,以块为单位擦除FLASHNOR Flash:数据、地址线分开,具有随机寻址功能NAND Flash :数据、地址线复用,不能随机寻址、按页读取eMMC:Nand Flash + 读写控制器 + MMC协议接口、BGA封装SD:Nand Flash

2020-11-01 23:48:03 79

原创 9.14 存储器映射(下)

9.14 存储器映射(下)存储映射存储映射:给存储单元分配逻辑地址的过程每个物理存储单元并没固定的地址每个物理存储单元的地址通过重映射,可以改变![[Pasted image 20201003193118.png]]存储映射的实现跟处理器有关存储映射寄存器:起始地址、结束地址或大小设置BANK基地址位带区、位带区别名时机:复位之前由CPU自动完成...

2020-11-01 23:46:31 65

原创 9.12 中断(下):中断函数的编写

9.12 中断(下):中断函数的编写中断特性可随时打断正在执行的任务可在任何地方打断正在执行的任务中断返回后,CPU不一定重新执行被打断的任务中断函数调用时间不固定:中断要自己保护现场调用地点不固定:无法给中断函数传参返回地点不固定:中断函数不能有返回值裸机环境下的中断函数基本流程保存中断现场– 状态寄存器、返回地址入栈– 中断函数中要使用到的寄存器入栈清中断//关中断,保护现场、有些硬件自动清除,重启开启中断前记得要清除执行中断函数体恢复现场– 将栈中的寄存器弹出,恢

2020-11-01 23:45:58 1277

原创 9.11 中断(中):进程栈与中断栈

9.11 中断(中):进程栈与中断栈进程上下文进程上下文pc 指针指向 task函数体sp 指针指向 任务栈栈是C语言运行的基础函数调用:局部变量、函数参数、返回地址、寄存器现场保护:状态寄存器 、寄存器、返回地址SP指到哪,我就可以在哪里执行函数栈帧符号访问:SP/FP + 相对偏移SP指针的切换饭店与小摊儿进程栈task3执行完之后状态寄存器、堆栈指针、中断地址重新弹到cpu![[Pasted image 20201003182707.png]]Linux进程的内核栈!

2020-11-01 23:45:26 1007

原创 9.10 中断(上):中断处理流程

9.10 中断(上):中断处理流程中断的重要性时钟是操作系统的“心脏”中断是理解操作系统的切入点系统调用任务调度内存管理中断广义的概念任何打断系统正常执行流程外部中断内部异常软中断中断向量表![[Pasted image 20201003180626.png]]IRQ中断处理流程硬件自动跳转handler 要自己写![[Pasted image 20201003180706.png]]...

2020-11-01 23:44:51 86

原创 9.8 系统调用 (上)

9.8 系统调用 (上)函数调用自定义函数C标准库第三方库框架操作系统ucos 多任务编程示例void task1(void){ while(1) { ; }}void task2(void){ for(;1;) { ; }}OS_STK stack1[512];OS_STK stack1[512];int main(void){ serial_init(); board_init(); OSInit(); OSTaskCreate(task1

2020-11-01 23:44:11 79

原创 9.7 临界区与临界资源

9.7 临界区与临界资源不可重入函数应用场合多任务环境在执行过程中可能会被中断、任务切换打断临界资源一次只允许一个进程使用的共享资源互斥访问,同一时刻只允许一个进程访问举例:打印机、全局变量、静态变量、缓冲区临界区访问临界资源的代码段临界区访问方式:互斥访问同时刻只允许一个进程访问临界区的实现操作原语EnterCriticalSection()LeaveCriticalSection()实现方式互斥访问:信号量、互斥量、自旋锁关中断uC/OS 临界区实现#if OS_

2020-10-31 00:17:51 644

原创 9.8 系统调用 (上)

9.8 系统调用 (上)函数调用自定义函数C标准库第三方库框架操作系统ucos 多任务编程示例void task1(void){ while(1) { ; }}void task2(void){ for(;1;) { ; }}OS_STK stack1[512];OS_STK stack1[512];int main(void){ serial_init(); board_init(); OSInit(); OSTaskCreate(task1

2020-10-31 00:10:43 101

原创 9.6 可重入函数

9.6 可重入函数多任务带来的问题函数sum()被任务task1调用在调用过程中,任务task1挂起调度器运行task2函数sum()被任务task2再次调用可重入函数可重复调用、并发调用、可以被中断在多任务环境中,多次调用,不影响运行结果一般应用在多任务、多进程的运行环境中不可重入函数的标志函数内部使用了全局变量、静态局部变量函数返回全局变量或静态局部变量函数内部使用了malloc/free函数函数内部使用了标准I/O函数函数内部调用了其它不可重入函数可重入函数设计应用场

2020-10-31 00:10:06 103

原创 9.5 函数栈与进程栈

9.5 函数栈与进程栈函数栈帧的作用保存函数上下文局部变量函数参数为什么需要任务栈?任务被打断、调度是随机的作用1:函数栈帧作用2:任务现场需要保存(状态寄存器、被打断地址)uC/OS的任务栈void task(void *pd){; //处理任务的函数}OS_STK task_stack[1024]; //定义一个任务栈int main(){BspInit();OSInit();OSTaskCreate(task,(void *)0,&task_stack[1

2020-10-31 00:03:37 206

原创 9.4 调度器的工作原理

9.4 调度器的工作原理多任务的本质抢占cpu什么是调度器调度器是操作系统的核心:任务切换多任务机制:多个任务轮流使用CPU,达到“并发”目的任务:每个任务是无限循环的时间片轮转:每个任务运行xx毫秒,由时钟或软中断完成简单的调度器/************************************************* Filename: os_schedule.c* Author: litao.wang* Description: *

2020-10-31 00:02:53 543

原创 9.3 多任务的裸机实现(下):状态机

9.3 多任务的裸机实现(下):状态机长延时任务的分解将运行时间较长的任务分解为多个子任务举例:厨师与顾客i多任务的状态机实现解决方案数码管显示:每次只刷新一个数码管按键扫描:按键按下、按键消抖、按键释放裸机状态机例程/************************************************* Filename: state_machine.c* Author: litao.wang* Description: *

2020-10-31 00:02:11 645

原创 9.2 多任务的裸机实现(上)

9.2 多任务的裸机实现(上)多任务带来的时间问题每个任务的执行间隔每个任务的执行时间任务的分类有些任务需要频繁运行:数码管显示、按键扫描有些任务不需要频繁运行:温度传感器、温度设置例程1裸机多任务/************************************************* Filename: task.c* Author: litao.wang* Description: * Create: 2018-07-11

2020-10-31 00:01:45 314

空空如也

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

TA关注的人

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