ARM地址映射表 硬件控制原理只有Load/start指令可以读写硬件控制器量的寄存器,从而操作硬件地址划分图如下(其中IO(SFR)用来操控硬件的):注意:对于一个32位的处理器,里面的所有寄存器都是32位地址,所以范围位2的32次方,就是4GB,CPU本身不能直接控制硬件的,硬件一般由其对应的控制器来控制,SOC中将各个硬件控制器的寄存器映射到了CPU地址空间中的一段范围,这样CPU就可以通过读写寄存器来间接控制硬件。强调下:这里的寄存器在SOC中但在CPU外,有地址,访问方式与内存一样,常用于控制硬件。地址映
ARM中专用指令(异常向量表、异常源、异常返回等) 状态寄存器传送指令CPSR寄存器状态寄存器传送指令:访问(读写)CPSR寄存器@ 读CPSR@ MRS R1, CPSR@ R1 = CPSR@ 写CPSR@ MSR CPSR, #0x10 @0x10为User模式,且开启IRQ和FRQ@ CPSR = 0x10@ 在USER模式下不能随意修改CPSR,因为USER模式属于非特权模式@ MSR CPSR, #0xD3软中断指令ARM异常源ARM异常模式ARM异常响应异常返回异常响应代码如下:状态寄存器传送指令
ARM中汇编语言的学习(加法、乘法、除法、左移、右移、按位与等多种命令操作实例以及ARM的 N、Z、C、V 标志位的解释) 汇编概述汇编需要学习的大致框架如下:@ 汇编中的符号@ 1.指令;能够北嘁肷梢惶?2bit机器码,并且能够被cpui识别和执行@ 2.伪指令:本身不是指令,编译器可以将其替换成若干条指令@ 3.伪操作:不会生成指令,只在编译阶段告诉编译器怎么编译@ ARM指令集@ 1.数据处理指令:进行数学运算、逻辑运算@ 2.跳转指令:实现程序的眺转,本质就是修改PC寄存器@ 3.Load/Score指令:访问(读写)内存@ 4.状态寄存器传送指令:用于访问(读写)CPSR寄存器@ 5.软中断指
Linux中信号机制 ITIMER_PROF: 进程在用户模式(即程序执行时)和核心模式(即进程调度用时)均计算时间。发送SIGPROF信号。ITIMER_VIRTUAL: 计算进程(用户模式)执行的时间。发送SIGVTALRM信号。old_value: 存放旧的timeout值,一般指定为NULL。ITIMER_REAL:以逝去时间递减。发送SIGALRM信号。new_value: 负责设定 timout 时间。功能:定时的发送alarm信号。
Linux中共享内存(mmap函数的使用) 内存映射的基本使用内存映射概念:使一个磁盘文件与内存中的一个缓冲区相映射,进程可以像访问普通内存一样对文件进行访问,不必再调用read,write。mmap()的优点:实现了用户空间和内核空间的高效交互方式优化前:优化后:文件映射图函数定义:void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); 功能:创建共享内存映射函数返回值:成功返回创建的映射区首地址,失败返
Linux中线程池及gdb调试多线程 线程池的概念概念:通俗的讲就是一个线程的池子,可以循环的完成任务的一组线程集合必要性:我们平时创建一个线程,完成某一个任务,等待线程的退出。但当需要创建大量的线程时,假设T1为创建线程时间,T2为在线程任务执行时间,T3为线程销毁时间,当 T1+T3 > T2,这时候就不划算了,使用线程池可以降低频繁创建和销毁线程所带来的开销,任务处理时间比较短的时候这个好处非常显著。线程池的基本结构:1 任务队列,存储需要处理的任务,由工作线程来处理这些任务2 线程池工作线程,它是任务队列任务的消费
Linux中条件变量的使用及注意事项 条件变量应用场景:生产者消费者问题(类似于出租车和乘客问题)必要性:为了实现等待某个资源,让线程休眠。提高运行效率函数如下:int pthread_cond_wait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex);int pthread_cond_timewait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex,const struct ti
Linux中互斥锁/读写锁的概念及使用、死锁的避免(pthread_mutex_lock、pthread_mutex_unlock、pthread_rwlock_rdlock、pthread_rw) 互斥锁的概念和使用线程通信-互斥临界资源:一次只允许一个任务(进程、线程)访问的共享资源临界区:访问临界资源的代码互斥机制:mutex互斥锁,任务访问临界资源前申请锁,访问完后释放锁互斥锁初始化两种方法创建互斥锁,静态方式和动态方式动态方式:int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);其中mutexattr用于指定互斥锁属性,如果为NULL
Linux中并发程序设计(进程的创建和回收、exec函数使用、守护进程创建和使用、GDB的父、子进程代码的调试、线程的创建和参数传递) 进程的创建和回收进程概念概念程序存放在磁盘上的指令和数据的有序集合(文件)静态的进程执行一个程序所分配的资源的总称动态的进程和程序比较注:进程是存在RAM中,程序是存放在ROM(flash)中的进程内容BSS段:存放程序中未初始化的全局变量数据段:已初始化的全局变量,static声明的变量代码段:程序执行代码堆(heap):malloc等函数分配内存栈(stack):局部变量,函数参数,函数的返回值进程控制块(pcb):PID, 进程优先级,文件描述符表进程控制块进
Linux中静态库和动态库的使用 库的概念介绍:库是一个二进制文件,包含的代码可被程序调用标准C库、数学库、线程库…库有源码,可下载后编译;也可以直接安装二进制包位置一般放在:/lib /usr/lib库的知识库是事先编译好的,可以复用的代码在os上运行的程序基本上都要使用库,使用库可以提高开发效率window和Linux下库文件的格式不兼容Linux下包含静态库和动态库静态库的特点编译时把静态库中相关代码复制到可执行文件中程序中已包含代码,运行时不再需要静态库程序运行时无需加载库,运行速度更快占用更多磁盘和
Linux中文件属性的获取(stat、chmod、Istat、fstat函数的使用) 修改文件权限函数如下:chmod/fchmod函数用来修改文件的访问权限:#include <sys/stat.h>int chmod(const char *path, mode_t mode);int fchmod(int fd, mode_t mode);成功时返回0;出错时返回EOF注意:在vmware和windows共享的文件夹下,有些权限不能改变。获取文件属性stat/lstat/fstat函数如下:#include <sys/stat.h&g
Linux中目录的操作和文件属性获取(opendir、readdir、close函数的使用) 访问目录opendir函数#include <dirent.h>DIR *opendir(const char *name);DIR *fdopendir(int fd); 使用文件描述符,要配合open函数使用DIR是用来描述一个打开的目录文件的结构体类型成功时返回目录流指针;出错时返回NULLreaddir函数#include <dirent.h>struct dirent *readdir(DIR *dirp);struct dirent是用来描
Linux中文件IO(open、read、write、close函数使用) 介绍什么是文件IO?是操作系统提供的API接口函数。POSIX接口 (了解)注意:文件IO不提供缓冲机制文件IO的APIopen close read read 文件描述符概念:英文:缩写fd(file descriptor)是0-1023的数字,表示文件。0, 1, 2 的含义 标准输入,标准输出,错误文件IO和标准IO的函数类型文件IO打开使用函数如下:openint open(const char *pathname, int flags); 不创建文件i