摘要: 引 程序是设计思想的体现。程序在设计之初,设计者会有一些列的目的(设计目标),接下来才是实现这些目的的思路(设计流程),最后才是具体地实现。 阅读程序是程序员必备的技能,通过阅读高手的程序,了解程序的功能,学习程序设计的技巧。比较短的程序段,比如说一千行一下的程序,通常都不复杂,很容易读懂。但是,碰上上万行的程序,比如说ucos-ii内核,linux 0.11内核,uboot启动代码,没有一定的阅读技巧,像无头苍蝇一样的读,显然会四处碰壁。有些程序阅读者,心情浮躁,这本身就是程序员的大忌。在读海洋般的代码时,不肯钻进去,找很多的相关资料,大概了解了程序的结构和工作原理,就草草了事。似乎... 阅读全文
posted @ 2013-11-16 20:04 amanlikethis 阅读(766) 评论(0) 推荐(0)
摘要: gcc有两种方法向待编译源文件传入参数第一种 利用–Dmacro=name 编译选项,详见gcc -D选项第二种 利用链接脚本(*.lds)传入参数,类似于ADS的编译器参数可以被待编译源文件调用举例:SECTIONS { . = 0x00000000; .init : AT(0){ head.o init.o nand.o} . = 0x30000000; .text : AT(4096) { *(.text) } .rodata ALIGN(4) : AT((LOADADDR(.text)+SIZEOF(.text)+3)&~(0x03)) {*(.rodat... 阅读全文
posted @ 2013-11-15 15:53 amanlikethis 阅读(1271) 评论(0) 推荐(0)
摘要: 一、概念 gcc的-D选项可以定义宏,这是什么意思呢? C语言源程序中有#define定义的宏,可以起到替换、条件编译的功能;定义宏的方式是放在头文件或者C文件中。gcc提供了另外一种宏定义的方法,当然可以想象这样的宏定义方法并不是很好用,但毕竟编译器给我们提供了额外的宏定义的方法。假设程序需要很多宏,不可能这些宏都在编译器中定义,可以说比较重要的宏才会放在gcc的D选项后边。-Dname 定义宏name,默认定义内容为字符串“1”-Dname=defn 定义宏name,并且内容为defn二、实验测试程序:#include int main(){ #ifdef HELLO prin... 阅读全文
posted @ 2013-11-14 19:16 amanlikethis 阅读(9156) 评论(0) 推荐(2)
摘要: clc; %clc是清除command window里的内容clear all; %clear是清除workspace里的变量close all; %close all来关闭所有已经打开的图像窗口image_ori = imread('skeleton_orig.bmp'); %读取图像数据im... 阅读全文
posted @ 2013-11-14 15:40 amanlikethis 阅读(1083) 评论(0) 推荐(0)
摘要: 一、概述1、理解u-boot的makefile需要的准备 linux常用命令、shell脚本基础知识、makefile脚本基础知识2、Makefile的元素 万变不离其宗,无论工程多么复杂,文件多么庞大,其实源于最简单的makefile。Makefile典型的规则如下。目标:依赖1,依赖2••••... 阅读全文
posted @ 2013-11-12 17:01 amanlikethis 阅读(7270) 评论(2) 推荐(1)
摘要: 测试代码 ldr r0, _start adr r0, _start ldr r0, =_start nop mov pc, lr_start: nop设置代码的起始地址为0x0c008000,用 ADS1.2编译后的反汇编如下所示↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓0c008000 :c008000: e59f000c ldr r0, [pc, #12] ; c008014 c008004: ... 阅读全文
posted @ 2013-11-12 15:59 amanlikethis 阅读(921) 评论(0) 推荐(0)
摘要: 在做ISD4004语音芯片驱动程序时,欲读取录音或者放音的地址,编了一段程序如下所示。但是,程序一直执行错误。/***************************************************************函数功能:SPI串行发送24位命令并同时接收24位数据的函数,接收的8位数 据高位低位反向(*|*|*|*|*|P16|···P1|P0|EOM|OVF|0|0|0|0|0|0|0|0)****************************************************************/unsigned 阅读全文
posted @ 2013-11-11 20:41 amanlikethis 阅读(825) 评论(0) 推荐(0)
摘要: C++语言提供的函数模板解决函数体完全相同,只是形参不同的几个函数不必重复定义的问题,但是它隐藏了一些操作,当然这些工作是编译器完成的。以一个经典的例子来进行分析。#include using namespace std;template T max(T a, T b,T c){ if(b > a) a = b; if(c > a) a = c; return a;} int main(){ int i1 = 185,i2 = -76,i3 = 567,i; double d1 = 34.3,d2 = 12.3,d3 = 1.3,d; long g1 = ... 阅读全文
posted @ 2013-11-07 23:11 amanlikethis 阅读(257) 评论(0) 推荐(0)
摘要: windos有串口调试助手,linux下也有这样的工具——minicom。不过,minicom和linux下的许多工具都一样,也是命令行模式,没有图形化界面供我们享受。作为一款串口调试工具,虽然难看但总比没有的好。 为什么linux下的工具都这么的简朴,没什么华丽的界面,好像回到了解放前。一种可能... 阅读全文
posted @ 2013-11-07 21:42 amanlikethis 阅读(11129) 评论(0) 推荐(0)
摘要: 从开始学C语言写第一个"hello world"历程到现在,我依然困惑于到底这个程序完整的执行流程是什么样的。不过,现在我正在尝试一点一点的揭开它的面纱。现在,我尝试分析linux中C语言静态库和动态库生成和调用的方法,这可以算作实现最终愿望的一小步。 首先说明的是,本文参考于linux 静态库、共享库,这篇文章写的的确不错。笔者结合自己的学习过程,稍作修改。一、什么是库 本质上说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux本质的不同,因此二者的二进制库是不兼容的。linux操作系统支持的函数库可分为静态库和动态库,动态库又称为 阅读全文
posted @ 2013-11-04 10:42 amanlikethis 阅读(1368) 评论(0) 推荐(0)