blogernice

导航

统计

10 2018 档案

inline关键字
摘要:本文介绍了GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点: inline关键字在GCC参考文档中仅有对其使用在函数定义(Definition)上的描述,而没有提到其是否能用于函数声明(Declare)。 从 inline的作用来看,其放置于函数声明中应 阅读全文

posted @ 2018-10-30 17:57 blogernice 编辑

字符串处理函数
摘要:函数名: strcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #include <stdio.h> #include <string.h> int main(void) { char string[1 阅读全文

posted @ 2018-10-30 17:56 blogernice 编辑

string.h函数源码
摘要:strstr()函数源码 /* 得到s1中第一次包含s2字符串的位置指针。 */ #include <stdlib.h> char * my_strstr(const char *s1,const char *s2) { if (*s1 == 0) { if (*s2) return (char * 阅读全文

posted @ 2018-10-30 17:55 blogernice 编辑

ASCII码表
摘要:ASCII码表 ASCII码大致可以分作三部分組成。 第一部分是:ASCII非打印控制字符; 第二部分是:ASCII打印字符; 第三部分是:扩展ASCII打印字符。 第一部分:ASCII非打印控制字符表 ASCII表上的数字0–31分配给了控制字符,用于控制像打印机等一些外围设备。例如,12代表换页 阅读全文

posted @ 2018-10-30 17:55 blogernice 编辑

math.h()函数源码
摘要:hypot()函数源码 /* hypot函数对于给定的直角三角形的两个直角边, 求其斜边的长度。 */ //一般的常规算法: double my_hypot01(double x, double y) { double hypotenuse; x = fabs(x); y = fabs(y); if 阅读全文

posted @ 2018-10-30 17:54 blogernice 编辑

极品的C语言错误
摘要:今天在测试硬件通信模块时候发现一个奇怪的问题,发送数据和接收数据进行比较复制时候频繁数据错误。 测试流程如下:发送一个字节和接收一个字节,进行比较,当返回数据和发送数据不相等的时候,错误计数器累加。 数据收发抽象如下: uint16 i = 0; uint16 j = 0; uint32 error 阅读全文

posted @ 2018-10-30 17:53 blogernice 编辑

ctype.h函数源码
摘要:iscsym()函数源码 int my_iscsym(int c) { return (isalnum(c) || ( c == '_' )); }//判断字符c是否为英文字母、数字和下划线 int main() { char ch = 'a'; if(my_iscsym(ch)) printf(" 阅读全文

posted @ 2018-10-30 17:53 blogernice 编辑

GCC编译-Werror
摘要:编译: 第一步、是进行预编译,使用-E参数可以让GCC在预处理结束后停止编译过程: gcc -E hello.c -o hello.i 预处理的宏定义插入到hello.i中 第二步、是将hello.i编译为目标代码,这可以通过使用-c参数来完成: gcc -c hello.i -o hello.o 阅读全文

posted @ 2018-10-30 17:52 blogernice 编辑

TODO FIXME的含义
摘要:TODO: + 说明:如果代码中有该标识,说明在标识处有功能代码待编写,待实现的功能在说明中会简略说明。FIXME: + 说明:如果代码中有该标识,说明标识处代码需要修正,甚至代码是错误的,不能工作,需要修复,如何修正会在说明中简略说明。XXX: + 说明:如果代码中有该标识,说明标识处代码虽然实现 阅读全文

posted @ 2018-10-30 17:52 blogernice 编辑

函数返回值—返回局部变量
摘要:看看下面的程序的输出: #include <stdio.h> char *returnStr() { char *p="hello world!"; return p; } int main() { char *str; str=returnStr(); printf("%s\n", str); r 阅读全文

posted @ 2018-10-30 17:51 blogernice 编辑

__DATE__,__FILE__,__LINE__,__TIME__,__FUNCTION__
摘要:C99 ( ISO/IEC 9899:1999 ) 网上有pdf文件。 C标准中指定了一些预定义的宏,对于编程经常会用到。下面这个表中就是一些常常用到的预定义宏。 __DATE__ 进行预处理的日期(“Mmm dd yyyy”形式的字符串文字) __FILE__ 代表当前源代码文件名的字符串文字 _ 阅读全文

posted @ 2018-10-30 17:50 blogernice 编辑

GNU C的__attribute__机制
摘要:GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__书写特征是:__att 阅读全文

posted @ 2018-10-30 17:49 blogernice 编辑

printf中#号的意思
摘要:#进行宏字符串连接,在宏中 把参数解释为字符串,不可以在语句中直接使用。 在宏定义中 printf("%s;/n", #S) 会被解释为 printf("%s;/n", "S") 例如下面的代码 code start #define TRACE(S) (printf("%s;/n", #S), S) 阅读全文

posted @ 2018-10-30 17:49 blogernice 编辑

printf的实现原理
摘要:printf的声明 int _cdeclprintf(const char* format, …); _cdecl是C和C++程序的缺省调用方式_CDEDL调用约定: 1.参数从右到左依次入栈 2.调用者负责清理堆栈 3.参数的数量类型不会导致编译阶段的错误对于x86而言,栈向下生长,函数参数从右向 阅读全文

posted @ 2018-10-30 17:48 blogernice 编辑

内存溢出、内存泄露、内存越界、缓冲区溢出、栈溢出
摘要:内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足 需求,于是产生溢出。 内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。一个盘子用尽各 阅读全文

posted @ 2018-10-30 17:47 blogernice 编辑

C语言的弱符号与强符号
摘要:c语言的强符号和弱符号是c初学者经常容易犯错的地方。而且很多时候,特别是多人配合开发的程序,它引起的问题往往非常行为怪异而且难以定位。 什么是强符号和弱符号? 在c语言中,函数和初始化的全局变量是强符号,未初始化的全局变量时弱符号。强符号和弱符号的定义是连接器用来处理多重定义符号的,它的规则是: 不 阅读全文

posted @ 2018-10-30 17:47 blogernice 编辑

大小端存储问题
摘要:所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 所谓的小端模式,是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中,这 阅读全文

posted @ 2018-10-30 17:46 blogernice 编辑

gcc编译选项
摘要:gcc提供了大量的警告选项,对代码中可能存在的问题提出警 告,通常可以使用-Wall来开启以下警告: -Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts -Wimplicit-int -Wimplicit 阅读全文

posted @ 2018-10-30 17:45 blogernice 编辑

利用backtrace和backtrace_symbols打印函数的调用关系
摘要:源程序如下 #include <stdio.h>#include <string.h>#include <stdint.h>typedef uint32_t UINT32;void fun3(void){ void* array[10] = {0}; UINT32 size = 0; char ** 阅读全文

posted @ 2018-10-30 17:45 blogernice 编辑

