自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 计算机网络

1.ip地址无论是局域网,还是广域网中的计算机之间的通信,最终都表现为将数据包从某种形式的链路上的初始节点出发,从一个节点传递到另一个节点,最终传送到目的节点。数据包在这些节点之间的移动都是由ARP(Address Resolution Protocol:地址解析协议)负责将IP地址映射到MAC地址上来完成的。地址解析协议,即ARP(Address Resolution Protoc...

2018-06-29 21:57:20 153

转载 环境变量误删

具体步骤如下:1. 首先重新启动电脑,然后按住F8进入调试界面,选择疑难解答->再选择高级选项->再选择启动设置->然后点击重启->再按4进入安全模式2. 进入安全模式之后和平时差不多,只是没有网络和其他快捷功能,我们的目的是改环境变量,所以就直接进入C:\Windows\System32下的systempropertiesadvanced.exe双击打开,然后就出来了环境...

2018-06-26 20:00:36 662

转载 c语言中的几个关键字

1.static:1.修饰局部变量,首先只要是函数里面的,包括main函数里面的都是局部变量,只有函数外面的才是全局变量,局部变量一般在该函数运行结束时就消亡了,因为这个函数的栈帧此时已经被释放了。但是如果加上 static关键字存储在数据区,而不是栈的位置,只被初始化一次,当该函数再次被调用时,使用的还是这个变量开始的值,不会被改变。且函数运行结束,它也不会被释放,直到整个进程结束。...

2018-06-25 22:20:48 1561

原创 生产者消费者问题

一般这种情况对应的是多个生产者和多个消费者,去操作一个可放N容量的缓冲区其中,一般要求生产者之间互斥,消费者之间互斥,生产者与消费者之间也互斥设生产者开启m个线程,消费者开启n个线程生产者每个线程都执行                                          消费者每个线程都执行sem_wait(&a)                               ...

2018-06-25 21:08:30 120

转载 读写者问题之读者优先

process Reader(void)  {      while(1)      {          P(mutex);          ReadCnt++;          if(1 == ReadCnt)          P(w);          V(mutex);          /*对数据集进行读操作*/          P(mutex);          ReadC...

2018-06-25 10:50:25 3598

原创 EBP

首先明白一点:开启一个线程之后,会产生8M的栈空间,在这8M的栈空间中,只要有函数的使用,都会在这8M的基础上开启一个新的栈帧,而不是在开启一个栈  1 3 发生跳转时将跳转指令的下一条指令保存进来也就是lr 将main函数的栈底指针EBP保存进来,方便待会找到这个桢也就是这个 main函数继续执行(push EBP)   其中ESP指向栈的底部,EBP指向当前执行的函数的桢的顶部,下面来看具体的...

2018-06-24 12:42:55 923

原创 EBP

2018-06-24 12:42:01 399

转载 条件变量与互斥锁的结合使用

对于线程一:1.上锁2.wait3.解锁对于线程二:1.上锁2.signal3.解锁In Thread1:pthread_mutex_lock(&m_mutex);pthread_cond_wait(&m_cond,&m_mutex);pthread_mutex_unlock(&m_mutex);In...

2018-06-20 20:10:59 523

原创 一级指针与二级指针

void swap(int *x,int *y){}void swap2(int **m,int **n){int *x;x=*m;*m=*n;*n=x;}void main(){int a=1,b=2,*p=&a,*q=&b;swap(p,q);printf("%d,%d,%d,%d\n",a,b,*p*q);swap2(&p,&q);printf("%d,%d,...

2018-06-20 11:06:44 224

原创 使用SWI指令完成两个数的相加和相乘

AREA topswi, CODE, READONLY entry ldr pc,=start mov r0,#0xff b    SWI_Handler  B    C_SWI_Handlerstart LDR R1,=0x10101010 LDR R2,=0x20202020  LDR R3,=0x1010101 LDR R4,=0x2020202 SWI 1  这是程序发生的第一次sw...

2018-06-19 11:55:58 497

转载 ldmfd与stmfd指令(ARM指令总结)

stmfd r13!,{r0,r1,r2}首先可以理解为r13中存放的是内存中的栈的可用的地址,r13寄存器指向的这块栈与寄存器r0,r1,r2中的数据进行交换并且因为ARM是以4个字节为单位处理数据,所以r13中存放的地址要以4个字节为单位往下移动,虽然这4个字节的地址范围,只存放寄存器中的数据,如果是立即数,只占一个字节,剩余的地址空间内全部补0即可mov r1, #0x11mov r2, #...

2018-06-18 16:12:43 11661 2

原创 keil出现的错误

首先,编译器的不同可以使得在汇编阶段产生错误,因为keil下现在可以使用两套不同的编译器,但是对于不同的编译器,识别的汇编语言格式不同,所以,再出错时,检查编译器是否调换回来其次,map.lds文件负责内存的映射,如果缺少这个文件,会使得调试过程中,出现没有访问权限这一说所有的指令的内存地址都无法查看...

2018-06-16 21:55:23 2109

原创 在keil中看内存地址

从上图可以看出当执行mov r3 #0x0010时,因为指令需要先加载进内存中,内存中发生如下变化1.当板子上电之后,第一步加载进内存的是中断向量表,但不是说0x000000000这块内存空间不可以使用了2.指令在内存中也是以十六进制的方式存在的对于mov r0 #0x0010这样一条指令来说,如果是小于255的立即数,那么这个立即数只占一个字节,这里也可以验证了内存中是以字节为单位存放数据的,从...

2018-06-16 20:52:40 11275

原创 汇编内存地址的特点

首先,32位cpu每次跟内存进行交换时,是以32bit为单位。所以,它的每条指令长度都是32位在ARM体系架构中,是以字节为单位进行编址的,例如0x0000-0x0004它的差是4,但是这个4是十六进制下的4,我们需要转化为十进制下的4,这里是4个字节,一共是32位,所以对于内存空间的这种排布,看到0x0000-0x0004不是说指令只存放在最后的几位,这里只需要计算出差,转化为十进制下的差,差的...

2018-06-16 18:12:07 2429

原创 编译过程及keil中选项的作用

以下过程都是编译器做的1.预处理所有#展开生成.i文件2.编译将上述文件生成.s汇编文件,即文件里面现在是汇编代码3.汇编将上述汇编文件生成二进制文件.o,也就是机器码4.链接给上述二进制文件找到依赖的库,最后生成可执行文件.out所以可以看出,不是说汇编语言就不需要编译器,编译器的作用是将不管是.c文件还是.s文件,最后生成可执行文件所以,很多编译器比如gcc,armcc不只有编译高级语言的功能...

2018-06-14 20:57:25 2695

原创 函数地址传参

函数地址传参最常见的形式就是:#include stdio.hint main(){int i;  int n=6; int a[6]={7,5,3,4,12,54}; for(i=0;i<n;i++) printf("%d ",a[i]);   printf("\n排序之后\n");   Sort(a,n);  相当于是sort(&a,n);这里是将数组a的地址传递下去,接...

2018-06-12 22:25:46 588

空空如也

空空如也

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

TA关注的人

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