03 2016 档案

摘要:姿态角(Euler角)pitch yaw roll飞行器的姿态角并不是指哪个角度,是三个角度的统称。它们是:俯仰、滚转、偏航。你可以想象是飞机围绕XYZ三个轴分别转动形成的夹角。地面坐标系(earth-surface inertial reference frame)Sg OXgYgZg<ignor 阅读全文
posted @ 2016-03-23 10:47 DChipNau 阅读(58178) 评论(3) 推荐(0)
摘要:1)首先,创建一个.c文件,其大体内容如下: 2 #include <Python.h> 99 char * extract(char * path) //想要调用的函数100 {112 char * Q = (char * )malloc(3*sizeof(char)); 。 。 。149 ret 阅读全文
posted @ 2016-03-19 23:19 DChipNau 阅读(2996) 评论(0) 推荐(0)
摘要:Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持。Live555实现 了对多种音视频编码格式的音视频数据的流化、接收和处理等支持,包括MPEG、H.263+、DV、JPEG视频和多种音频编码。同时由于良好的设 阅读全文
posted @ 2016-03-09 11:15 DChipNau 阅读(3106) 评论(0) 推荐(0)
摘要:分两阶段,第一阶段主要用汇编完成,第二阶段主要用c完成。个人觉得两个阶段的分工并没有什么明显的要求,很多硬件的初始化可以放到第一阶段也可以放到第二阶段。只不过有一些复杂工作用汇编比较麻烦。 一般来说第一阶段工作:1. 硬件设备初始化。2. 为加载bootloader的第二阶段代码准备RAM空间。3. 复制bootloader的第二阶段代码到RAM空间中。4. 设置好栈。5. 跳转到第二阶段代码... 阅读全文
posted @ 2016-03-08 21:44 DChipNau 阅读(273) 评论(0) 推荐(0)
摘要:Ldr和bl在启动程序中,都是可以负责pc跳转的指令。 1)bl是地址无关指令,和什么地址无关呢?和当前的运行地址无关,链接器脚本中标明了一个运行地址,但是arm中的代码实际是从地址0开始运行的。这个时候实际的地址和运行地址是不符的,如果想让程序正常的运行,就得使用地址无关指令。比如在完成将程序复制到内存之前想要跳转到一个函数里,就得使用bl,因为bl跳转依靠的是相对地址,和运行地址无关,所以能完... 阅读全文
posted @ 2016-03-08 21:42 DChipNau 阅读(1088) 评论(0) 推荐(1)
摘要:时钟两种能够提供时钟的方式:1) 晶振2) PLL(也就是锁相环):通用PLL需啊一个晶振,和对晶体特定频率分频或倍频的锁相环电路。 学习ARM9时钟的四步:1) 晶振:12MHZ2) 有多少个PLL:两个,MPLL和UPLL3) PLL产生了哪些时钟:MPLL:FCLK HCLK PCLKUPLL:UCLK4) 时钟都用来做什么了:FCLK:用于CPU核。HCLK:用于AHB总线设备,如cp... 阅读全文
posted @ 2016-03-08 21:41 DChipNau 阅读(1128) 评论(0) 推荐(0)
摘要:GPIO 习惯了stm32的GPIO,发现高端处理器arm在这方面反而简单了。 ARM9控制GPIO只有三种寄存器。 GPxCON:配置引脚功能,GPACON用一位控制一个GPIO,分别是0为输出引脚,1为输入引脚。GPBCON---GPH/JCON 则用两位控制一个引脚,分别是00表示输入,01表示输出,10表示特殊功能。 GPxDAT:当此引脚被设置为输入时,读此引脚可知相应引脚的电平状态... 阅读全文
posted @ 2016-03-08 21:40 DChipNau 阅读(1775) 评论(0) 推荐(0)
摘要:这一快理解的非常浅:MMU 虚拟存储器对内存进行了逻辑上的扩充。比如一个32位的CPU系统,逻辑上的寻址可以达到4GB,但是如果直接对物理地址进行寻址,就要受到主存大小的限制。 在这种条件下,虚拟地址应运而生,每个应用程序的访存空间都可以达到4GB,当然这里用的是虚拟地址。Cpu发出虚拟地址之后会被转化为MVA(变化后的虚拟地址),MMU接收到MVA,将MVA转化为物理地址。 现在,先来看看... 阅读全文
posted @ 2016-03-08 21:39 DChipNau 阅读(783) 评论(0) 推荐(0)
摘要:Arm可以引出27根地址线,只能实现128MB的寻址,那么要如何实现1GB的寻址呢?答案就是使用nGCS片选线,nGCSx为低电平为选中相应的外接设备。一共八根片选线,也就是bank1,bank2…以此来实现1GB的寻址。 2440为32位,理论上的寻址范围为4GB,除了这1GB,其他的没有使用。2440的寄存器范围都处于0x48000000-0x5fffffff之间。 下图是分别... 阅读全文
posted @ 2016-03-08 21:38 DChipNau 阅读(812) 评论(0) 推荐(0)
摘要:上图中的cp15就是协处理器。 那么什么是协处理器呢?如下: Cp15的详细信息:系统控制协处理器,通过修改cp15的寄存器,可以修改MMU,cache,时钟模式等系统选项,从而完成系统控制。 CP15的寄存器要通过MRC和MCR指令来访问。来自为知笔记(Wiz) 阅读全文
posted @ 2016-03-08 21:37 DChipNau 阅读(343) 评论(0) 推荐(0)
摘要:好了,言归正传,裸机程序没有操作系统的支持,想要用c语言,就只能先使用汇编语言手动配置c语言需要的环境,听起来很高大上,其实需要做的很简单:指定堆栈指针的值就好。 那么完成这个简单的事情之前,先要明白c语言的栈的以下几个概念:1. 空栈和满栈:这两个概念不是说的栈是空的还是满的,空栈是指栈指针指向的是栈顶元素的下一个地址。满栈指的是栈顶指针指的是栈顶元素。 2. 升栈和降栈:升栈就是栈向上生长... 阅读全文
posted @ 2016-03-08 21:37 DChipNau 阅读(646) 评论(0) 推荐(0)
摘要:Mov 立即数受限的原因:因为根据下图,mov的机器指令中立即数最多能有12位,其中有四位代表移位,所以立即数最多能有8位。 伪指令有两种:操作类伪指令和定义类伪指令定义类伪指令 Global 定义一个全局的变量Data 定义数据段Ascii 定义一个字符串Byte 定义一个字节数据Word 定义一个字数据Equ 定义一个宏例子: 操作类伪指令(实际用其他指令替代) Ldr 伪指令:作... 阅读全文
posted @ 2016-03-08 21:36 DChipNau 阅读(1090) 评论(0) 推荐(0)
摘要:工作模式Arm有7种工作模式:名称简称简介UserUsr正常用户程序执行的模式(linux下用户程序就是在这一模式执行的。)FIQFiq快速中断模式IRQIrq普通中断模式SupervisorSvc给操作系统准备的保护模式,权限很高的一种模式,linux的内核就是运行在此模式AbortAbt比如访问虚拟内存,导致了异常,就是进入这一模式。UndefinedUnd运行一条处理器并不支持的指令就进入此... 阅读全文
posted @ 2016-03-08 21:34 DChipNau 阅读(1793) 评论(0) 推荐(0)
摘要:2440是arm9核,是基于v4 架构6410是arm11核 基于v6架构210是a8的核 基于v7架构 前面的是经典阵营,比较老。Arm11之后改为contex系列。Arm7的水准和M3相近Arm9,arm11的水准在R4和A5之间 妈蛋。。。2440停产了。。。。。。。。。。来自为知笔记(Wiz) 阅读全文
posted @ 2016-03-08 21:33 DChipNau 阅读(299) 评论(0) 推荐(0)
摘要:一个链接器脚本里面有三个段:代码段,数据段,bss段。 除了段的信息,一个链接器脚本还应该包括:1.规定起始链接地址。2.指明对齐方式。3.还可以设置变量。4.规定哪个文件时代码首文件。 下面敲得是一段完整的链接器脚本的文件。代码首文件是指链接的时候把哪一个文件放在最前面。 使用方法为: 来自为知笔记(Wiz) 阅读全文
posted @ 2016-03-08 21:32 DChipNau 阅读(351) 评论(0) 推荐(0)
摘要:Arm-linux-gcc: gcc和arm-linux-gcc的头文件并不一样。 Eg. Arm-linux-ld:链接器,-T参数是使用链接器脚本。 Eg. Arm-linux-readelf:读取elf文件信息 -a:查看全部信息 -d:查看用到的库 ... 阅读全文
posted @ 2016-03-08 21:31 DChipNau 阅读(955) 评论(0) 推荐(0)
摘要:111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 阅读全文
posted @ 2016-03-08 20:50 DChipNau 阅读(824) 评论(1) 推荐(2)
摘要:1.stm32综述2.寄存器组3.操作模式和特权级别4.存储器映射5.中断和异常6.其他 Stm32综述这可以说是我第一款认真学习的单片机了,学完这个就要开启我通往arm9的大门了,接下来把我学到的东西做一个系统的概述: 上图是stm32的系统结构。 使用哈弗体系结构,取指和取数据分离, ICODE指令总线连接到flash闪... 阅读全文
posted @ 2016-03-08 20:38 DChipNau 阅读(10809) 评论(0) 推荐(0)
摘要:使用fatfs文件的第一步,就是调用F_mount函数注册一个工作空间。 F_mount函数的原型如下: 第一个参数根据网上大神的答复,是外设类型,如果是sd卡就是0,flash等等其他的外设就是其他得数,据说有定义,不过我没找到。第二个参数FATFS指针就是工作空间的指针,个人感觉有点lwip网卡数据结构的感觉。 FATFS数据结构及解释如下,个人感觉了解FATFS这个工作空间数据结构是什么... 阅读全文
posted @ 2016-03-08 20:30 DChipNau 阅读(936) 评论(0) 推荐(0)
摘要:液晶估计也就只能白话这么一点了。 Fsmc是stm32一种新型的存储器拓展技术,可根据系统的应用需要,方便的进行不同类型大容量静态存储器的拓展。 Fsmc芯片分为如下几个部分: Fsmc能将AHB上的传输信号转换到适当的外部设备协议,从而完成相应的内存映射,fsmc管理的是stm32中60000000h到9fffffffh这1GB的内存,他可以将NOR闪存外设,PSRAM外设,... 阅读全文
posted @ 2016-03-08 20:26 DChipNau 阅读(1799) 评论(0) 推荐(0)
摘要:Stm32的看门狗有两个,一个是窗口看门狗,还有一个是独立看门狗。这里说的是独立看门狗: 一共有四个寄存器: KR:只写寄存器,写入0x55555555去除PR和PLR的写保护,写入0xAAAAAAAA喂狗,写入0xCCCCCCCC开启看门狗。 PR:设置分频系数 PLR:计数器从这个寄存器的值递减,如果KR被写0xAAAAAAAA,这个值会被重新传送到计数器。和PR一起决定两... 阅读全文
posted @ 2016-03-08 20:25 DChipNau 阅读(193) 评论(0) 推荐(0)
摘要:做到了让stm32触发svc中断并传递进去参数然后切换到handler模式并修改特殊寄存器的值,从而达到关中断,但是其实这个程序直接就是特权级,故不进入handler模式也可以修改特殊寄存器。。。。。。如下为调用写的开关中断函数: 新建了一个文件asm.c,所有我写的汇编函数都在里面: 前两个是关中断和开中断函数,主要做的事将参数传入R8并触发svc中断。Svc中断中则调用第三个set_i()函... 阅读全文
posted @ 2016-03-08 20:24 DChipNau 阅读(2061) 评论(0) 推荐(0)
摘要:首先,先看一下mdk下的混合编程的基本方法: 使用如上方法就可以进行混合编程了。 但是要特殊注意一点,个人感觉这个是直接调用一个代码段,并非一个函数,因为他不会保护调用这个代码段之前的现场。比如: 在调用上面这个代码段之前,先定义一个num变量,供下面使用,如下: 而根据mdk的c语言转化成的汇编,将这个num变量存在R10中 那么进入这个代码段之后,R10的值被修改为4,返回到主函数,num的... 阅读全文
posted @ 2016-03-08 20:23 DChipNau 阅读(1676) 评论(0) 推荐(0)
摘要:SPI是器件的比较常用的通信协议。 SPI总共有四根线: SS:片选线,每个设备都和主机MCU有一条单独片选线相连,片选线拉低意味主机输出,也就是说一个主机可以和多个从机相连,只需要有足够多的片选线。 SCK:时钟线,SPI捕获数据是在时钟的跳变沿(可以设置是在奇数沿还是在偶数沿)。 MOSI::输出线 MISO:输入线 SPI有四种模式:这四种模式靠时钟极性(CPOL)和相位... 阅读全文
posted @ 2016-03-08 20:19 DChipNau 阅读(653) 评论(0) 推荐(0)
摘要:SD卡从容量上讲分两种:标准容量和大容量,最小的是标准容量,小于等于2G 其中的访问关系如下: SD卡分为两种模式:认证模式和传输模式,每一个模式包含着不同的状态,如下 以下主要讲其初始化过程: SD卡初始化主要包含5条命令:CMD0,CMD8,ACMD41,CMD2,CMD3,初始化在认证模式下进行,此模式只用到CMDLine。 上电之后,所... 阅读全文
posted @ 2016-03-08 20:18 DChipNau 阅读(3191) 评论(0) 推荐(0)
摘要:Stm32内部有多个BKP寄存器,在主电源被切断或者系统产生复位的时候,BKP寄存器仍然可以利用备用电源的支持保持其重要内容。BKP在实际应用中可以存入重要数据,防止被恶意查看。BKP有入侵检测,需要占用1个io口,毕竟有时候销毁重要数据比被别人发现更好。RTC框图如下:灰颜色的地方是待机仍然可以供电。 Stm32中RTC可以设置三种中断:1.闹钟中断:数据达到闹钟寄存器中的值的时候发生中断。... 阅读全文
posted @ 2016-03-08 20:11 DChipNau 阅读(685) 评论(0) 推荐(0)
摘要:Lwip有三套api,分别是: raw api:使用方法为使用回调函数,即先注册一个函数,当接受到数据之后调用这个函数。缺点是对于数据连续处理不好。 Lwip api:把接收与处理放在一个线程里面。因为需要线程的概念,故需要操作系统,当然,ucos虽然只有进程的概念,但是也可以用。 BSD api:与unix兼容,移植容易,效率低。 附完整叙述大图 ... 阅读全文
posted @ 2016-03-08 20:10 DChipNau 阅读(806) 评论(0) 推荐(0)
摘要:Ad-hoc是wifi的一个模式,依托普通无线局域网802.11家族。网络中所有结点的地位平等,无需设置任何的中心控制结点,省去了无线中介设备AP。比如一台电脑建立了一个网络,这个时候加入了两台电脑。第一个电脑这个时候关闭,那么后来的两台电脑仍可以继续通信,不会受到影响。 Ad hoc网络是一个动态的网络。网络结点可以随处移动,也可以随时开机和关机,这些都会使网络的拓扑结构随时发生变化。Ad-h... 阅读全文
posted @ 2016-03-08 20:09 DChipNau 阅读(564) 评论(0) 推荐(0)
摘要:老是弄不明白ADC的输入到底在哪,看了stm32F103Ve的datasheet,将引脚和通道的映射关系贴在下面: 好了,写到这,我已经看了中文手册一上午了,可是啥都没看懂,下午接着看,写代码不重要,理论高于实际。 ADC的四种模式:单次转换模式,连续转换模式,扫描模式,间断模式(间断模式分为规则组和注入组)单次转换模式:ADC只执行一次转换,CONT=0。连续转换模式:ADC转换一结束就启... 阅读全文
posted @ 2016-03-08 20:08 DChipNau 阅读(7354) 评论(0) 推荐(0)
摘要:http://witmax.cn/gdb-usage.html 首先GDB可以自动化调试,但是我不会 首先编译的时候要加上 -g选项 分屏使用GDB: gdb -tui 在GDB中加载程序 : file 文件名 设置参数: set args 参数 设置观察点(当有... 阅读全文
posted @ 2016-03-08 20:04 DChipNau 阅读(790) 评论(0) 推荐(0)
摘要:管道 管道应该是等左边的程序执行完,才使用左边的程序的输出执行右边的程序。 但是在测试的时候,如果左边的程序无限循环且不等待的输出,那么左边的程序执行时右边的程序也会执行,个人感觉这是linux的机制,因为缓冲区溢出了所以不得不启动右边的程序来使缓冲区空出来。 管道和重定向的区别1.左边的命令应该有标准输出|右边的命令应该有标准输入左边的命令应该有标准输出>右边只能是文... 阅读全文
posted @ 2016-03-08 20:03 DChipNau 阅读(912) 评论(0) 推荐(0)
摘要:Linux日志查看: 1.Last-a 把从何处登入系统的主机名称或IP地址,显示在最后一行。-d 指定记录文件。指定记录文件。将IP地址转换成主机名称。-f 指定记录文件。-n 或- 设置列出名单的显示列数。-R 不显示登入系统的主机名称或IP地址。-x 显示系统关机,重新开机,以及执行等级的改变等信息 总之就是查看设备的登录记录。 2.History查看历史指令 3.cat, tail ... 阅读全文
posted @ 2016-03-08 20:02 DChipNau 阅读(325) 评论(0) 推荐(0)
摘要:来自为知笔记(Wiz) 阅读全文
posted @ 2016-03-08 20:02 DChipNau 阅读(165) 评论(0) 推荐(0)
摘要:Linux启动流程先上一张和下文无关的图: 然后下面是另一篇文章中的内容:启动第一步--加载BIOS当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。启动第二步--读取MBR... 阅读全文
posted @ 2016-03-08 20:01 DChipNau 阅读(234) 评论(0) 推荐(0)
摘要:Linux 终端下颜色的输出在命令行下也能产生五颜六色的字体和图案,只需要加上一些颜色代码,例如 echo -e "\033[41;36m 红底绿字\033[0m" 其中41的位置代表底色, 36的位置是代表字的颜色 那些ascii code 是对颜色调用的始末. \033[ ; m …… \033[0m 字背景颜色范围:40----49 40:黑 41:... 阅读全文
posted @ 2016-03-08 20:00 DChipNau 阅读(277) 评论(0) 推荐(0)
摘要:Linux文件比较指令有两个,comm和diff,其中comm要求的是排序过得文件。Diff则没有这个要求,diff的输出结果主要是用来表明文件一经过怎样的修改可以得到文件二。CommComm的语法如下: Comm的选项如下: 通过上面的三个选项的组合可以衍生出很多选项,如下: 注意:comm需要的是按字典序排好序的文件,故使用前要先用sort给文件排序。DiffDiff语法如下: dif... 阅读全文
posted @ 2016-03-08 19:59 DChipNau 阅读(1980) 评论(0) 推荐(0)
摘要:INIT函数: 这是内核模块的初始化函数,其所作的工作只有注册定义好的USB驱动结构体。USB驱动结构体如下: Usb_driver中的probe函数是驱动和设备匹配成功后调用。 Usb_driver中的disconnect函数是驱动和设备断开连接后后调用。 Id_table中是驱动能够支持的设备列表,usb_device_id中记载的就是支持的设备。其中USB_interface_info是用... 阅读全文
posted @ 2016-03-08 19:55 DChipNau 阅读(1172) 评论(0) 推荐(0)
摘要:Linux USB架构 可以看出一个USB体系需要4个驱动:USB设备驱动(主要编写这部分),USB主控制器驱动,Gadget驱动,UDC驱动。 USB主要有4个功能: MassStorage:大容量存储,如硬盘,U盘。 USB-HID:人体接口设备,鼠标,键盘。 RNDIS:网卡。 CDC-ACM:u转串口。 USB描述符: USB驱动程序位于不同的内核子系统和USB主控制器之间,... 阅读全文
posted @ 2016-03-08 19:54 DChipNau 阅读(4257) 评论(0) 推荐(0)
摘要:USB简介:USB的几种版本:1. USB 1.0:速度 1.5Mb/s2. USB 1.1:速度 12Mb/s3. USB 2.0:速度 60MbB/s4. USB 3.0:速度 640MB/s USB的主要优点:1. 可以热插拔:不需要重复“关机将并口或串口电缆接上再开机”的动作。2. 携带方便。3. 标准统一,USB鼠标,USB硬盘,USB打印机都是用同样的标准与个人电脑连接。4. 可以连接... 阅读全文
posted @ 2016-03-08 19:51 DChipNau 阅读(5320) 评论(1) 推荐(0)
摘要:终端(tty): 在LINUX中,终端(TTY)是一类字符设备的统称,包含了三种类型:控制台,串口等物理串口和伪终端。 控制台: 供内核使用的终端为控制台,控制台在linux启动时,通过命令console=…制定,如果没有指定控制台,系统会把第一个注册的终端作为控制台。 控制台有如下的特点:1. 控制台是一个虚拟的终端,它必须映射到真正的终端上。比如映射到串口上。2. 控制台可以简答的理解为pr... 阅读全文
posted @ 2016-03-08 19:44 DChipNau 阅读(602) 评论(0) 推荐(0)
摘要:PCI总线概述:因为不实际操作了,所以就写一些方法论上的东西,纪念一下。PCI总线有三个非常显著的优点:1. 在计算机和外设传输数据时具有更好的性能。2. 能够尽量独立于具体的平台。3. 可以方便的实现即插即用。 PCI总线有两种非常常见的体系结构: 图一:从结构上看,PCI总线是一种不依附于某个具体处理器的局部总线,他是CPU和原来的系统总线之间插入的一级总线,具体由一个桥接电路实现对这一层的... 阅读全文
posted @ 2016-03-08 19:43 DChipNau 阅读(804) 评论(0) 推荐(0)
摘要:简介: LCD是基于液晶的。LCD(liquid crystal display)按驱动方式分类可以分为静态驱动,简单矩阵驱动,主动矩阵驱动。其中,简单矩阵又可以分为扭转向列型(TN)和超转向列型(STN),而主动矩阵驱动则以TFT(用的最多)为主。TN型液晶驱动:是LCD中最基本的,他只能将入射光旋转90度,视角只有30度。STN型驱动液晶:可以讲入射光旋转180度至270度,也改善了视角... 阅读全文
posted @ 2016-03-08 19:40 DChipNau 阅读(519) 评论(0) 推荐(0)
摘要:蜂鸣器驱动蜂鸣器分直流和交流两种,所谓的直流蜂鸣器是加个电压就可以响,交流蜂鸣器其实就相当于一个喇叭,直接加直流后不会出声或者声音很低,需要外加脉冲才能正常工作,这个脉冲可以是方波,也可以是一段音乐,这个信号属于交流信号。mini2440的蜂鸣器连接图如下: 貌似这是一个交流蜂鸣器,所以需要pwm驱动。 在此之前先介绍几个函数: S3C2410_GPB 如果gpioa的最低位引脚偏... 阅读全文
posted @ 2016-03-08 19:38 DChipNau 阅读(1370) 评论(0) 推荐(0)
摘要:sysfs文件系统:sysfs是2.6内核的一个特性,它允许内核代码经由一个in-memory的文件系统把信息出报(export)到用户进程中。在设备模型中,sysfs文件系统用来表示设备的结构.将设备的层次结构形象的反应到用户空间中.用户空间可以修改sysfs中的文件属性来修改设备的属性值,也可以读取其文件获得属性值。对于每个注册到系统的kobject,在sys中都有一个目录来展现它,这个目录(... 阅读全文
posted @ 2016-03-08 19:36 DChipNau 阅读(435) 评论(0) 推荐(0)
摘要:很简单的一个东西,但是感觉使用价值没有太大。实现了以下,结果如下: 执行到#error语句的时候直接停止编译,在下面输出设定好的错误信息。来自为知笔记(Wiz) 阅读全文
posted @ 2016-03-08 19:32 DChipNau 阅读(194) 评论(0) 推荐(0)
摘要:来自为知笔记(Wiz) 阅读全文
posted @ 2016-03-08 19:31 DChipNau 阅读(171) 评论(0) 推荐(0)
摘要:本文编辑整理自:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471一、前言“联合体”(union)与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。应该说... 阅读全文
posted @ 2016-03-08 19:27 DChipNau 阅读(3416) 评论(0) 推荐(0)
摘要:普通情况: 调用函数参数的传递,是采取入栈的方式,先上图一张: Fun是被调用的函数,而为了演示其参数传递的过程,特意多设了几个参数,其传递参数的汇编代码如下: 可以看出,汇编代码中将这9个参数的前5个入栈,后几个直接通过寄存器来传递,而进入函数中出栈代码如下: 可以看出先出栈之后R0,R1,R2,R3(这四个不经过出栈入栈,直接通过寄存器传递),r5,r6,r7,r8,r12装载参数。 在实... 阅读全文
posted @ 2016-03-08 19:26 DChipNau 阅读(557) 评论(0) 推荐(0)
摘要:C语言可以使用alloc从栈上动态分配内存。 内存碎片Malloc/free或者new/delete大量使用会造成内存碎片,这种碎片形成的机理如下:内存碎片一般是由于空闲的内存空间比要连续申请的空间小,导致这些小内存块不能被充分的利用,举个例子:如果有100个单位的连续空闲内存,那么先申请3单元的连续内存,再申请50单元的内存,这时释放一开始的3单元的内存。这时,如果你一直申请比三单元大的内存单元... 阅读全文
posted @ 2016-03-08 19:24 DChipNau 阅读(4757) 评论(0) 推荐(0)
摘要:gcc 编译的四大过程(预处理-编译-汇编-链接 ) 我们来编译一个hello world 程序。#include int main(int argc,const char* argv[]){ printf("hello world!\n"); return 0;} 1)预处理(Pre-processing)在该阶段,编译器将C源代码中的包含的头文件如stdio.h编译进来,用... 阅读全文
posted @ 2016-03-08 19:23 DChipNau 阅读(978) 评论(0) 推荐(0)
摘要:Posix和system v区别 所谓的IPC(进程间通信)指的是消息队列,共享内存,信号量3种机制合并起来,当然,这是个狭义的概念,只包含这三种。IPC又可以分为system v进程间通信和posix进程间通信。下图说明了各种概念之间的关系。 IPC机制的作用范围是在整个系统,而不是仅限于进程,也就是说,一旦IPC对象被创建,除非显示的删除或者系统重启,否则对象一直存在,其中数据也保持不变。而进... 阅读全文
posted @ 2016-03-08 19:22 DChipNau 阅读(284) 评论(0) 推荐(0)
摘要:经常在调用linux 系统api 的时候会出现一些错误,比方说使用open() write() creat()之类的函数有些时候会返回-1,也就是调用失败,这个时候往往需要知道失败的原因。这个时候使用errno这个全局变量就相当有用了。 在程序代码中包含 #include ,然后每次程序调用失败的时候,系统会自动用用错误代码填充errno这个全局变量,这样你只需要读errno这个全局变... 阅读全文
posted @ 2016-03-08 19:21 DChipNau 阅读(1711) 评论(0) 推荐(0)
摘要:C语言程序经过编译链接后形成二进制映像文件由栈,堆,数据段,代码段组成,其中数据段又分为:只读数据段,已经初始化读写数据段,未初始化数据段(BSS段)。如下图所示:1.栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量等值。其操作方式类似于数据结构中的栈。2.堆区(heap):一般由程序员释放,若程序员不释放,则可能会引起内存泄露。 注:1)堆和数据结构中的堆栈不一样,其类... 阅读全文
posted @ 2016-03-08 19:19 DChipNau 阅读(686) 评论(0) 推荐(0)
摘要:sudo apt-get install python-scipy sudo apt-get install python-numpy sudo apt-get install python-matplotlib python import scipy import numpy import pyl 阅读全文
posted @ 2016-03-08 15:10 DChipNau 阅读(415) 评论(0) 推荐(0)
摘要:matlab上的代码已经八八九九了,因为涉及到GUI和网络编程的东西,所以不得已开始学python并在python上做完整版。 下面是如何在linux和python下使用libsvm 在你的python代码前面加上如下代码,路径修改称自己的路径即可: import os, sys sys.path. 阅读全文
posted @ 2016-03-08 14:56 DChipNau 阅读(302) 评论(0) 推荐(0)