字符数组赋值
摘要:main() { char s[30]; strcpy(s, "Good News!"); /*给数组赋字符串*/ . . . } 上面程序在编译时, 遇到char s[30]这条语句时, 编译程序会在内存的某处留 出连续30个字节的区域, 并将第一个字节的地址赋给s。当遇到strcpy( strc 阅读全文

posted @ 2018-10-30 17:44 blogernice 编辑

C语言结构体的字节对齐原则
摘要:为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平 阅读全文

posted @ 2018-10-30 17:43 blogernice 编辑

文件读写
摘要:从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。 ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。ASCII码文件可在屏幕上按字符显示。 二进制文件是按二进制的编码方式来存放文件的。二进制文件虽然也可在屏幕上显示,但其内容无法 阅读全文

posted @ 2018-10-30 17:43 blogernice 编辑

sscanf高级用法级正则表达式
摘要:sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: Int sscanf( string str, string fmt, mixed var1, mixed var2 ... ); int scanf( const char *format [,argument]... ) 阅读全文

posted @ 2018-10-30 17:41 blogernice 编辑

C语言编译过程详解
摘要:前言 C语言程序从源代码到二进制行程序都经历了那些过程?本文以Linux下C语言的编译过程为例,讲解C语言程序的编译过程。 编写hello world C程序: // hello.c #include <stdio.h> int main(){ printf("hello world!\n"); } 阅读全文

posted @ 2018-10-30 17:40 blogernice 编辑

C语言使用正则表达式
摘要:据说一个好的程序员是会使用DB和Regular Expression的程序员,可见两者是多么重要。正则表达式是能极大地提高工作效率的工具,使用过Linux下各种具备RE特性的工具的人一定对此深有感触。很多语言都支持RE,用的最多的当然是脚本,其中以perl最盛。不过,用C语言来用RE不是很多见,但是 阅读全文

posted @ 2018-10-30 17:40 blogernice 编辑

scanf 用法及陷阱(转)
摘要:函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。 其调用格式为: 阅读全文

posted @ 2018-10-30 17:38 blogernice 编辑

c语言结构体可以直接赋值
摘要:结构体直接赋值的实现 下面是一个实例: #include <stdio.h> 我在Ubuntu 13.04下使用gcc 4.7.3 编译运行得到的结果,如下所示: 可以从结果上看出,结构体直接赋值在C语言下是可行的,我们看看struct_assign()函数的汇编实现,从而从底层看看C语言是如何实现 阅读全文

posted @ 2018-10-30 17:38 blogernice 编辑

为什么有些语言可以被反编译?而有的不能?
摘要:回答一下一个比较specific的问题:为什么C不容易反编译。 首先,明确定义一下问题。反编译的input是可执行程序,在这个帖子里我会叫它binary。output是C代码。 binary是电脑执行的一行行指令。所以我们会想,先把binary还原成指令。这个过程叫做disassembling,还原 阅读全文

posted @ 2018-10-30 17:38 blogernice 编辑

va_start、va_end、va_list的使用
摘要:1:当无法列出传递函数的所有实参的类型和数目时,可用省略号指定参数表void foo(...);void foo(parm_list,...); 2:函数参数的传递原理函数参数是以数据结构:栈的形式存取,从右至左入栈.eg:#include <iostream>void fun(int a, ... 阅读全文

posted @ 2018-10-30 17:37 blogernice 编辑

C语言中volatile关键字的作用
摘要:一.前言 1.编译器优化介绍: 由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软 阅读全文

posted @ 2018-10-30 17:36 blogernice 编辑

C内存对齐
摘要:当你看到这个标题,仍想往下读的时候说明你已经开始关注数据在内存存储问题了。 好吧,下面先想一个问题: struct stu{char sex;int length;char name[10];};sizeof (struct stu) = ??? 如果你的答案是:15 。那你该仔细看看下面的分析了! 阅读全文

posted @ 2018-10-30 17:34 blogernice 编辑

C++虚函数和纯虚函数的区别
摘要:1.虚函数和纯虚函数可以定义在同一个类中,含有纯虚函数的类被称为抽象类,而只含有虚函数的类不能被称为抽象类。 2.虚函数可以被直接使用,也可以被子类重载以后,以多态的形式调用,而纯虚函数必须在子类中实现该函数才可以使用,因为纯虚函数在基类有声明而没有定义。 3.虚函数和纯虚函数都可以在子类中被重载, 阅读全文

posted @ 2018-10-30 17:34 blogernice 编辑

说说尾递归
摘要:微博上看到有人在讨论尾递归,想起以前曾看过@老赵写的一篇相关的博客,介绍的比较详细了,相信很多人都看过,我也在下面留了言,但挑了个刺,表示文章在关键点上一带而过了,老赵自然是懂的,但看的人如果不深入思考,未必真正的明白。 下面我说说我的理解。 什么是尾递归 什么是尾递归呢?(tail recursi 阅读全文

posted @ 2018-10-30 17:33 blogernice 编辑

【转】getopt分析命令行参数
摘要:(一) 在Linux中,用命令行执行可执行文件时可能会涉及到给其加入不同的参数的问题,例如: ./a.out -a1234 -b432 -c -d 程序会根据读取的参数执行相应的操作,在C语言中,这个功能一般是靠getopt()这个函数,结合switch语句来完成的,首先来看下面的代码: #incl 阅读全文

posted @ 2018-10-30 17:31 blogernice 编辑

proc文件系统
摘要:Linux 系统上的/proc目录是一种文件系统,即proc文件系统。/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文 件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。 proc文件系统其中有些 阅读全文

posted @ 2018-10-30 16:49 blogernice 编辑

嵌入式Linux开发层次
摘要:大量可用的引导装载程序(bootloader)、规模缩小的分发版(distribution)、文件系统和 GUI 看起来可能太多了,但是这些丰富的选项实际上是一种恩赐,允许您调整开发或用户环境以完全符合您的需要。 许多 Linux 改良品种迎合了嵌入式/实时市场。它们包括 RTLinux(实时 Li 阅读全文

posted @ 2018-10-30 16:48 blogernice 编辑

嵌入式linux开发流程
摘要:Minicom:Linux下的终端程序,用于通过串口进行通信,在嵌入式Linux系统中,可以用于主机与目标系统通信,实现串口控制台的功能。 DHCP: 动态主机配置协议。运行实现该协议的服务的主机,通过对客户发起的DHCP请求进行应答,可以动态的配置客户机的IP地址等网络信息。 TFTP: 一种FT 阅读全文

posted @ 2018-10-30 16:47 blogernice 编辑

linux系统调用流程
摘要:由于系统调用都是从调用中断开始的,所以我们还是从中断讲起. 关于中断: Intel386认识两种事件类:异常(exception)与中断(interrupt)。两者都会强制性创建一个进程或任务。中断能在任何不可预料的时间发生,来响应硬件的信号,是硬中断;而异常是由指令执行而产生的,是软中断。 386 阅读全文

posted @ 2018-10-30 16:46 blogernice 编辑

mutex详解
摘要:理发师问题: 理发店理有一位理发师、一把理发椅和n把供等候理发的顾客坐的椅子 如果没有顾客,理发师便在理发椅上睡觉 一个顾客到来时,它必须叫醒理发师 如果理发师正在理发时又有顾客来到,则如果有空椅子可坐,就坐下来等待,否则就离开。 解法: 引入3个信号量和一个控制变量: 1)控制变量waiting用 阅读全文

posted @ 2018-10-30 16:46 blogernice 编辑

select()函数分析
摘要:Part 1:Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发 阅读全文

posted @ 2018-10-30 16:45 blogernice 编辑

Linux 硬件管理
摘要:一、 在Linux 系统中,对硬件判别的标识的依据 在LinuxSir.Org讨论区,我们经常看到有些弟兄这样来描述自己的硬件“我的显示卡是XXX牌子的,Linux不支持怎么办?”。其实这样描述是 最差的,大家也根本没有办法提供帮助;因为Linux对硬件的识别是以为芯片组的厂商为依据的,而非硬件的品 阅读全文

posted @ 2018-10-30 16:44 blogernice 编辑

I/O Port
摘要:I/O端口 CPU与外部设备、存储器的连接和数据交换都需要通过接口设备来实现,前者被称为I/O接口,而后者则被称为存储器接口。存储器通常在CPU的同步控制下工作,接口电路比较简单;而I/O设备品种繁多,其相应的接口电路也各不相同,因此,习惯上说到接口只是指I/O接口。 接口的控制方式 CPU通过接口 阅读全文

posted @ 2018-10-30 16:43 blogernice 编辑

I/O端口资源的管理
摘要:几 乎每一种外设都是通过读写设备上的寄存器来进行的。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设 的寄存器通常被连续地编址。CPU对外设IO端口物理地址的编址方式有两种:一种是I/O映射方式(I/O-mapped),另一种是内存映射方式 (Memo 阅读全文

posted @ 2018-10-30 16:43 blogernice 编辑

I/O空间映射
摘要:I/O空间 I/O端口和I/O内存 首先上图,如下:外设中的寄存器被称为I/O端口,外设中的内存被称为I/O内存。二者合起来统称为I/O空间。 设备驱动程序要直接访问外设或其接口卡上的物理电路,这部分通常都是以寄存器的形式出现。外设寄存器称为I/O端口,通常包括:控制寄存器、状态寄存器和数据寄存器三 阅读全文

posted @ 2018-10-30 16:42 blogernice 编辑

硬链接和符号链接区别
摘要:首先要弄清楚,在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问。 链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。Linux中包 阅读全文

posted @ 2018-10-30 16:41 blogernice 编辑

中断的上半部和下半部
摘要:一、什么是下半部 中断是一个很霸道的东西,处理器一旦接收到中断,就会打断正在执行的代码,调用中断处理函数。如果在中断处理函数中没有禁止中断,该中断处理函数执行过程中仍有可能被其他中断打断。出于这样的原因,大家都希望中断处理函数执行得越快越好。 另外,中断上下文中不能阻塞,这也限制了中断上下文中能干的 阅读全文

posted @ 2018-10-30 16:40 blogernice 编辑

FIFO介绍
摘要:1.什么是FIFO?FIFO 是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据, 其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或 阅读全文

posted @ 2018-10-30 16:39 blogernice 编辑

udev 详解
摘要:如果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Linux改变了几次策略。在Linux早期,设备文件仅仅是是一些带有适当 的属性 集的普通文件,它由mknod命令创建,文件存放在/dev目录下。后来,采用了devfs,一个基于内核的动态设备文件系统,他首次出现在2.3.46 内核中 阅读全文

posted @ 2018-10-30 16:38 blogernice 编辑

跟我一起写udev rules
摘要:介绍关于本文档udev面向2.6以上的linux内核在用户空间提供动态的/dev下固定设备命名方案. 之前的/dev实现: devfs现在已被废弃,udev成为继任者. udev vsdevfs是一个敏感的谈话内容,在进行比较之前你应该读一下这个文档(http://kernel.org/pub/li 阅读全文

posted @ 2018-10-30 16:37 blogernice 编辑

Linux定时器
摘要:定 时器属于基本的基础组件,不管是用户空间的程序开发,还是内核空间的程序开发,很多时候都需要有定时器作为基础组件的支持,但使用场景的不同,对定时器 的实现考虑也不尽相同,本文讨论了在 Linux 环境下,应用层和内核层的定时器的各种实现方法,并分析了各种实现方法的利弊以及适宜的使用环境。 首先,给出 阅读全文

posted @ 2018-10-30 16:35 blogernice 编辑

全程watchdog喂狗
摘要:关键字:Linux 看门狗 IMP706 引 言 在嵌入式系统中,为了使系统在异常情况下能自动恢复,一般都会引入看门狗电路。看门狗电路其实就是一个计数器。当看门狗启动后,计数器开始自动计数,经过一定时间计数器溢出就会对CPU产生一个复位信号使系统重启。系统正常运行时,需要在看门狗允许的时间间隔内对看 阅读全文

posted @ 2018-10-30 16:35 blogernice 编辑

/etc/profile、~/.bash_profile执行过程
摘要:在登录Linux时要执行文件的过程如下: 在 刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个,执行的顺序为:~/.bash_profile、 ~/.bash_l 阅读全文

posted @ 2018-10-30 16:32 blogernice 编辑

深入理解ioctl
摘要:一、 什么是ioctlioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个数如下:int ioctl(int fd, ind cmd, …);其中fd就是用户程序打开设备时使用open函数 阅读全文

posted @ 2018-10-30 16:31 blogernice 编辑

信号量与自旋锁
摘要:信号量与自旋锁 内核同步措施 为了避免并发,防止竞争。内核提供了一组同步方法来提供对共享数据的保护。 我们的重点不是介绍这些方法的详细用法,而是强调为什么使用这些方法和它们之间的差别。 Linux 使用的同步机制可以说从2.0到2.6以来不断发展完善。从最初的原子操作,到后来的信号量,从大内核锁到今 阅读全文

posted @ 2018-10-30 16:31 blogernice 编辑

《Linux内核修炼之道》之linux驱动开发
摘要:这本《 Linux 内核修炼之道》已经开卖(网上的链接为: 卓越 、 当当 、 china-pub ) ,虽然是严肃文学,但为了保证流畅性,大部分文字我还都是斟词灼句,反复的念几遍才写上去的,尽量考虑到写上去的 每 段话能够让读者产生什么疑惑,然后也都会紧接着尽量的去进行解释清楚,中间的很多概念也有 阅读全文

posted @ 2018-10-30 16:30 blogernice 编辑

linux下的文件结构--各文件夹的作用
摘要:linux下的文件结构,看看每个文件夹都是干吗用的 /bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示 /lib 标准程序设计 阅读全文

posted @ 2018-10-30 16:28 blogernice 编辑

Linux文件编程之虚拟文件系统(VFS)
摘要:当用户层程序员在编写文件函数时,常常会用到open(),read()和write()这类系统调用,而且用的也很爽,因为我们只需要知道这些函数如何调用就OK了,而不用深究具体文件系统和实际物理介质是如何实现的。而我们内核编程人员就要了解这些底层实现,给上层人员提供更多的方便。因此我们的任务就更复杂,佛 阅读全文

posted @ 2018-10-30 16:27 blogernice 编辑

Linux系统调用的实现机制分析
摘要:1 系统调用意义 Linux内核中设置了一组用于实现系统功能的子程序,称为系统调用。系统调用和普通库函数调用非常相似,只是系统调用由操作系统核心提供,运行于核心态,而普通的函数调用由函数库或用户自己提供,运行于用户态。 一般的,进程是不能访问内核的。它不能访问内核所占内存空间也不能调用内核函数。CP 阅读全文

posted @ 2018-10-30 12:00 blogernice 编辑

Linux系统结构 详解
摘要:Linux系统一般有4个主要部分: 内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。部分层次结构如图1-1所示。 1. linux内核 内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设 阅读全文

posted @ 2018-10-30 11:59 blogernice 编辑

进程线程通信
摘要:每个进程有自己的地址空间。两个进程中的地址即使值相同,实际指向的位置也不同。进程间通信一般通过操作系统的公共区进行。 同一进程中的线程因属同一地址空间,可直接通信。不仅是系统内部独立运行的实体,而且是独立竞争资源的实体。线程也被称为轻权进程,同一进程的线程共享全局变量和内存,使得线程之间共享数据很容 阅读全文

posted @ 2018-10-30 11:58 blogernice 编辑

fork与vfork的区别
摘要:1.vfork保证子进程先运行,在它调用exec或exit之后父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。 2.fork要拷贝父进程的进程环境;而vfork则不需要完全拷贝父进程的进程环境,在子进程没有调用exec和exit之前,子进程与父进程共享进 阅读全文

posted @ 2018-10-30 11:57 blogernice 编辑

memory 编程接口
摘要:在Linux系统中,一般有32位(4GB)的地址空间,进程的4GB内存空间被分为两个部分 — 用户空间与内核空间,用户空间地址一般分布为0 ~ 3GB(即PAGE_OFFSET,一般等于0xc0000000),剩下的3 ~ 4GB则为内核空间。进程与内核不各自使用4GB的空间,好处就是进程进入内核不 阅读全文

posted @ 2018-10-30 11:54 blogernice 编辑

ids & hdmi 原理
摘要:一、IDS 学习笔记 1、Overlay Controller 图像数据格式和4窗口融合由叠加控制器处理。叠加控制器可以根据窗口的中断生成一个窗口时隙,用户可以根据时隙中断更新帧缓冲的数据,比如:播放视频的时候。通常,视频的解码速度为 30 fps,LCD 的刷新率为 60-70 Hz,叠加控制器采 阅读全文

posted @ 2018-10-30 11:53 blogernice 编辑

memory 子系统
摘要:内核对一致和非一致内存访问使用相同的数据结构。首先,内存划分为结点:每个结点关联到系统中的一个处理器,在内核中用pg_data_t 表示。各个结点又划分为内存域,一个结点最多由3个内存域组成,用3个常量来表示:ZONE_DMA、ZONE_NORMAL、ZONE_HIGHMEM,此外内核还定义了一个伪 阅读全文

posted @ 2018-10-30 11:50 blogernice 编辑

ic 电源管理单元
摘要:芯片里面的电源管理电源主要功能描述如下: * 复位 * 锁相环和分频器 * HWCFG[2:0] 引脚信号识别和解码 * 睡眠模式 * 模块电源管理 * 顶层控制寄存器 一、复位 复位的信号源有以下几种: 1、PIN_RESETN(低有效):PIN_RESETN 将会把整个芯片都恢复到默认状态 2、 阅读全文

posted @ 2018-10-30 11:49 blogernice 编辑

h.264 基本知识
摘要:H.264是新一代的编码标准,理论依据:参照一段时间内图像的统计结果表明,在相邻几幅图像画面中,一般有差别的像素只有10%以内的点,亮度差值变化不超过2%,而色度差值的变化只有1%以内。所以对于一段变化不大图像画面,我们可以先编码出一个完整的图像帧A,随后的B帧就不编码全部图像,只写入与A帧的差别, 阅读全文

posted @ 2018-10-30 11:49 blogernice 编辑

notifier chain — 内核通知链
摘要:大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣。为了满足这个需求,也即是让某个子系统在发生某个事件时通知其它的子系统,Linux内核提供了通知链的机制。通知链表只能够在内核的子系统之间使用,而不能够在内核与用户空间之间进行事件的通知。通知链表是一个函数链表,链表上的每 阅读全文

posted @ 2018-10-30 11:48 blogernice 编辑

xilinx zynq-7000 基本知识
摘要:Zynq-7000 采用可扩展式处理平台架构(Extensible Processing Platform、EPP),是 Xilinx 用 28nm HKMG工艺制成的低功耗,高性能,高扩展性的新型芯片,这款新品里面集成了ARM CORTEX-A9 MPSOC 硬核以及相应的SOC系统。 PS: 处 阅读全文

posted @ 2018-10-30 11:47 blogernice 编辑

Linux 设备驱动模型
摘要:Linux系统将设备和驱动归一到设备驱动模型中了来管理 设备驱动程序功能: 1,对硬件设备初始化和释放 2,对设备进行管理,包括实参设置,以及提供对设备的统一操作接口 3,读取应用程序传递给设备文件的数据或回送应用程序请求的数据 4,检测或处理设备出现的错误 设备驱动模型提供了硬件的抽象包括: 1, 阅读全文

posted @ 2018-10-30 11:46 blogernice 编辑

JTAG各类接口针脚定义及含义
摘要:JTAG有10pin的、14pin的和20pin的,尽管引脚数和引脚的排列顺序不同,但是其中有一些引脚是一样的,各个引脚的定义如下。 一、引脚定义 Test Clock Input (TCK) 强制要求1 TCK在IEEE1149.1标准里是强制要求的。TCK为TAP的操作提供了一个独立的、基本的时 阅读全文

posted @ 2018-10-30 11:45 blogernice 编辑

CPU体系架构-RISC和CISC
摘要:《CPU体系架构-ARM/MIPS/X86》第一部分,从程序员的角度(也就主要是指令集体系架构ISA),对ARM、MIPS、X86的处理器架构做一个行向的比较,尽量把一些基本概念夯实,常用知识点捋顺。 本节是CISC和RISC的基本区别,先从整体上把握X86(CISC)和ARM、MIPS(RISC) 阅读全文

posted @ 2018-10-30 11:44 blogernice 编辑

CPU体系架构--MMU
摘要:在现在的工作项目中虽然没有使用到MMU功能,但MMU是较复杂的嵌入式操作系统运行的基础。例如Linux就不能够运行在没有MMU的ARM7处理器上,ucLinux就是为了适应没有MMU的处理器而对Linux进行的裁剪和修改。了解MMU基础知识,对理解编译链接,OS多进程,嵌入式系统架构等有很好的帮助。 阅读全文

posted @ 2018-10-30 11:44 blogernice 编辑

CPU体系架构-寄存器
摘要:CPU通用寄存器作为CPU体系架构的一部分,不可或缺。通用寄存器是CPU的算术逻辑运算操作最直接,频繁的位置。对于RISC体系的CPU,算术逻辑运算甚至只能够操作CPU通用寄存器中的数据。我们的目的不在于详尽的说明每一种CPU体系的寄存器情况,而在于将常用而且在不同CPU体系下容易混淆的寄存器做一个 阅读全文

posted @ 2018-10-30 11:43 blogernice 编辑

CPU体系架构-寻址方式
摘要:在这里,主要是要说明什么是寻址方式。以及每一种CPU为什么使用这样的寻址方式。在说明什么是寻址方式之前,首先需要了解指令的构成,或者说指令的编码格式。 指令编码格式 一条指令(指的是机器码)由操作码(opcode)和操作数(operand)构成。操作数可以是1个,也可以是多个,甚至可以没有。操作码则 阅读全文

posted @ 2018-10-30 11:42 blogernice 编辑

MIPS的存储管理模型
摘要:MIPS32中的存储器模型被划分为四个大块,如下表所示: 下面在给出一个存储器管理模型图,又叫做虚拟内存映射图,该图和上面的表是一一对应关系。如下图所示: 这样的存储器管理模型和X86差距比较大,X86有实模式和保护模式之分,CPU刚启动时运行在实模式之下,直到设定了保护模式之后才能运行在保护模式下 阅读全文

posted @ 2018-10-30 11:41 blogernice 编辑

CPU体系架构--DMA
摘要:DMA本来不属于CPU体系架构部分的内容,只因为在开发中经常要用到其相关的知识,所以这里就其基本概念、工作原理、常见问题做一个总结。 DMA概述 DMA的英文拼写是“Direct Memory Access”,汉语的意思就是直接内存访问。DMA既可以指内存和外设直接存取数据这种内存访问的计算机技术, 阅读全文

posted @ 2018-10-29 09:40 blogernice 编辑

CPU体系架构--Cache
摘要:Cache研究是转正答辩“MIPS BSP研究”中重要的一部分。只可惜当时时间紧,没有能够总结成文档。时隔将近一年,这次编写《CPU体系架构系列》,对于这一部分内容既是总结整理,又是温故知新。 概述 Cache是用来对内存数据的缓存。CPU要访问的数据在Cache中有缓存,称为“命中” (Hit), 阅读全文

posted @ 2018-10-29 09:40 blogernice 编辑

mmap详解
摘要:内存映射,简而言之就是将内核空间的一段内存区域映射到用户空间。映射成功后,用户对这段内存区域的修改可以直接反映到内核空间,相反,内核空间对这段区域的修改也直接反映用户空间。那么对于内核空间与用户空间两者之间需要大量数据传输等操作的话效率是非常高的。当然,也可以将内核空间的一段内存区域同时映射到多个进 阅读全文

posted @ 2018-10-29 09:39 blogernice 编辑

虚拟内存,MMU/TLB,PAGE,Cache之间关系
摘要:虚拟地址VA到物理地址PA以页page为单位。通常page的大小为4K。物理页面成为page frame。查看应用程序进程的地址空间,可以看到分为很多段,比如代码段(只读)、数据段(读写)、堆、共享库(其中进一步分段)、栈空间等。整个应用程序的地址空间不会用满4GB,因为还有一部分是内核空间,应用程 阅读全文

posted @ 2018-10-29 09:38 blogernice 编辑

Memory management unit
摘要:A memory management unit (MMU), sometimes called paged memory management unit (PMMU), is a computer hardware unit having all memory references passed 阅读全文

posted @ 2018-10-29 09:37 blogernice 编辑

Memory management
摘要:"Memory allocation" redirects here. For memory allocation in the brain, see Neuronal memory allocation. This article is about memory management at the 阅读全文

posted @ 2018-10-29 09:36 blogernice 编辑

MIPS,PowerPC和ARM访问I/O方式的比较
摘要:1.概述 简单比较了一下MIPS,PowerPC和ARM(这里只考虑32位版本的,MIPS64和PowerPC64不在此范围内)访问I/O的方式。首先这三种体系结构都使用存储器映射的I/O,都是32位物理地址空间(排除一些特殊的处理器,比如PowerPC E500 v2支持36位物理地址)。下面分别 阅读全文

posted @ 2018-10-29 09:35 blogernice 编辑

内存的三种地址,及其转换
摘要:三种内存地址:逻辑地址,线性地址,和物理地址 逻辑地址: 包含在机器语言指令中用来指定一个操作数或一条指令的地址。这种寻址方式在80X86著名的分段结构中表现得尤为具体,它促使MS-DOS或Windows程序员把程序分成若干段。每一个逻辑地址都是有一个段和偏移量组成,偏移量指明了从段开始的地方到时间 阅读全文

posted @ 2018-10-29 09:34 blogernice 编辑

优先级反转问题
摘要:目前,市场上占有率比较高的商业RTOS有VxWorks/PSOS、QNX、 LynxOS、VRTX,、Windows CE等。这些为数众多的RTOS绝大多数都是多任务实时微内核的结构,采用的是基于优先级的可抢占式调度策略。系统为每一个任务分配一个优先权,调度程序保证当前运行的进程是优先权最高的进程。 阅读全文

posted @ 2018-10-29 09:32 blogernice 编辑

ARM的中断处理过程
摘要:1. 首先就是知道 ARM 状态下的通用寄存器和程序计数器,绿颜色的就是相应模式下的私有寄存器。 就是说程序一般运行在系统和用户模式下,使用的是系统和用户模式下的通用寄存器,当有异常发生时,比如 FIQ ,那么系统将切换到 FIQ 模式下,相应的就会采用 FIQ 模式下的寄存器,其中绿颜色的就是只在 阅读全文

posted @ 2018-10-29 09:31 blogernice 编辑

dos常用命令
摘要:dir 列文件名 deltree 删除目录树 cls 清屏 cd 改变当前目录copy 拷贝文件 diskcopy 复制磁盘 del 删除文件 format 格式化磁盘edit 文本编辑 mem 查看内存状况 md 建立子目录 move 移动文件、改目录名more 分屏显示 type 显示文件内容 阅读全文

posted @ 2018-10-26 16:31 blogernice 编辑

bc计算器简介
摘要:bc是linux shell 命令下的很实用的计算器,加减乘除、进制转换, 还支持变量,条件比较操作符,逻辑操作符,判断语句和循环语句。因为bc本身是一个命令解释器,要退出它只要直接输入quit回车或者按Ctrl+D终止。a=1while(a++<100)sum+=asum50491.设定小数精度, 阅读全文

posted @ 2018-10-26 16:30 blogernice 编辑

eclipse快捷键
摘要:Eclipse中10个最有用的快捷键组合 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合。通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升。 1. ctrl+shift+r:打开资源 这可能是所有快捷键组合中最省时间的了。这组快捷键可以让你打开你的 阅读全文

posted @ 2018-10-26 16:29 blogernice 编辑

DOS的历史
摘要:2011年7月28日 昨日(7月27日),微软公司的DOS操作系统迎来了30岁生日。 DOS是历史上一个划时代的产品,标识着PC(个人电脑)的崛起和普及,对计算机行业影响深远。 只有了解DOS的历史,才能理解今天的计算机工业从何而来。下面就是我对这一段历史的介绍。 DOS的历史 作者:阮一峰 1. 阅读全文

posted @ 2018-10-26 16:27 blogernice 编辑

20年,中国互联网究竟发生了什么?
摘要:写这篇文章的缘起,是最近的一些观察和思考,借由这些观察和思考,我发现,这20年来,互联网这个行业虽然千变万化风起云涌,但其背后的一些大众心理、诉求和规律,却是不变以及可以捕捉到的。这很有趣。 并且,当你回过头去把这20年来主流的互联网产品的演变历史梳理完一遍之后,你可能也能够对未来3-5年的互联网将 阅读全文

posted @ 2018-10-26 16:24 blogernice 编辑

编程的智慧
摘要:编程的智慧 编程是一种创造性的工作,是一门艺术。精通任何一门艺术,都需要很多的练习和领悟,所以这里提出的“智慧”,并不是号称一天瘦十斤的减肥 药,它并不能代替你自己的勤奋。然而由于软件行业喜欢标新立异,喜欢把简单的事情搞复杂,我希望这些文字能给迷惑中的人们指出一些正确的方向,让他们少走 一些弯路,基 阅读全文

posted @ 2018-10-26 16:22 blogernice 编辑

程序语言的常见设计错误
摘要:程序语言的常见设计错误(1) - 片面追求短小 我经常以自己写“非常短小”的代码为豪。有一些人听了之后很赞赏,然后说他也很喜欢写短小的代码,接着就开始说 C 语言其实有很多巧妙的设计,可以让代码变得非常短小。然后我才发现,这些人所谓的“短小”跟我所说的“短小”完全不是一回事。 我的程序的“短小”是建 阅读全文

posted @ 2018-10-26 16:21 blogernice 编辑

如何在三个月掌握三年的经验
摘要:很多职场新人都谈到了工作经验的问题,似乎招聘公司不给你机会,你就没办法获得必要的工作经验,其实并不一定。 很多资料在网上都是可以找到的,只是看你具备不具备足够的信息收集与处理能力,而这个收集与处理信息的过程,也能极大的提升你的职业能力。 我一直有个感觉,在“模仿中成长,在创新中成功”,其实在真正的职 阅读全文

posted @ 2018-10-26 16:20 blogernice 编辑

MCS-51简介
摘要:MCS-51大概是所有单片机工程师的母语了吧,虽然很多人都认为51单片机太低档了,不过在这一年多的追逐里,从51到 PIC,从ARMv4到v7乃至dual-core。 从BSP到Application Development,但这最后我意识到:其实没有谁更好,只有谁最适合。MCS-51单片机是美国I 阅读全文

posted @ 2018-10-26 16:19 blogernice 编辑

ImageMagick介绍
摘要:在Linux下,Gimp的图片处理能力固然很强大,但它是基于图形界面的,用户有时需要在命令行模式处理对一些图片进行处理,这时可就得请求ImageMagick的帮助了! ImageMagick是一个免费的创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应 阅读全文

posted @ 2018-10-26 16:18 blogernice 编辑

iTools与iTunes
摘要:iTools可以从360软件管家下载安装,可以管理苹果手机及安卓手机。 iTunes可以从苹果官网下载安装,方便备份苹果手机资料,升级或降级iOS。 阅读全文

posted @ 2018-10-26 16:17 blogernice 编辑

MOS管的原理及其用法
摘要:除了电容、电感外,处理器供电用料发生改变的还包括场效应管(MOSFET), 全称: 金属氧化物半导体场效应晶体管(Metal-Oxide -Semiconductor Field Effect Transistor), 一般被叫做MOS管。MOSFET应用于电流的放大,由于MOSFET的输入阻抗很高 阅读全文

posted @ 2018-10-26 16:13 blogernice 编辑

评Setup violation和hold violation
摘要:place之后,setup和hold都正好为0ns,然后插入时钟树,树的完全平衡的,WC的时钟树insertion delay是0.2ns,BC的insertion delay是0.1ns,这时做STA,会看到timing violation吗?有多少条violation,各违反了多少ns?他们是真 阅读全文

posted @ 2018-10-26 15:54 blogernice 编辑

Verilog-1995和verilog-2001的区别
摘要:下面对Verilog-2001新增特性进行详细说明,部分说明用实例进行解析。 l generate语句 Verilog- 2001添加了generate循环,允许产生module和primitive的多个实例化,同时也可以产生多个 variable,net,task,function,contino 阅读全文

posted @ 2018-10-26 15:52 blogernice 编辑

关于Power Domain
摘要:在MultiSupplyMultiPower的90nm一下设计中,怎样对休眠区进行处理,是下面我想说的。 首先介绍个概念: Power Gating power gating 和 gating clock 还不是一回事,Gating Clock 是对clock端进行控制,在休眠区用Gate禁止clo 阅读全文

posted @ 2018-10-26 15:51 blogernice 编辑

计数器极限高速问题
摘要:最近在调试250M的时序的时候,发现有段关键路径怎么调试也调试不成功,其中关键路径中有比较器和计数器, 以前采用如下方式写的 module counter( input clk ,clr , input [31:0] cin , output wire cout ) ; reg [31:0]cnt 阅读全文

posted @ 2018-10-26 15:51 blogernice 编辑

找到了Modelsim和C联合仿真的接口---ModelSim FLI
摘要:1前言 协同仿真就是利用仿真工具提供的外部接口, 用其它程序设计语言(非HDL语言,如c语言等)编程,用辅助仿真工具进行仿真。Modelsim提供了与c语言的协同仿真接口。以Windows平台为 例,用户可通过modelsim提供的c语言接口函数编程,生成动态链接库,由modelsim调用这些动态链 阅读全文

posted @ 2018-10-26 15:46 blogernice 编辑

verilog HDL学习笔记
摘要:1. 作为一种硬件描述语言,verilog可以直接描述硬件结构,也可以通过描述系统行为实现建模,其主要特点和功能有: *描述基本逻辑门和基本开关模型。 * 允许用户定义基元。 * 可以指定设计中的端口到端口的延时,路径时延和设计中的时序检查。 *可以采用多种方式进行建模,这些方式包括(1)顺序行为描 阅读全文

posted @ 2018-10-26 15:45 blogernice 编辑

基于VerilogHDL模型优化
摘要:1 引言 每个设计者在进行Verilog建模时都会形成自己的设计风格,同一个电路设计,用Verilog描述可以写出许多逻辑上等价的模型,而大多数设计者考虑 的主要是代码书写上的方便和功能上是否正确,对设计的模型是否最优化结构却考虑甚少,这样不仅加重了逻辑综合的负担,影响综合效率,而且很可能会导致设计 阅读全文

posted @ 2018-10-26 15:44 blogernice 编辑

systemverilog/event.triggered
摘要:1. event.triggered只会保持一个time_slot,在下一个time_slot将会丢失这个标记,如果不能保证在每一个time_slot都会检测到这个标志,那么将会丢失这个标志。 2. 必须保证在->event的同一个或之前的time_slot开始检测triggered. 3.virt 阅读全文

posted @ 2018-10-26 15:41 blogernice 编辑

verilog HDL的系统任务及testbench写法
摘要:通用的HDL包括VHDL和verilog HDLHDL既可以用来design也可以用来test/confirm用HDL写出来的测试文件称为test bench被测试的模块成为device under test,简称DUT,既可以是behavioral级描述也可以是RTL级或gate级描述verilo 阅读全文

posted @ 2018-10-26 15:40 blogernice 编辑

verilog中的input signed
摘要:module test(una,unb,sia,sib,unc,sic); input [10:0] una,unb; input signed [10:0] sia,sib; output [12:0] unc; output signed [12:0] sic; assign unc = una 阅读全文

posted @ 2018-10-26 15:40 blogernice 编辑

verilog小感
摘要:今天同学给我说FIR滤波器的时序对不上,他说乘法器延迟太大,就用左移了,可是仿真时左移还是2周期才能移完,移位寄存器代码如下: always @(posedge clk) begin a <= {in[8:0],0}; out <= a; end 看见这段代码之后我立即认识到这是通过两个周期完成的事 阅读全文

posted @ 2018-10-26 15:39 blogernice 编辑

verilog经验小结
摘要:1.中间变量和输出变量都要用reg类型暂存一下,输出必须用reg寄存 2.对一个n'b(n>=2)的寄存器赋值时可以直接在声明时: reg [n-1:0] register=0; 在中间部分赋值时 register[7:0]=0 是不对的, 可以用 register[7:0]=8'hff 来赋值。 阅读全文

posted @ 2018-10-26 15:38 blogernice 编辑

ICC中port view, abstract view, floorplan view, detailed view, reduced view的区别
摘要:abstract view就如同近视眼看到的人 floorplan view就如同手术台上的人,这里的皮肤可以移植到那里 detailed view就是完全的你咯 reduced view就如同大夏天正午对着光拍摄人,就剩下像人一样的黑色剪影了。 阅读全文

posted @ 2018-10-26 15:37 blogernice 编辑

Verilog的参数传递
摘要:在调用DesignWare时候,通常会有dw01_add #(a_width,bwidth)这一类语法出现,当时很疑惑这是为什么,现在才查到它的出处。怀疑是不是自己基本功不够扎实。查到的用法如下 1、module_name #( parameter1, parameter2) inst_name( 阅读全文

posted @ 2018-10-26 15:37 blogernice 编辑

APR小结
摘要:PR管的事情太多了,有几个难点,都要操心的, 操心多了人就累 。 1) library prepare, 不管是build lef还是BPV fram view, 总是有些问题, 不解决好,直接导致布线问题, 2) floorplan,这个操心的事情太多了, MACRO place, IO PLAC 阅读全文

posted @ 2018-10-26 15:36 blogernice 编辑

跟业界的学长聊天,一些话让我受益匪浅
摘要:1.高手和新手的区别是,高手能用最少的CODE完成同样的功能,而且保证coner最少,bug最少 2.功能能正确的话,再保证综合中没有问题,还有后面一系列的过程都没有问题,最终流片OK。 3.constraints中这些值是根据芯片的使用环境,测量或者估算的都不是随便给的,也不第一次寄生参数提取后拿 阅读全文

posted @ 2018-10-26 15:35 blogernice 编辑

如何摆放macro
摘要:如何摆放macro (memory,PLL,ADC,DAC,特殊IO等)整体摆放时,应该考虑:1)PLL,ADC,DAC要按照IO的要求放在边上2)macro与IO的关系,相同功能的要靠近3)要根据芯片内部的数据流,按顺序摆放4)如果是IO limit设计,除PLL/ADC/DAC等与IO相连的ma 阅读全文

