自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 如何在Linux中安装ARM交叉环境编译链

【代码】如何在Linux中安装ARM交叉环境编译链。

2024-03-07 19:27:23 254

原创 ARM地址映射表

硬件控制原理只有Load/start指令可以读写硬件控制器量的寄存器,从而操作硬件地址划分图如下(其中IO(SFR)用来操控硬件的):注意:对于一个32位的处理器,里面的所有寄存器都是32位地址,所以范围位2的32次方,就是4GB,CPU本身不能直接控制硬件的,硬件一般由其对应的控制器来控制,SOC中将各个硬件控制器的寄存器映射到了CPU地址空间中的一段范围,这样CPU就可以通过读写寄存器来间接控制硬件。强调下:这里的寄存器在SOC中但在CPU外,有地址,访问方式与内存一样,常用于控制硬件。地址映

2024-03-07 16:51:50 333

原创 ARM中伪操作与混合编程

}

2024-03-07 10:30:20 1083

原创 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异常响应异常返回异常响应代码如下:状态寄存器传送指令

2024-03-06 20:20:50 1055 1

原创 ARM中多寄存内存访问概念和栈的种类和应用

多寄存器内存访问指令。

2024-03-06 13:41:45 1018

原创 ARM中汇编语言的学习(加法、乘法、除法、左移、右移、按位与等多种命令操作实例以及ARM的 N、Z、C、V 标志位的解释)

汇编概述汇编需要学习的大致框架如下:@ 汇编中的符号@ 1.指令;能够北嘁肷梢惶?2bit机器码,并且能够被cpui识别和执行@ 2.伪指令:本身不是指令,编译器可以将其替换成若干条指令@ 3.伪操作:不会生成指令,只在编译阶段告诉编译器怎么编译@ ARM指令集@ 1.数据处理指令:进行数学运算、逻辑运算@ 2.跳转指令:实现程序的眺转,本质就是修改PC寄存器@ 3.Load/Score指令:访问(读写)内存@ 4.状态寄存器传送指令:用于访问(读写)CPSR寄存器@ 5.软中断指

2024-03-04 20:12:08 695

原创 Linux小项目:在线词典开发

【代码】Linux小项目:在线词典开发。

2024-02-28 20:16:32 778

原创 Linux中数据库sqlite3的基本命令的使用

【代码】Linux中数据库sqlite3的基本命令的使用。

2024-02-27 22:18:18 1158

原创 Linux中消息队列(msgget、msgsnd、msgrcv、msgctl函数使用、P、V操作的案例代码介绍)

sem);有名信号灯的删除。

2024-02-26 20:57:56 944

原创 Linux中信号机制

ITIMER_PROF: 进程在用户模式(即程序执行时)和核心模式(即进程调度用时)均计算时间。发送SIGPROF信号。ITIMER_VIRTUAL: 计算进程(用户模式)执行的时间。发送SIGVTALRM信号。old_value: 存放旧的timeout值,一般指定为NULL。ITIMER_REAL:以逝去时间递减。发送SIGALRM信号。new_value: 负责设定 timout 时间。功能:定时的发送alarm信号。

2024-02-19 23:49:31 910

原创 Linux中共享内存(mmap函数的使用)

内存映射的基本使用内存映射概念:使一个磁盘文件与内存中的一个缓冲区相映射,进程可以像访问普通内存一样对文件进行访问,不必再调用read,write。mmap()的优点:实现了用户空间和内核空间的高效交互方式优化前:优化后:文件映射图函数定义:void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); 功能:创建共享内存映射函数返回值:成功返回创建的映射区首地址,失败返

2024-02-06 17:28:26 911

原创 Linux中有名管道和无名管道

文件io和标准io的区别

2024-02-05 19:36:03 958

原创 Linux中线程池及gdb调试多线程

线程池的概念概念:通俗的讲就是一个线程的池子,可以循环的完成任务的一组线程集合必要性:我们平时创建一个线程,完成某一个任务,等待线程的退出。但当需要创建大量的线程时,假设T1为创建线程时间,T2为在线程任务执行时间,T3为线程销毁时间,当 T1+T3 > T2,这时候就不划算了,使用线程池可以降低频繁创建和销毁线程所带来的开销,任务处理时间比较短的时候这个好处非常显著。线程池的基本结构:1 任务队列,存储需要处理的任务,由工作线程来处理这些任务2 线程池工作线程,它是任务队列任务的消费

