自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 资源 (2)
  • 收藏
  • 关注

原创 基于Linux开发的项目视频

基于Linu开发的项目视频

2022-06-17 21:00:11 165

原创 【FreeRTOS】从0写简易RTOS实现任务切换

1. RTOS引入单片机性能越来越强,很多Linux程序在单片机上也可以运行了:这需要RTOS。我们要开发的单片机产品,功能也越来越丰富:这也需要RTOS。就个人技术发展来说,单片机开发的技术提升方向之一就是RTOS。RTOS已经无处不在:ESP8266 WIFI模块,出厂自带FreeRTOS,可以在上面做二次开发;4G模块CAT1,出厂自带FreeRTOS,可以在上面做二次开发;想实现功能比较丰富的设备时,比如加上MQTT功能,就需要RTOS比如已经被RT-Thread采用的kawaii

2022-05-08 11:44:55 1501

原创 【存储】RAID2.0+、多路径技术、磁盘可靠性技术

RAID2.0+

2023-03-03 14:50:21 1816

原创 【存储】RAID0、RAID1、RAID3、RAID5、RAID6、混合RAID10、混合RAID50

RAID

2023-03-03 14:42:19 2844

原创 【存储】存储特性

存储特性

2023-03-03 14:33:46 1399

原创 【存储】存储协议

存储协议

2023-03-03 14:26:19 781

原创 【存储】存储阵列结构

存储阵列结构

2023-03-03 14:19:07 1609

原创 【Linux内核】线程设置 线程调度 线程通信

【Linux内核】线程设置 线程调度 线程通信

2022-09-04 10:11:01 1042

原创 【Linux内核】各种同步机制伪代码

【Linux内核】各种同步机制伪代码

2022-09-04 10:04:49 370

原创 【RTOS】ARM Cortex-M异常处理过程

Cortex-M3与Cortex-M41. 处理器输入、输出和外设访问一般来说,外设在使用前需要初始化,一般包括以下几步:如果需要,设置时钟控制回路使能连接到外设和对应引脚的时钟。许多现代微控制器允许对时钟信号分布的精细调节,如使能/禁止到每个外设的时钟连接以节省功耗。外设时钟一般是默认关闭的,需要在编程外设前使能时钟。有些情况下,可能还需要使能外设总线系统的时钟。有些情况下,可能还需要配置I/O引脚的操作模式。大多数微控制器都有复用的I/O引脚,可用于多种目的。为了使用外设,配置I/O引脚以匹配

2022-05-11 14:20:32 1605

原创 【FreeRTOS】FreeRTOS内存管理的五种方式

内存管理1. FreeRTOS为什么要实现自己的内存管理内存的动态管理是C语言程序的知识范围,并不属于FreeRTOS的知识范畴,但是它跟FreeRTOS关系是如此紧密。在C语言的库函数中,有mallc、free等函数,但是在FreeRTOS中,它们不适用:不适合用在资源紧缺的嵌入式系统中这些函数的实现过于复杂、占据的代码空间太大并非线程安全的(thread-safe)运行有不确定性:每次调用这些函数时花费的时间可能都不相同内存碎片化使用不同的编译器时,需要进行复杂的配置有时候难以调试

2022-05-07 16:30:30 3477 6

原创 【Linux应用】 strace调试工具常见用法

1. strace是什么?按照strace官网的描述, strace是一个可用于诊断、调试和教学的Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。strace底层使用内核的ptrace特性来实现其功能。在运维的日常工作中,故障处理和问题诊断是个主要的内容,也是必备的技能。strace作为一种动态跟踪工具,能够帮助运维高效地定位进程和服务故障。它像是一个侦探,通过系统调用的蛛丝马迹,告诉你异常的真相。strace能做什么?它能够打开应用

2022-05-04 09:48:34 631

原创 【Linux应用】sysfs、gpio、设备树调试常用命令以及物理寄存器读取小工具

段错误gdb调试ulimit -c unlimitedsudo /home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb ./digitupdate /home/book/nfs_rootfs/corebacktrace strace -o log.txt (+ 应用程序)查看input系统的信息cat

2022-05-02 19:03:03 1097

原创 【Linux应用】 GDB调试工具常见用法

一、gdb简介GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c/c++程序员,gdb是必不可少的工具;二、gdb使用流程1、启动gdb编译一个测试程序,-g表示可以调试,命令如下:gcc -g test.c -o test启动gdb,命令如下:gdb test gdb -q test //表示不打印gdb版本信息,界面较为干净;测试如下:root@ubuntu:/home/eit/c_test#

2022-05-02 16:17:40 259

原创 【LeetCode】最近公共祖先问题