posted @ 2018-10-26 15:35 blogernice 编辑

芯片面积的估算
摘要:IO neck 和 core neck 一般称作 IO limited 和 core limited,IO limited :这个芯片的面积是因为IO个数限制(太多),而不得不做得那么大。core部分其实用不了那么大。这时面积计算就简化为每边IO个数的计算了。Core limited:芯片面积是有c 阅读全文

posted @ 2018-10-26 15:34 blogernice 编辑

IC设计的功耗分析流程
摘要:首先声明本文所讲的范围,在这篇文章中,是采用synopsys的设计流程,对数字电路进行功耗分析,生成功耗分析报告的流程。分析的对象是逻辑综合之后布局布线之前的功耗分析,以及布局布线之后的功耗分析。 Synopsys做功耗分析使用到的工具是:Primetime PX, Prime Rail。PTPX可 阅读全文

posted @ 2018-10-26 15:33 blogernice 编辑

天线设计原理
摘要:最近看见有同学为了增强手机GPS信号,把天线DIY到外面,拉了一条很长的天线,自己在怀疑这样是否符合天线设计原则,真的能使信号增强吗?于是找到下面这篇文章来学习一下。 1.RFID基本原理 RFID (radio frequency identification)是利用无线电波进行通信的一种自动识别 阅读全文