2024-01-31 19:38:52 392

原创 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

2024-01-29 22:14:47 462

原创 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

2024-01-28 23:16:59 273

原创 Linux中并发程序设计(进程的创建和回收、exec函数使用、守护进程创建和使用、GDB的父、子进程代码的调试、线程的创建和参数传递)

进程的创建和回收进程概念概念程序存放在磁盘上的指令和数据的有序集合(文件)静态的进程执行一个程序所分配的资源的总称动态的进程和程序比较注:进程是存在RAM中,程序是存放在ROM(flash)中的进程内容BSS段:存放程序中未初始化的全局变量数据段:已初始化的全局变量,static声明的变量代码段:程序执行代码堆(heap):malloc等函数分配内存栈(stack):局部变量,函数参数,函数的返回值进程控制块(pcb):PID, 进程优先级,文件描述符表进程控制块进

2024-01-24 22:08:43 1054

原创 Linux中静态库和动态库的使用

库的概念介绍:库是一个二进制文件,包含的代码可被程序调用标准C库、数学库、线程库…库有源码,可下载后编译;也可以直接安装二进制包位置一般放在:/lib /usr/lib库的知识库是事先编译好的,可以复用的代码在os上运行的程序基本上都要使用库,使用库可以提高开发效率window和Linux下库文件的格式不兼容Linux下包含静态库和动态库静态库的特点编译时把静态库中相关代码复制到可执行文件中程序中已包含代码,运行时不再需要静态库程序运行时无需加载库,运行速度更快占用更多磁盘和

2024-01-23 20:49:42 1116

原创 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

2024-01-23 18:15:10 490

原创 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是用来描

2024-01-23 17:42:10 448

原创 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

2024-01-23 16:22:20 965

原创 Linux中标准I/O的例题

注:这里要需要加一个函数,才可以将文件输入到txt文件中,那就是在sleep(1)前加入fflush(fp)函数。一年中的第几天,范围从 0 到 365。一月中的第几天,范围从 1 到 31。获取的值加1900是正确的年份。一周中的第几天,范围从 0 到 6。int tm_mon;获取的值要加1是正确的月份。小时,范围从 0 到 23。月份,范围从 0 到 11。秒,范围从 0 到 59。分,范围从 0 到 59。自 1900 起的年数。time()用来获取系统时间(秒数)

2024-01-22 22:25:07 385

原创 Linux中sprintf、fprintf、sscanf、fscanf函数的使用

格式化输出int fprintf(FILE *stream, const char *fmt, …);//输出到文件里int sprintf(char *s, const char *fmt, …);//输出到指定的字符串里面去成功时返回输出的字符个数;出错时返回EOFsprintf函数调用代码如下:执行如下:fprintf函数调用代码如下:执行如下:格式化输入函数如下:int fscanf(FILE *stream, const char *format, …);int

2024-01-22 17:21:01 620

原创 Linux中流刷新定位函数(fseek、rewind、ftell函数)

fseek 参数whence参数:SEEK_SET/SEEK_CUR/SEEK_END。2.rewind(fp) 相当于 fseek(fp,0,SEEK_SET);//返回当前指针的位置。SEEK_END:将读写位置指向文件尾后再增加 offset 个位移量。SEEK_SET 从距文件开头 offset 位移量为新的读写位置。SEEK_CUR:以目前的读写位置往后增加 offset 个位移量。1.文件的打开使用a模式 fseek无效。offset参数:偏移量,可正可负。注:a的方式打开的话不起作用。

2024-01-22 16:32:20 433

原创 Linux中二进制读写函数fread、fwrite使用

函数如下://从fp读的内容放进ptr中,返回值时读取的个数void *ptr 读取内容放的位置指针size_t size 读取的块大小size_t n 读取的个数FILE *fp 读取的文件指针//从ptr写入到fp中,其他同上void *ptr 写文件的内容的位置指针size_t size 写的块大小size_t n 写的个数FILE *fp 要写的文件指针注意事项:文件写完后,文件指针指向文件末尾,如果这时候读,读不出来内容。