二叉树中寻找一个元素先不管最近公共祖先问题,我请你实现一个简单的算法:给你输入一棵没有重复元素的二叉树根节点root和一个目标值val,请你写一个函数寻找树中值为val的节点。函数签名如下:TreeNode find(TreeNode root, int val);这个函数应该很容易实现对吧,可以用下面的代码进行实现:// 定义:在以 root 为根的二叉树中寻找值为 val 的节点TreeNode find(TreeNode root, int val) { // base cas

2022-03-31 16:39:14 854

原创 真的明白二分搜索了吗?边界怎么设置呢?是“<=“还是“<“?

二分查找详解本文就来探究几个最常用的二分查找场景:寻找一个数、寻找左侧边界、寻找右侧边界。而且,我们就是要深入细节,比如不等号是否应该带等号,mid 是否应该加一等等。分析这些细节的差异以及出现这些差异的原因,保证你能灵活准确地写出正确的二分查找算法。二分查找框架int binarySearch(int[] nums, int target) { int left = 0, right = ...; while(...) { int mid = left + (rig

2022-01-15 18:49:21 336

原创 NXP IMX6ULL芯片时钟系统全概况

本文主要针对IMX6ULL芯片的时钟系统进行分析

2022-01-06 11:44:16 3283 2

原创 面试刷题我认为自己必会的题

1. 查找两个字符串a,b中的最长公共子串(65)描述:查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。注:子串的定义:将一个字符串删去前缀和后缀(也可以不删)形成的字符串。请和“子序列”的概念分开!输入描述:输入两个字符串输出描述:返回重复出现的字符#include <iostream>using namespace std;int main(void){ string str1, str2; while(cin >&gt

2021-12-29 19:58:37 775 1

原创 从零适配IMX6ULL开发板Linux系统——uboot移植

串口驱动搜 CP210 下载目的:当拿到一块儿完全没有系统的开发板,厂家并没有提供给我们对应的Linux系统,从芯片厂家提供的原厂资料中,修改并适配自己的开发板。我们需要做的步骤如下:获取资料 分析配套的SOC启动流程 对比与芯片原厂公板硬件的区别 尝试烧写公板系统并启动 自行编译出镜像并烧写启动开发板:百问网IMX6ULL一、前期能找到越多的资料越好由于我使用的NXP公司的IMX6ULL,所以需要先去NXP官网注册一个账号,尽可能多的找IMX6ULL的相关资料。去NXP官

2021-12-27 23:04:03 2675 2

原创 内核并发与同步

1. 并发访问编写内核代码或驱动代码时需要留意共享资源的保护,防止共享资源被并发访问。所谓并发访问,是指多个内核路径同时访问和操作数据,就有可能发生相互覆盖共享数据的情况,造成被访问数据的不一致。内核路径可以是-一个内核执行路径、中断处理程序或者内核线程等。并发访问可能会造成系统不稳定或产生错误,且很难跟踪和调试。有一个原则要记住:是保护资源或者数据,而不是保护代码。内核中产生并发访问的并发源主要有如下4种: 中断和异常:中断发生后,中断处理程序和被中断的进程之间有可能产生并发访问。

2021-12-26 16:25:53 389

原创 Linux内核一些进程管理知识点

1. current内核有一个常用的常量current用于获取当前进程task_ struct 数据结构,它利用了内核栈的特性。首先通过SP寄存器获取当前内核栈的地址,对齐后可以获取struct thread info 数据结构指针,最后通过thread_ info->task 成员获取task_ struct 数据结构。#define get_current() {current_thread_info()->task}#define current get_current()

2021-12-26 16:18:00 862

原创 FreeRTOS的调度器源码分析及系统滴答SysTick

1. PendSV系统调用查遍了C站上所有关于FreeRTOS调度器的分析,发现大家分析完vTaskStartScheduler()之后就戛然而止了,我就会比较迷糊,这个仅开启了调度器的调度,而FreeRTOS是一个实时操作系统,并不能体现出他的实时性在哪里,虽然已经在FreeRTOSConfig.h中设置了configUSE_PREEMPTION等于1,那他是怎么其的作用呢?project\demo\FreeRTOSConfig.h刚开始对PendSV系统调用还比较陌生,读过很多的资料之.

2021-11-24 11:33:57 2343

原创 Openharmony I2C驱动程序分析

1. I2C硬件框架I2C的硬件框架已经在i2c子系统_Hanrui的博客-CSDN博客中详细说过了,上一个是基于Linux背景下的I2C驱动框架分析,现在是站在鸿蒙Harmony的角度来分析I2C驱动。仔细对比的话,可以发现两种内核的思想是一样的。都是遵照这下面的层次结构。如果之前分析过Linux下的I2C驱动程序,可以发现鸿蒙的驱动相对比较好理解。但首先,一定要记清楚上面的层次图,不然的话,内核有很多函数来回跳转,很快就会晕掉。。2. Openharmony I2C源码分析.

2021-11-18 21:37:04 1331

转载 OpenHarmony HDF框架

原文:品读鸿蒙HDF架构(一)|解读鸿蒙源码【图文】_mb607022e25a607_51CTO博客https://blog.51cto.com/u_15162069/29026131.铺垫一下系统一启动,会运行到SystemInit(),其中会调用DeviceManagerStart()启动与HDF相关的部分:【vendor/hisi/hi35xx/hi3516dv300/module_init/src/System_init.c】void SystemInit(void){..

2021-11-16 19:45:48 1513

转载 OpenHarmony HDF驱动框架及驱动加载过程

HDF驱动框架概述OpenAtom OpenHarmony(以下简称“OpenHarmony”)系统 HDF 驱动框架采用 C 语言面向对象编程模型构建,通过平台解耦、内核解耦,来达到兼容不同内核,统一平台底座的目的,从而帮助开发者实现驱动一次开发,多系统部署的效果。为了达成这个目标, OpenHarmony 系统 HDF 驱动框架提供了: 操作系统适配层(OSAL,operatingsystem abstraction layer):对内核操作相关接口进行统一封装,屏蔽不同系统操作接口.

2021-11-16 16:38:22 2162

原创 Nand Flash与Nor Flash

1. Nand Flash与Nor Flash特点Nor Flash的特点是芯片内执行(XIP,execute In Place),这样应用程序可以直接在 flash 闪存内运行,不必再把代码读到系统 RAM 中。优点是可以直接从 FLASH 中运行程序,但是工艺复杂,价格比贵, NOR 的传输效率很高,在1~4MB 的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。Nand Flash结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用 Nand F.

2021-10-13 21:51:32 1057

原创 数据结构与算法刷题

1. 查找两个字符串a,b中的最长公共子串(65)描述:查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。注:子串的定义:将一个字符串删去前缀和后缀(也可以不删)形成的字符串。请和“子序列”的概念分开!输入描述:输入两个字符串输出描述:返回重复出现的字符#include <iostream>using namespace std;int main(void){ string str1, str2; while(cin

2021-10-07 21:45:55 598

原创 链表操作_手撕

1、链表中倒数第k个节点题目:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。ListNode* FindKthToTail(ListNode* pListHead, unsigned int k){ ListNode *pAhead = pListHead; ListNode *pBehind

2021-09-29 16:47:03 445

原创 操作系统杂项笔记

目录RS232和RS485通讯接口有什么区别用串口发送十个字节,丢失一个两个你会怎么检查中断能不能睡眠?中断为什么不能嵌套?linux中系统调用过程?Linux中的同步机制ARM处理器的寄存器复位后,ARM处理器处于 SVC 模式,ARM 状态在ARM Linux系统中,中断处理程序进入C代码以后,ARM处于 超级用户(SVC) 工作模式在ARM系统结构中,MMU映射最小的单元空间是 1KB ,映射最大的单元空间是 1MB协处理器主要控制:片内的MMU、指令和数据

2021-09-29 16:36:56 968

原创 ARM体系结构

1. 进程间通信方式有哪些?管道、信号量、消息队列、信号、共享内存、套接字2. 线程间同步方法有哪些?临界区、互斥量、信号量、事件3. fork和vfork的区别fork( )的子进程拷贝父进程的数据段和代码段; vfork( )的子进程与父进程共享数据段fork( )的父子进程的执行次序不确定; vfork( )保证子进程先运行,在调用exec或exit之前与父进程数据是共享的,在它调用exec或exit之后父进程才可能被调度运行。vfork( )保证子进程先运行,在它调用exec或exi

2021-09-29 16:22:39 568

原创 Linux内存管理

# 链接- 链接可以认为是一个目录项,其中除了指向文件名的指针,并不存在其他数据。- 目标文件删除时,符号链接仍然继续保存。- 对每个符号链接都使用了一个独立的inode。相应inode的数据段包含了一个字符串,给出了链接目标的路径。# 文件系统各组件的关系![image-20210504142425368](C:\Users\李涵锐\AppData\Roaming\Typora\typora-user-images\image-20210504142425368.png)# 处理器

2021-09-29 16:18:27 473

原创 i2c子系统

一、I2C系统硬件框架1. 基本硬件电路2. I2C传输协议写操作读操作I2C协议中数据传输的单位是字节,也就是8位。但是要用到9个时钟:前面8个时钟用来传输8数据,第9个时钟用来传输回应信号。传输时,先传输最高位(MSB)。 开始信号(S):SCL为高电平时,SDA山高电平向低电平跳变,开始传送数据。 结束信号(P):SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。 响应信号(ACK):接收器在接收到8位数据后,在第9个时钟周期,拉低SDA

2021-08-25 18:28:32 1528

原创 计算机三级Linux应用与开发技术

第1章 计算机体系结构与操作系统一、选择题1.操作系统负责管理计算机系统的(C),其中包括处理器、储存器、设备和文件。A.程序 B.文件 C.资源 D.进程2.操作系统是一种(B)。A应用软件B系统软件C通用软件D工具软件3.操作系统是一组(C)。A文件管理程序 B中断处理程序 C资源管理程序 D设备管理程序4.多个进程的实体能存在同一内存中,在一段时间内都得到运行。这种性质称作进程的(B)。A动态性 B并发性 C调度性 D异步性5.在下列进程状态转换中,哪一个是不正

2021-08-23 09:36:28 3388

原创 Uart子系统

一、UART硬件介绍1、串口的硬件介绍uart通过三根线即可完成:发送线TX、接收线RX、地线。TxD线把PC机要发送的信息发送给ARM开发板。最下面的地线统一参考地。2、串口的参数 波特率:一般选波特率都会有9600,19200,115200等选项。其实意思就是每秒传输这么多个比特位数(bit)。 起始位:先发出一个逻辑”0”的信号,表示传输数据的开始。 数据位:可以是5~8位逻辑”0”或”1”。如ASCII码(7位),扩展BCD码(8位)。小端传输。..

2021-08-19 22:11:51 692

原创 linux中断流程总结

本篇文章是基于linux-4.9.88内核进行分析,使用的单板是imx6ull。1、linux中断所涉及的各种数据结构关系首先,我们要明确一点,hwirq与virq并不是一回事,hwirq就是硬件中断号,比如用户按键、串口中断、网络中断等这些,都会在gic通用中断控制器中标识出一个中断号,是属于硬件层面的序号。为什么不直接使用hwirq呢?对于驱动工程师而言,我们和CPU视角是一样的,我们只希望得到一个IRQ number,而不关系具体是那个interrupt controller上的那个HW

2021-07-14 15:18:35 1241

原创 查找算法汇总—手撕代码

1、顺序查找int SequenceSearch(int a[], int value, int n){ int i; for(i = 0; i < n; i++) if(a[i] == value) return i; return -1;}2、二分查找折半查找int BinarySearch(int a[], int value, int n){ int low, high, mid; low

2021-07-08 21:57:58 472

原创 网络编程--UNIX网络编程 卷1

TCP与UDP协议的优缺点及适用场景TCP: 面向连接的可靠数据包传递 ----- 完全弥补优点:稳定 1、数据稳定 --- 丢包回传(回执机制)2、速率稳定 3、流量稳定 “滑动窗口”缺点:效率低、速度慢适用场景:大文件、重要文件传输UDP:无连接的不可靠报文传递 ----- 完全不弥补缺点:不稳定 数据、速率、流量优点:效率高、速度快适用场景:对实时性要求较高,视频会议、视频电话、广播如何提高UDP传输的可靠性?我们使用UDP进行网络编程所遇到的问题是它缺乏可靠性

2021-07-07 21:57:47 1214 1

原创 排序算法-手撕代码

1、冒泡排序:void Bubble_Sort(ElementType A[], int N){ for(p = N-1; p >= 0; p--) { flag = 0; for(i = 0; i < p; i++) { if(A[i] > A[i+1]) { swap(A[i], A[i+1]); fla...

2021-06-29 14:06:53 375

原创 自己实现库函数-手撕代码

目录1. strlen2. strncmp3. strcpy4. strncpy5. strrchr6. strcat7. memset8. atoi9. itoa10. printf1. strlensize_t mystrlen(const char *s){ const char *sc; for(sc = s; *sc != '\0'; ++sc) ; return (sc - s);}2. strnc...

2021-06-29 13:58:40 620

原创 C语言零碎知识点

1、不使用sizeof,如何求int占用的字节数#include <stdio.h>#define MYSIZEOF(value) (char *)(&value+1)-(char *)&valueint main(){ int i; double f; double *p; printf("%d\n", MYSIZEOF(i)); printf("%d\n", MYSIZEOF(f)); printf("%d\n", ...

2021-06-29 13:51:29 857

TCP/IP_客户端程序 client.c

TCP/IP_客户端程序

2021-05-07

TCP/IP_服务器程序 server.c

TCP/IP_服务器程序

2021-05-07

空空如也

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

TA关注的人

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