posted @ 2018-10-26 15:32 blogernice 编辑

从 算法 到 硬件结构设计 的总结(JND prj Summary)
摘要:如期在做JND的硬件结构设计,对于DSP类的高速运算电路,目前有以下几点想说: 1. 首先觉得重中之重就是把Matlab/C算法验证的程序看好,数据流在心中一定要有准,大致预估模块怎样划分。能化简的运算在算法级别全部要化简。 2. 位宽设计简直就是悲催的事,不仅要在理论上算出每个变量/寄存器的值域, 阅读全文

posted @ 2018-10-26 15:31 blogernice 编辑

Perl在IC设计中的应用
摘要:Perl和Tcl是ic设计中最常用的两种脚本语言,在我学习perl之前完全的不知道他们到底是干什么的。在这里先总结一下Perl的作用: 1.用于生成Verilog代码 在写verilog时,经常遇到一些规律性强,编写又比较麻烦的代码,而这些恰恰又是可重用性比较强的。比如总线模块、FIR滤波器、IIR 阅读全文

posted @ 2018-10-26 15:31 blogernice 编辑

windriver command
摘要:1.inn/in inn命令仅复位CPU,通常建立连接后如果出现error的话,OCD Command Shell进入“ERR>”提示符状态;可以将CPU复位一下; in复位cpu,并执行仿真器中的寄存器脚本文件初始化外设寄存器; 2.ha 让CPU停止运行;OCD Command Shell进入“ 阅读全文