2024-01-22 15:30:46 636

原创 Linux中fopen、fgets、fputs、fclose、perror等函数的用法

2遇到这种错误:Bad file descriptor,很可能是文件打开的模式错误(只读模式去写,只写模式去读)注:每次打开文件,都是从第一个字符开始读,读完一个读下一个,一定要注意如果关闭文件后再打开也是从头开始读文件。putchar©等同于fputc(c, stdout)//输出到屏幕上。成功时返回写入的字符;1返回和输入参数都是int类型。

2024-01-21 16:15:28 371 1

原创 Linux中文件的打开和关闭概念

文件的打开函数,可用于打开一个标准IO流://FILE可以理解为结构体Path: 普通文件当前路径不需要加目录,其他要使用完整的路径Mode:“r” 或 “rb” 以只读方式打开文件,文件必须存在。“r+” 或 ”r+b” 以读写方式打开文件,文件必须存在。“w” 或 “wb” 以只写方式打开文件,若文件存在则文件长度清为0。若文件不存 在则创建。“w+” 或 “w+b” 以读写方式打开文件,其他同”w”。

2024-01-21 10:03:42 377 1

原创 Linux中标准IO概念及缓冲区

【代码】Linux中标准IO概念及缓冲区。

2024-01-20 16:01:09 347

原创 Linux中Makefile用法及变量

(1)make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE 都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。(2)自动化编译:一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软 件开发的效率。5.注意make只会编译修改后的文件,以及删除可执行文件.o,在执行make会重新生成的。(3)提高编译效率:再次编译,只编译修改的文件。

2024-01-18 21:09:45 1063

原创 GCC的基本用法和GDB调试

c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。-O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,-L dirname,将dirname所指出的目录加入到程序函数档案库文件的目录列表中,是在链接过程中使用的参数。-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。

2024-01-18 18:05:01 400 1

原创 Linux中GCC的使用即介绍

注:可以看出来预处理就是把头文件展开,宏定义进行替换。注:此时还不能运行,说明还没有链接我们的库文件。gcc test.o -o test:链接库。(4)链接:将.o文件链接生成可执行文件.exe文件。(2)编译:将预处理文件.i文件编译成汇编文件.s。(3)汇编:进行汇编处理将.s文件变为.o目标文件。(1)预处理:将源代码.c文件预处理成.i文件。

2024-01-18 11:08:46 380 1

原创 Linux中NFS服务器的搭建和安装

网络文件系统即将本地系统放在网络上某一个位置的系统,基于UDP/IP使用nfs能够在不同计算机之间通过网络进行文件共享,能使使用者访问网络上其他计算机中的文件就像在访问自己的计算机一样,也就是说放在一个开发板上,我照样可以操作,有权限操作,因此在ubuntu中可以看到两个文件系统,开发版一个,自己的系统一个。*sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性。(2)创建一个目录,并在该目录下创建一个文件,用户测试nfs。(2)容易扩展新资源或软件,不需要改变现有的工作环境。

2024-01-18 10:28:51 464 1

原创 Linux中TFTP服务器的介绍以及搭建安装

用另一个客户端输入tftp localhost 进入“客户端”,然后get test,注意此时的test文件是 之前我们创建的tftpboot的目录中的文件,也是配置文件中的那个服务器的路径位置。TFTP_OPTIONS="-I -c -s",-l:不依赖于其他进程,自己独立方式启动,-c:可创建新文 件,-s:改变TFTP启动的根目录,就是上面配置好的目录。(3)没有一个庞大的命令集,没有列目录的功能,也不能对用户进行身份鉴别。

2024-01-17 21:48:57 565

原创 Linux中shell脚本的分支语句、循环语句

注:变量依次取单词表中的各个单词, 每取一次单词, 就执行一次循环体中的命令. 循环 次数由单词表中的单词数确定. 命令表中的命令可以是一条, 也可以是由分号或换行符分 开的多条。可以加入一个判断出错的语句如下,也可以写成c语言的形式,例如:[] || []注:它返回的不是一个返回值1,而是原来函数的echo里面的值。*while (())与c语言类似。while 命令或表达式。(5)上面的进阶操作,加上位置变量操作。

