嵌入式开发
kevinyu723
这个作者很懒,什么都没留下…
展开
-
Register和volatile区别
原文:http://blog.csdn.net/edmond999/article/details/8924664register: 在函数内部定义变量时,默认是auto类型,即分配给变量内存。如果定义一个变量用register关键字,那么编译器尽可能把变量存放在CPU内部寄存器中,这样就不必通过内存寻址来访问变量,提高访问效率 volatile:转载 2015-01-27 21:31:42 · 901 阅读 · 0 评论 -
一个简单的时间片轮转多道程序内核操作系统工作流程
一.操作系统工作概述存储程序计算机工作模型,计算机系统最最基础性的逻辑结构;函数调用堆栈,高级语言得以运行的基础;中断,多道程序操作系统的基点。二.代码分析在上一篇博文《搭建OS kernel环境方法》的基础上进行时间片轮转多道程序的小os.主要对mypcb.h, mymain.c 和myinterrupt.c这三个文件原创 2015-03-15 17:03:55 · 937 阅读 · 0 评论 -
搭建OS kernel环境方法
It is a platform to write your own OS kernel,its based on Linux Kernel 3.9.4 source code.Set up this platformsudo apt-get install qemu # install QEMUsudo ln -s /usr/bin/qemu-system-i386 /usr转载 2015-03-14 11:20:50 · 1914 阅读 · 0 评论 -
VxWorks认识
VxWorks操作系统 VxWorks时实时多任务的嵌入式操作系统,它主要包括任务调度、I/O功能、文件系统、中断管理、内存管理、网络功能、内存管理、BSP(系统启动模块)等。它的多任务的实现是由中断驱动的,即在每个系统时钟中断中,实现任务的调度。VxWorks中的任务有优先级的概念。与其它嵌入式操作系统相比,它有如下优点:1. 任务之间的切换快,任务间通信手段多样;2.转载 2015-03-09 10:09:25 · 4699 阅读 · 0 评论 -
构造一个简单的Linux系统MenuOS,使用gdb调试内核
使用自己的Linux系统环境搭建MenuOS的过程# 下载内核源代码编译内核cd ~/LinuxKernel/wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.6.tar.xzxz -d linux-3.18.6.tar.xztar -xvf linux-3.18.6.tarcd转载 2015-03-17 23:01:41 · 713 阅读 · 0 评论 -
C语言嵌入汇编
概述:linux内核源码中,有很多C语言中嵌入了汇编语句,如何理解这些汇编语句,对理解内核有很重要的作用。 具有输入和输出参数的嵌入式汇编语句的基本格式为: asm("汇编语句" :输出寄存器 :输入寄存器转载 2015-03-12 21:10:48 · 1686 阅读 · 0 评论 -
使用core dump调试方法
core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIGSEGV信号,然后就会core dump)在程序运行的过程中,有的时候我们会遇到Segment fault(段错误)这样的错误。这种看起来比较困难,因为没有任何的栈、trace信息输出。该种类转载 2015-03-14 11:07:44 · 820 阅读 · 0 评论 -
反汇编代码分析
C代码:int g(int x){ return x + 3;} int f(int x){ return g(x);} int main(void){ return f(8) + 1;}对应的汇编:g:pushl%ebp ;12.esp-4,[esp的指向放入ebp]movl %esp, %ebp ;原创 2015-03-08 13:33:43 · 635 阅读 · 0 评论 -
C语言中 float double在内存中的存储
本文转载于:http://wenku.baidu.com/link?url=ARfMiXVHCwCZJcqfA1gfeVkMOj9RkLlR9fIexbgs9gDdV8rIS48A1_xe1y6YgXnSlpof5pKKJbjScy1StbVdiUWARuAYUIYiyHeTIIhVaz3 C语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,floa转载 2015-04-04 00:28:05 · 931 阅读 · 0 评论 -
float与double的范围和精度
float与double的范围和精度1. 范围 float和double的范围是由指数的位数来决定的。 float的指数位有8位,而double的指数位有11位,分布如下: float: 1bit(符号位) 8bits(指数位) 23bits(尾数位) double: 1bit(符号位) 11bits(指数位) 52bits(尾数位) 于是,flo转载 2015-04-04 13:35:25 · 506 阅读 · 0 评论 -
网络性能测试iperf
iperf 是一个 TCP/IP 和 UDP/IP 的性能测量工具,能够提供网络吞吐率信息,以及震动、丢包率、最大段和最大传输单元大小等统计信息;从而能够帮助我们测试网络性能,定位网络瓶颈。iperf是开源的,源代码可以从http://sourceforge.net/projects/iperf/下载。1. iperf能够做什么提起iperf,想必大家都知道它是用转载 2015-02-14 12:57:42 · 1015 阅读 · 0 评论 -
临界区,互斥量,信号量,事件的区别
四种进程或线程同步互斥的控制方法1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 3、信号量:为控制一个具有有限数量用户资源而设计。 4、事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。 临界区(Critical Section)保证在某一转载 2015-02-18 15:34:38 · 473 阅读 · 0 评论 -
对于Freescale MFG编程工具控制文件ucl.xml的分析
为了将映像文件烧进NANDFlash中,我必须要分析ucl.xml文件,并能自己照着画一个符合项目要求的。唉。分析的时候需要参考MFG的工具提供的Document:《Manufacturing Tool UCL usermanual.doc》找到这一条,开始分析了: 首先有一段注释意思是:该条目用于将Android编程到eMMC4.4存储设备上。如果使用默认设置转载 2015-01-27 21:57:23 · 670 阅读 · 0 评论 -
fopen、open和popen区别
open:直接操作物理设备,比如磁盘、设备文件 一般设备/设备文件都通过open来操作 fopen:则通过缓冲区来操作,读写都在缓冲区上 popen:会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令 依照popen参数中的type值建立管道连接到子进程的输入/输出设备中,通过返回的指针对子进程 的输入、输出设备进行操作。原创 2015-01-28 10:11:32 · 10947 阅读 · 0 评论 -
Linux延迟函数
从Linux应用层和内核两方面来区分下延迟函数:1. 应用层 1> sleep usleep 微秒级 头文件为;3> nanosleep 相比标准UNIX 的sleep 调用具有更高高精度的版本。和普通的sleep 调用计算整秒数不同,nanosleep 接受一个指向一个struct timespec 对象的指针作为参数,它可以表示毫微秒(nanoseco原创 2015-02-03 17:47:37 · 958 阅读 · 0 评论 -
嵌入式协议栈开发问题【malloc函数实现】
1. malloc函数实现1> 首先定义个全局的数组,并将数据进行分块,大块和小块,目的的解决碎片问题。2> 根据申请的空间大小不同,选取不同的数据块作为内存。3> 定义一个全局标量,用于记录那个块已用,哪个块为空闲。4> 针对申请的每块内存空间,都有独立的结构体记录重要参数:如空间大小,指向的空间指针等。暂时就想到这些,不知道哪位哪位有更好的想法,互相学习讨论。原创 2015-02-03 15:02:26 · 663 阅读 · 0 评论 -
嵌入式协议栈开发问题【软定时器实现】
嵌入式开发中,硬件定时器资源通常非常有限,而协议栈中需要的定时功能会比较多,下面简单介绍下自己的想法:背景:利用MCU的一个定时器,模拟出多个软件定时器。1> 全局结构体用于存储软件定时的参数,如当前时间,定时时间,触发时间,函数指针等;2> 软定时器设置入口函数,传入要定时的时间与回调函数;3> 软定时器设置入口函数中,对各个配置的触发时间进行优先级排序,最先触发的优先级原创 2015-02-03 15:23:37 · 695 阅读 · 0 评论 -
linux内核中memcpy和memmove函数的区别和实现
linux内核中memcpy和memmove函数的区别和实现Kernel version:2.6.32CPU architecture:ARMAuthor:ce123(http://blog.csdn.net/ce123)嵌入式开发交流群:280352802,欢迎您的加入!memcp转载 2015-02-04 21:55:20 · 798 阅读 · 0 评论 -
memcpy使用注意事项
memcpy函数原型为:void *memcpy(void *dest, const void *src, size_t n)memcpy用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。在c中,很多时候都要用到这个函数,这是一个高效的函数。在使用的时候有几点需要注意:1、如果复制的字节数n超出了dest的空间容量,或者n超出src的容量,这个函数是不会进行原创 2015-02-04 21:54:02 · 7523 阅读 · 0 评论 -
尽量使用strncpy,snprintf,少用strcpy,sprintf
strncpy,snprintf函数的好处是指定了要拷贝/存储的空间大小,而strcpy,sprintf并没有指定。后者导致的结果是,如果dest的空间不够大,会出现内存溢出的情况,覆盖原有内存的数据,这种情况在linux内核的开发情况更为明显。因此,多采用strncpy,snprintf函数。原创 2015-02-04 22:16:21 · 691 阅读 · 0 评论 -
32位和64位系统中数据类型区别
c语言中基本数据类型的长度:32位下:char :1个字节(不变)*(指针变量): 4个字节(32位机的寻址空间是4个字节。同理64位编译器)(变化)short int : 2个字节(不变)int: 4个字节(不变)unsigned int : 4个字节(不变)float: 4个字节(不变)double: 8个字节(不变)转载 2015-02-10 08:45:02 · 1770 阅读 · 0 评论 -
分析system_call中断处理过程
用gdb追踪系统mkdir执行系统调用的过程,并分析system_call的中断处理过程。首先应当将有关mkdir代码载入menu中,重新装载menu:之后打开test.c文件,在其中加入调用mkdir函数的定义。执行make rootfs,从而打开menu镜像,我们发现mkdir就装载进menu的命令中了:然后我们用gdb在sys_原创 2015-04-07 09:21:49 · 811 阅读 · 0 评论