posted @ 2018-10-26 15:29 blogernice 编辑

mips汇编指令
摘要:Arithmetic Instructions abs des, src1 # des gets the absolute value of src1. add(u) des, src1, src2 # des gets src1 + src2. addi $t2,$t3,5 # $t2 = $t3 阅读全文

posted @ 2018-10-26 15:28 blogernice 编辑

地址过滤窗口
摘要:我们的芯片5,6,7改成5,4,7 cpu内部挡cache访问的窗口,只挡cache读,不影响其他操作,因此汪文祥建议用一个窗口将寄存器空间全盖住,代码如下:下面代码是将0x10000000-0x1fffffff禁止取指代码。 阅读全文

posted @ 2018-10-26 15:27 blogernice 编辑

mips寄存器约定
摘要:对于在一个CPU上进行开发,掌握其工作的CPU的寄存器约定是非常重要的。MIPS体系结构提供了32个GPR(GENERAL PURPOSE REGISTER)。这32个寄存器的用法大致如下:REGISTER NAME USAGE $0 $zero 常量0(constant value 0) $2-$ 阅读全文

posted @ 2018-10-26 15:27 blogernice 编辑

MIPS --CP0 Hazard
摘要:Because resources controlled via Coprocessor 0 affect the operation of various pipeline stages of a MIPS32 processor,manipulation of these resources m 阅读全文

