面向对象设计规则
This is my study note of C++.
table
{
margin: auto;
}
单一职责原则1一个类应该有且只有一个责任,每个类应该专注完成一个特定的任务。
开放封闭原则1软件实体应该对拓展开放,对修改封闭。
里氏替换1子类应该能够替换父类,并且不会产生意外的行为。
依赖倒置原则1高层模块不应该依赖于低级模块,二者都应该依赖于抽象。
接口隔离原则1多个特定客户端接口优于一个通用接口。
迪米特原则1一个对象应该尽量减少与其他对象的交互,只与朋友进行交互。
组合/聚合复用原则1优先使用组合和聚合关系,而不是继承关系。
stm32拓展
This is my study note of stm32.
本文以STM32F10X为例子,freeRTOS以v9.0.0为例。
FLASH和RAM的基本概念flash是什么
flash属于非易失性存储器。
具备电可擦除可编程性能
断电不丢失数据同时可以快速读取数据
flash分类
NOR Flash1读取和我们常见的SDRAM的读取是一样的,用户可以直接运行装载再NOR Flash里面的代码。
NADN Flash12NAND Flash未采用内存的随机读取技术,它的读取是以一次读取一块的形式进行的,通常一次读取512个字节,用户不能直接运行NAND Flash的代码,因此很多嵌入式开发板除了使用NAND Flash还使用了一块小的NOR Flash。
RAM是什么
RAM为易失性存储器。
断电丢失数据
RAM分类
静态RAM(SRAM)1SRAM速度非常快,是目前读写最快的存储设备。
动态RAM(DRAM)1保留数据的时间很短,速度也比SRAM慢,
socket
This is my study note of socket.
table
{
margin: auto;
}
什么是socket——“套接字”12socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“open->write/open->close”模式来操作。可以理解为:socket是一种特殊的文件,一些socket函数就是对其进行的操作。
socket传输方式
SOCK_STREAM1表示面向连接的数据传输方式。
SOCK_DGRAM1表示无连接的数据传输方式。
socket函数
int socket(int af, int type, int protocol)123af:为地址簇,也就是IP地址类型,常用的有AF_INET(IPV4)和AF_INET6(IPV6)。type:选择SOCK_STREAM或SOCK_DGRAM。protocol:表示IPPROTO_TCP或IPPTOTO_UDP分别表示TCP和UDP。
sockaddr_in1234567891011struct sockaddr_in ...
epoll、select、poll区别
This is my study note of file system startup process.
table
{
margin: auto;
}
select123单个进程就可以同时处理多个网络连接IO请求,基本原理就是程序呼叫select,然后整个程序进入阻塞状态,这时候kernel内核就会轮询检查所有的select负责的文件描述符fd,找到准备好的fd,返回给select并通知系统调用将数据从kernel内核复制到进程缓冲区。
缺点:
每次调用select都要把fd集合从用户态拷贝到内核态,开销大
每次都要在内核中遍历fd集合,开销大
select的描述符数量太少,只有1024
poll12描述fd集合的方式不同,poll使用的是pollfd结构,select使用fd_set结构,polled是链式结构,因此最大连接数不限。poll有一个特点是水平触发,即通知fd就绪后,若是这次没有被处理,下次会再次通知就绪。
epoll
epoll_create 创建一个epoll对象,并返回fd
epoll_ctl 事件注册函数,将需要监听的事件和fd交给ep ...
linux 文件系统启动流程
This is my study note of file system startup process.
table
{
margin: auto;
}
系统启动一共可以分为4个阶段:
bootloder阶段1234主要完成第一阶段系统的引导和初始化工作,系统上电后首先是CPU开始工作,引导程序会从ROM中被加载到RAM中,对CPU寄存器进行初始化,启动核0,核1以及其他核此时都处于休眠状态,需要等待核0内核启动正常后通过中断或者事件将其唤醒,接下来就是完成flash和ddr的初始化,为后面flash加载bin文件,ddr运行程序提供基本环境。一般情况下都是从flash为0的位置,将bootloder的镜像加载到ddr或者RAM,该引导程序将uboot从flash移到DDR中,然后交给uboot处理。
bootloder通常被分为两个阶段的原因主要是为了解决一些特定的问题和实现功能。
第一阶段12第一阶段的引导程序一般非常的小巧,主要的任务是系统上电或重启时加载第二阶段的引导加载程序,它不依赖于复杂的文件系统或设备驱动程序,而是直接从引导介质读取固定的数据。
第二 ...
linux IO操作
This is my study note of IO.
table
{
margin: auto;
}
异步IO12异步IO简单来说就是,应用程序发起IO请求后,内核能够立即返回而不需要等待内核进行操作以后才可以返回。任务结束以后,内核通过信号通知用户IO操作结果。
同步IO12同步IO简单来说就是,应用程序发起IO请求后,内核不能立即返回,必须等待内核将操作进行完以后,才可以返回给应用程序。
原生AIO12Linux Native AIO 是linux支持的原生AIO,因为Linux存在很多第三方的异步IO库,为了加以区分,Linux内核提供的异步IO就称为异步IO。
Kconfig
table
{
margin: auto;
}
This is my study note of Kconfig.
整体结构1234567meau "MenuName"comment "describe message" config Option name bool xxx depends on xxx select xxx help
meau:用于生成菜单
comment: 用于生成帮助信息
config: 表示一个配置选项的开始,“Option name”代表选项名字
bool:变量类型,总共有五种类型:bool、tristate、string、hex和int12345bool变量的值为:y和ntritate的值为:y、n和mstring变量的值:字符串hex:取值为十六进制数据int:取值为十进制数据
range:表示变量的输入范围12range 2 32表示只能输入2~32之间的数据,超出会报错
default:为变量的默认值
prompt:输入提示12promt "xxxx& ...
汇编
table
{
margin: auto;
}
This is my study note of compilation.
GNU汇编语法编译器不同会导致汇编的语法存在一些区别,这次主要是记录GNU语法的汇编
语句组成123456lable表示标签,command则是要执行的操作,@表示注释lable: command @ 注释内容例:add: MOVS R0, #0x12 @ 设置R0=0x12
任何以”:”结尾的标识符都会被识别为一个标号
ARM中指令、伪指令、伪操作、寄存器名等都可以全部使用大写或全部使用小写,但是不可以大小写混用
定义段1.section .testsection @定义一个testsection段
每个段以段名开始,以下一个段名或文件末尾结束
段名
含义
.text
表示代码段
.data
初始化数据段
.bss
未初始化的数据段
.rodata
只读数据段
默认入口标号:_start123.global _start_start: ldr r0, =0x12 @r0=0x12
汇 ...
shell
This is my study note of shell.
table
{
margin: auto;
}
常见问题解决方式1231.正常定义数组报错Syntax error: "(" unexpected解决方案:若此时语法不存在错误,则应该是缺少!/bin/bash,或者调用sh时是调用dash而不是bash,此时通过ll /bin/**sh可以查看。此时只需要对.sh文件+x权限,同时通过./sh文件名直接运行文件就可以解决这个问题。
shell驱动基本语法环境变量123456789101112PATH 命令所示路径,以冒号为分割;HOME 打印用户家目录;SHELL 显示当前Shell类型;USER 打印当前用户名;ID 打印当前用户id信息;PWD 显示当前所在路径;TERM 打印当前终端类型;HOSTNAME 显示当前主机名;PS1 定义主机命令提示符的;HISTSIZE 历史命令大小,可通过 HISTTIMEFORMAT 变量设置命令执行时间;RANDOM ...
freeRtos
This is my study note of freeRtos.
本文以STM32F10X为例子,freeRTOS以v9.0.0为例。
预准备
下载源码包1官网下载链接:http://www.freertos.org/
新建FreeRTOS文件夹在此文件夹中新加三个文件夹:src、port、include12345671.src 将FreeRTOSv9.0.0\FreeRTOS\Source目录下所有的".c"文件拷贝至src文件中。2.port 将FreeRTOSv9.0.0\FreeRTOS\Source\portable目录下找到MemMang文件夹以及RVDS文件夹,拷贝到port文件夹中。3.include FreeRTOSv9.0.0\ FreeRTOS\Source找到include文件夹,直接拷贝至新建的freeRTOS文件夹中。此时,三个文件均在新建的freeRTOS文件夹中,完成文件复制。
拷贝freeRTOS文件夹至工程中
拷贝FreeRTOSConfig.h 文件到 user 文件夹1FreeRTOSv9.0.0\F ...