2024-01-17 20:51:54 898

原创 Linux shell 脚本编程

Shell是Linux学习过程中很重要的一部分,它有两种执行命令的方式:交互式(Interactive),用户输入一条命令,Shell就解释执行一条;3.变量的作用:用于存放系统和用户需要使用的特定参数,变量名使用固定的名称,由系统预设或用户定义,变量值:能够根据用户设置、系统环境的变化而变化。*位置变量穿参数,$0与键入的命令行一样,echo$#表示的命令行传入的参数个数,不包含./test3.sh。(2)编写下面程序,#!是我们说明的内容,这一行的命令的意思是我们用的是bash的shell类型。

2024-01-16 21:54:12 1070 1

原创 进程管理、用户管理

1.进程是一个实体,每一个进程都有它自己的地址空间,一般情况下,包括文本区域、数据区域和堆栈。1./etc/passed文件:保存用户的信息,用户登录的时候,系统查询这个文件,确定用户的UID并验证用户口令:登录名、经过加密的口令、UID、默认的GID\个人信息、主目录、登录shell。程序是一个没有生命的实体,只有处理器赋予程序赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。注:2号的话一般CTRL+c执行的时这个信号,如果不指定信号的话默认时15号的信号,9时进程终止的信号等等。

2024-01-16 16:46:32 346 1

原创 ubuntu的解压缩命令

2.使用gzip和gunzip来对多个文件进行解压缩,这时候可以看出来结果是两个文件是分开的,说明没有进行归档,要注意gzip不能对目录进行压缩。6.归档后的压缩则要解压缩,-后面多了一个字母j,则是解压bz2后缀的,如果是gz结尾的就加字母z就可以了。3.在进行解压,可以看出来这个zip和unzip不管是解压和压缩都保留原文件,比上述两种要优。2.使用zip进行归档,将test1和test2归档在test.zip。2.操作与上述类似这里就不赘述了,直接加文件,且不能对目录进行压缩。

2024-01-15 21:56:01 1408 1

原创 Ubuntu中awk的用法

1.awk '{print $1}' file:只显示file文件中的第一列,更改数字来显示不同列。2.awk '{print NR,$1}' file::加上NR显示行号。3.awk '{print NF,$1}' file:显示多少列。4.awk '{print $NF}' file:显示最后一列。

2024-01-15 10:49:28 380 1

原创 ubuntu中sed命令用法

4.sed -i ‘1d’ passwd:真正的删除第一行,如果不加i的话只是在预览的时候不显示而已,其实文件里还是存在第一行的。1.sed ‘1p’ passwd :打印第一行内容,改为sed -n ‘1p’ passwd 只显示第一行。8.sed -i 's/root/Root/' passwd:其中s是替换操作,将root替换成Root。sed -i 's/root/Root/g' passwd,即替换成功。2.sed -n ‘1,4p’ passwd:打印第一行到第四行。

2024-01-15 10:04:42 507 1

原创 Ubuntu中的硬链接和软链接

(1)创建软连接,这里的话和硬链接一样都是可以通过修改链接文件从而达到修改源文件的效果,有一个区别就是这里的文件inode改变了。(3)vim 1.txt 查看原文件与上面相同,这里自己实验,就不赘述了。(4)如果删除文件后,软连接则恢复链接,硬链接中则保持原来的内容。(1)如果修改硬链接的目标文件名,链接依然有效。(2)如果修改软连接的目标文件名,则链接断开。(3)如果删除和移动文件,会发生断开。(2)vim 1.hard里面修改。(1)创建硬链接文件。3.硬链接和链接的区别。

2024-01-15 09:14:49 1511 1

原创 在Ubuntu中如何输出/输入重定向?

输入/输出是改变shell命令或程序默认的标准输入/输出目标,重新定向到新的目标。则默认输出到下方,那么重定向的作用就是将下方这一样输出到别的地方去。5.单纯的输出错误重定向就是将&替换成2即可,2的话一般默认为错误信息的文件描述符。1.cat < file:将file文件重定向为输入源。3.将输出位置改变到log中。1.首先要了解什么时重定向。

2024-01-14 22:24:12 602

空空如也

空空如也

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

TA关注的人

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