posted @ 2018-10-26 15:26 blogernice 编辑

虚拟地址对应汇编代码
摘要:1.通过ejtag抓到死机时的ra,假设为0x2b29640c 2.重启进程,ctrl+z 挂住,top命令查看进程号 3.cat /proc/进程号/map 查看进程的地址映射,假设找到0x2b211000-0x2b305000 ...lib_DRV.so,说明程序是在lib_DRV.so这个库里 阅读全文

posted @ 2018-10-26 15:25 blogernice 编辑

mips分支延迟槽及虚拟地址转换
摘要:写的挺不错的,但是还是有点困惑,就是关于分支预测技术和延迟槽的关系,等弄清楚后再写个总结吧。 分支延迟槽 (Branch delay slot),简单地说就是位于分支指令后面的一条指令,不管分支发生与否其总是被执行,而且位于分支延迟槽中的指令先于分支指令提交 (commit)。 801ea9d4: 阅读全文

posted @ 2018-10-26 15:24 blogernice 编辑

开源的LEON项目
摘要:LEON是一个32位的基于SPARC-V8RISC体系结构和指令集的CPU微处理器内核。最初是由欧洲空间局(ESA)的欧洲空间研究和技术中心(ESTEC)设计的,之后由Gaisler 研究所设计。LEON是合成化的VHDL描述的。LEON具有双重许可模型:可以无许可证费用使用的LGPL/GPL FL 阅读全文

posted @ 2018-10-26 15:22 blogernice 编辑

LEON3 Processor
摘要:Introduction The LEON3 is a synthesisable VHDL model of a 32-bit processor compliant with the SPARC V8 architecture. The model is highly configurable, 阅读全文

posted @ 2018-10-26 15:22 blogernice 编辑

CPU地址空间
摘要:(一)地址的概念 1) 物理地址:CPU地址总线传来的地址,由硬件电路控制其具体含义。物理地址中很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上 (如显存、BIOS等)。在程序指令中的虚拟地址经过段映射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址线上。 物理地址空间,一 阅读全文

posted @ 2018-10-26 14:51 blogernice 编辑

MIPS体系结构学习笔记
摘要:Q1: 一些专门用途REG A: MIPS的通用寄存器中,按照编译器的规约,某些寄存器是做专门用途的,比如SP就是堆栈指针,ra是函数调用的返回地址,v0-v1通常用来保存函数调用非浮点数的返回值,a0-a3用来保存被调用函数的前四个参数等等。当然你也可以不按照这些规约编程,例如用$2存放堆栈指针, 阅读全文

posted @ 2018-10-26 14:46 blogernice 编辑

基于 ARM 体系的嵌入式系统 BSP 的程序设计
摘要:摘要: 在介绍基于 ARM 体系的嵌入式系统启动流程的基础上,结合编程实例,详细、系统地叙述了 BSP (板级支持包)程序的各个组成部分及其具体设计方案,并就实际程序设计中的几个难点问题做了说明。 关键词: ARM BSP 嵌入式系统 微处理器 ARM公司32 位RISC 的CPU 开发领域不断取得 阅读全文

posted @ 2018-10-26 14:45 blogernice 编辑

ARM处理器体系结构
摘要:嵌入式处理器种类繁多,从8位、16位、32位到64位都有。本章介绍的嵌入式应用处理器主要有ARM、MIPS、PowerPC、X86、68K/Cold fire等,下面对这些处理器进行一些简单介绍。 MIPS是Microprocessor without Inter-locked Pipeline S 阅读全文

posted @ 2018-10-26 14:44 blogernice 编辑

makefile中的notdir,wildcard和patsubst
摘要:notdir,wildcard和patsubst是makefile中几个有用的函数,以前没留意过makefile中函数的用法,今天稍微看看~ 1、makefile里的函数makefile里的函数使用,和取变量的值类似,是以一个‘$’开始,然后是一个括号里面是函数名和需要的参数列表,多个变量用逗号隔开 阅读全文

posted @ 2018-10-26 14:42 blogernice 编辑

Linker Script,LMA,VMA实例分析
摘要:以前在学ld的script时两个比较重要的概念,即指定一个输出section的lma和 vma(分别是load memory address和virtual memory address),vma的作用是很明显地,就是决定run time address嘛,但lma有什么用呢?恩,对运行在linux 阅读全文

posted @ 2018-10-26 14:41 blogernice 编辑

区别shell与makefile中的export
摘要:在shell中,可以使用export修改当前进程的环境变量。例如, export PATH=.:$PATH就可以将当前路径加入可执行文件查找路径中,这样你就不要敲“./excutable” 来执行当前路径中的excutable。而只需要键入 “excutable” 就行了。 make可以执行shel 阅读全文

posted @ 2018-10-26 14:40 blogernice 编辑

LMA 与 VMA
摘要:VMA与LMA [zz]2011-10-16 10:07两个地址都是虚拟地址。lma: 加载地址,如加载到RAM中等,在嵌入式中,有可能是在ROM中(这时LMA!=VMA)vma: 虚拟地址,就是程序运行时的地址,一般就是内存地址,如要把ROM中的数据加载到RAM中运行。 关于LMA 和 VMA: 阅读全文

posted @ 2018-10-26 14:39 blogernice 编辑

bootloader简介
摘要:本文介绍了基于嵌入式系统中的 OS 启动加载程序Boot Loader 的概念、软件设计的主要任务以及结构框架等。一、引言在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次:1. 引导加载程序。包括固化在固件(firmw 阅读全文

posted @ 2018-10-25 16:59 blogernice 编辑

如何编译.so动态库
摘要:问:我源文件为main.c, x.c, y.c, z.c,头文件为x.h,y.h,z.h如何编译成.so动态库?编译器用gcc最好能给出详细参数解释,谢谢答:# 声称动代连接库,假设名称为libtest.sogcc x.c y.c z.c -fPIC -shared -o libtest.so# 将 阅读全文

posted @ 2018-10-25 16:57 blogernice 编辑

maugs中1ms的实现
摘要:1ms的实现 hal_systimer_1ms = (hal_clock_cpu / 2000);除以2000的原因是: C0_COUNT 寄存器作为一个实时的定时器工作,每两个时钟周期增 1。所以hal_clock_cpu要准确,否则系统计时不准确. 系统时间的实现 在magus_sys_time 阅读全文

posted @ 2018-10-25 16:56 blogernice 编辑

uboot中usb storage启动方法
摘要:这种方法比较简单,就是利用uboot自带命令usbboot来实现启动,也算是最粗糙的一种。1.在配置文件中添加一系列有关USB的支持。uboot编译启动后输入usb startusbboot 0x30800000 0:1这里的0是usb设备0,1是第一分区当然,这里肯定会失败,因为usb stora 阅读全文

posted @ 2018-10-25 16:55 blogernice 编辑

SYSCALL functions available in MARS
摘要:SYSCALL functions available in MARS Introduction A number of system services, mainly for input and output, are available for use by your MIPS program. 阅读全文

posted @ 2018-10-25 16:53 blogernice 编辑

genstart 脚本学习
摘要:[cpp] view plaincopy #!/bin/bash cp -f $1/start.S . includeS=`grep "^#include.*\.S" $1/start.S` for i in $(echo $includeS | sed "s/#include //g" | tr  阅读全文

posted @ 2018-10-25 16:52 blogernice 编辑

内核启动命令行的传递过程
摘要:Linux 内核在启动的时候需要一些参数,以获得当前硬件的信息或者启动所需资源在内存中的位置等等。这些信息可以通过bootloader传递给内核,比较常见的 就是cmdline。以前我在启动内核的时候习惯性的通过uboot传递一个cmdline给内核,没有具体的分析这个过程。最近在分析内核启动过程的 阅读全文

posted @ 2018-10-25 16:52 blogernice 编辑

向UBOOT中移植代码
摘要:1.首先,将要移植的代码目录(如bootpicsnd)整个拷贝到UBOOT工程中,最好放到对应的board目录下。 2.在bootpicsnd目录里,新建一个Makefile,参考如下: ## (C) Copyright 2000-2007# Wolfgang Denk, DENX Software 阅读全文

posted @ 2018-10-25 16:51 blogernice 编辑

start.s打印寄存器值的汇编实现
摘要:/*a0 = addrt2 = *(addr)t4 for right shift*/LEAF(print_reg) li t0,UART0_BASE_ADDR li t1,10 lw t2,0(a0) li t4,32 1: sub t4,4 move t3,t2 srl t3,t4 and t3 阅读全文

posted @ 2018-10-25 16:48 blogernice 编辑

PMON链接脚本ld.script分析
摘要:1.首先我们是通过make tgt=rom CROSS_COMPILE=mips-wrs-linux-gnu- DEBUG=-g来编译的,所以实际上主要调用如下编译命令: ejtag_rom ejtag_rom1 ejtag_ram rom: clean ${START} zloader.o gcc 阅读全文

posted @ 2018-10-25 16:47 blogernice 编辑

PMON中autoload自动加载操作系统代码分析
摘要:龙芯BIOS的最终目的,还是需要加载一个更好的操作系统。当你在启动时不按下任何按键,pmon就会自动地加载缺省设置的操作系统。它的实现代码如下:#ifdef AUTOLOADs = getenv ("al");autoload (s);#elses = getenv ("autoboot");aut 阅读全文

posted @ 2018-10-25 16:46 blogernice 编辑

PMON start.S 串口输出函数
摘要:串口输出东西太重要了,因此,再来仔细地看看串口调用的其它函数,这样做到一目了然,没有别的疑问在里面,就可以做到庖丁解牛游刃有余。像下面的函数:PRINTSTR(" CONFIG=")上面这句,就是输出一串字符到串里显示出来。其实它是一个宏定义,那么它是怎么样实现输出字符串到串口上的呢?立即去找到它的 阅读全文

posted @ 2018-10-25 16:46 blogernice 编辑

BootLoader概述
摘要:本文详细地介绍了基于嵌入式系统中的 OS 启动加载程序 ―― Boot Loader 的概念、软件设计的主要任务以及结构框架等内容。 一、引言在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次:1. 引导加载程序。包括固 阅读全文

posted @ 2018-10-25 16:45 blogernice 编辑

u-boot的Makefile分析
摘要:U-BOOT是一个LINUX下的工程,在编译之前必须已经安装对应体系结构的交叉编译环境,这里只针对ARM,编译器系列软件为arm-linux-*。 U-BOOT的下载地址: http://sourceforge.net/projects/u-boot我下载的是1.1.6版本,一开始在FTP上下载了一 阅读全文

posted @ 2018-10-25 16:44 blogernice 编辑

BSS段
摘要:BSS(Block Started by Symbol)这个词最初是UA-SAP汇编器(United Aircraft Symbolic Assembly Program)中的一个伪指令,用于为符号预留一块内存空间。该汇编器由美国联合航空公司于20世纪50年代中期为IBM 704大型机所开发。后来B 阅读全文

posted @ 2018-10-25 16:43 blogernice 编辑

mips编译出的二进制文件怎么看?
摘要:PMON在编译之后,生成的二进制文件其实也是可以看懂的。 每32位(4个byte)组成一句mips汇编指令, 比如:3c08bf22 lui t0,0xbf22 用UE(或者linux下的hexedit)打开gzrom.bin,可以看到是反着排列的,即为 22 bf 08 3c。 如果想看往一个地址 阅读全文

posted @ 2018-10-25 16:42 blogernice 编辑

mips汇编简单实例——一个小计算器
摘要:其实开始的时候一直在看 mips的指令格式,看了、忘了,没什么效果。 现在通过这个例子,简单训练一下: mips汇编中: 常用寄存器的使用; 系统调用: 1(print_int),4(print_str),5(read_int),10(exit); 算术运算: add,sub,mul,div; 逻辑 阅读全文

posted @ 2018-10-25 16:41 blogernice 编辑

UBOOT源码分析及移植
摘要:本文从以下几个方面粗浅地分析u-boot并移植到FS2410板上:1、u-boot工程的总体结构2、u-boot的流程、主要的数据结构、内存分配。3、u-boot的重要细节,主要分析流程中各函数的功能。4、基于FS2410板子的u-boot移植。实现了NOR Flash和NAND Flash启动,网 阅读全文

posted @ 2018-10-25 16:40 blogernice 编辑

setup_arch函数分析
摘要:在文件 arch/arm/boot/compressed/head.S[2]中 start 为zImage 的起始点,部分代码如下:start:mov r7, r1mov r8, r2…...mov r0, r4mov r3, r7bl decompress_kernelb call_kernelc 阅读全文

posted @ 2018-10-25 16:40 blogernice 编辑

SRAM、DRAM、SDRAM的区别
摘要:为什么dram要刷新, sram不需要? 这个是由于ram的设计类型决定的,dram用了一个t和一个rc电路,导致电容毁漏电和缓慢放电。所以需要经常的刷新来保持数据。 DRAM,动态随机存取存储器,需要不断的刷新,才能保存数据。 而且是行列地址复用的,许多都有页模式。 SRAM,静态的随机存取存储器 阅读全文

posted @ 2018-10-25 16:39 blogernice 编辑

camera 原理
摘要:1、Color Filter Array — CFA 随着数码相机、手机的普及,CCD/CMOS 图像传感器近年来得到广泛的关注和应用。 图像传感器一般都采用一定的模式来采集图像数据,常用的有 BGR 模式和 CFA 模式。BGR 模式是一种可直接进行显示和压缩等处理的图像数据模式,它由 R( 红) 阅读全文

posted @ 2018-10-25 16:31 blogernice 编辑

触摸屏设备驱动程序
摘要:由于触摸屏设备简单、价格低廉,到处应用 在消费电子商品、工业控制系统、甚至航空领域都有应用 触摸屏作为一种最新的电脑输入设备,是目前最简单、方便、自然的的一种人机交互方式,具有坚固耐用、反应速度快、节省空间、易于交流等许多优点。 事实上,触摸屏是一个使多媒体信息系统改头换面的设备,它赋予多媒体系统以 阅读全文

posted @ 2018-10-25 16:30 blogernice 编辑

LCD设备驱动程序
摘要:LCD是Liquid Crystal Display的简称,也就是经常所说的液晶显示器 LCD能够支持彩色图像的显示和视频的播放,是一种非常重要的输出设备 Framebuffer 是Linux系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对 阅读全文

posted @ 2018-10-25 16:29 blogernice 编辑

输入子系统
摘要:Linux的输入子系统不仅支持鼠标、键盘等常规的输入设备,而且还支持蜂鸣器、触摸屏等设备 输入子系统又叫input子系统。其构建非常灵活,只需要调用一些简单的函数,就可以将一个输入设备的功能呈现给应用程序 #define EV_SYN 0x00 //表示设备支持所有事件 #define EV_KEY 阅读全文

posted @ 2018-10-25 16:29 blogernice 编辑

看门狗驱动程序
摘要:看门狗是当CPU进入错误状态后,无法恢复的情况下,使计算机重新启动 由于计算机在工作时不可避免的受到各种各样的因素干扰,即使再优秀的计算机程序也可能因为这种干扰使计算机进入一个死循环,更严重的就是导致死机。 有两种办法来处理这种情况: 一是:采用人工复位的方法 二是:依赖于某种硬件来执行这个复位工作 阅读全文

posted @ 2018-10-25 16:28 blogernice 编辑

RTC实时时钟驱动
摘要:RTC(Real-Time Clock)实时时钟为操作系统提供了一个可靠的时间,并且在断电的情况下,RTC实时时钟也可以通过电池供电,一直运行下去。 RTC通过STRB/LDRB这两个ARM指令向CPU传送8位数据(BCD码)。数据包括秒,分,小时,日期,天,月和年。RTC实时时钟依靠一个外部的32 阅读全文

posted @ 2018-10-25 16:24 blogernice 编辑

Camera图像处理原理及实例分析
摘要:Camera图像处理原理及实例分析 做为拍照手机的核心模块之一,camera sensor 效果的调整,涉及到众多的参数,如果对基本的光学原理及 sensor 软/硬件对图像处理的原理能有深入的理解和把握的话,对我们的工作将会起到事半功倍的效果。否则,缺乏了理论的指导,只能是凭感觉和经验去碰,往往无 阅读全文

posted @ 2018-10-25 16:22 blogernice 编辑

c语言操作mysql数据库
摘要:c语言操作Mysql数据库,主要就是为了实现对数据库的增、删、改、查等操作,操作之前,得先连接数据库啊,而连接数据库主要有两种方法。一、使用mysql本身提供的API,在mysql的安装目录中可可以看到大量的头文件、lib文件、dll文件,这说明mysql原生就支持了c语言,操作起来相当简单。二、使 阅读全文

posted @ 2018-10-25 15:31 blogernice 编辑

史上最清晰的红黑树讲解
摘要:本文以Java TreeMap为例,从源代码层面,结合详细的图解,剥茧抽丝地讲解红黑树(Red-Black tree)的插入,删除以及由此产生的调整过程。 总体介绍 Java TreeMap实现了SortedMap接口,也就是说会按照key的大小顺序对Map中的元素进行排序,key大小的评判可以通过 阅读全文

posted @ 2018-10-25 15:25 blogernice 编辑

红黑树
摘要:之前看了很多写红黑树的博客,但是感觉都讲的不太清楚!没说这样操作如何使他保持平衡的,于是疑惑重重,就看不下去了,一次不经意看到一个人说维基百科的红黑树讲的好,我就随便点了一下一看——这下疯了~,怎么讲的这么好!可以说是把一个复杂的问题,讲得简单化!这太幸福了! 于是我就慢慢学会了!强烈推荐维基的这个 阅读全文

posted @ 2018-10-25 15:22 blogernice 编辑

平衡二叉树
摘要:平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉树:它的左子树和右子树的深度之差的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。 平衡因子(bf):结点的左子树的深度减去右子树的深度,那么显然-1<=bf<=1; 很显然,平衡二叉树是在二叉排序树(BST)上引入的,就是为 阅读全文

posted @ 2018-10-25 15:21 blogernice 编辑

MATLAB入门教程
摘要:1.MATLAB的基本知识 1-1、基本运算与函数 在MATLAB下进行基本数学运算,只需将运算式直接打入提示号(>>)之後,并按入Enter键即可。例如: >> (5*2+1.3-0.8)*10/25 ans =4.2000 MATLAB会将运算结果直接存入一变数ans,代表MATLAB运算後的答 阅读全文

posted @ 2018-10-25 15:19 blogernice 编辑

Matlab绘图-很详细,很全面
摘要:Matlab绘图 强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数。此外,Matlab还提供了直接对图形句柄进行操作的低层绘图操作。这类操作将图形的每个图形元素(如坐标轴、曲线 阅读全文

posted @ 2018-10-25 15:16 blogernice 编辑

vim-latex 的安装与配置
摘要:由于习惯了vim的轻巧,不想在安装额外的tex编辑器,就按照自己的使用习惯对vim进行了相应的配置。 1. vim-latex插件的安装 下载地址:http://sourceforge.net/projects/vim-latex/files/ 将下载的vim-latex-1.8.23-201201 阅读全文

posted @ 2018-10-06 14:31 blogernice 编辑

点击右上角即可分享
微信分享提示