摘要: 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 阅读(1248) 评论(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 阅读(8713) 评论(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 阅读(1068) 评论(0) 推荐(0) 编辑
摘要: 一、概述1、理解u-boot的makefile需要的准备 linux常用命令、shell脚本基础知识、makefile脚本基础知识2、Makefile的元素 万变不离其宗,无论工程多么复杂,文件多么庞大,其实源于最简单的makefile。Makefile典型的规则如下。目标:依赖1,依赖2••••... 阅读全文
posted @ 2013-11-12 17:01 amanlikethis 阅读(7056) 评论(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 阅读(904) 评论(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 阅读(802) 评论(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 阅读(250) 评论(0) 推荐(0) 编辑
摘要: windos有串口调试助手,linux下也有这样的工具——minicom。不过,minicom和linux下的许多工具都一样,也是命令行模式,没有图形化界面供我们享受。作为一款串口调试工具,虽然难看但总比没有的好。 为什么linux下的工具都这么的简朴,没什么华丽的界面,好像回到了解放前。一种可能... 阅读全文
posted @ 2013-11-07 21:42 amanlikethis 阅读(10854) 评论(0) 推荐(0) 编辑
摘要: 从开始学C语言写第一个"hello world"历程到现在,我依然困惑于到底这个程序完整的执行流程是什么样的。不过,现在我正在尝试一点一点的揭开它的面纱。现在,我尝试分析linux中C语言静态库和动态库生成和调用的方法,这可以算作实现最终愿望的一小步。 首先说明的是,本文参考于linux 静态库、共享库,这篇文章写的的确不错。笔者结合自己的学习过程,稍作修改。一、什么是库 本质上说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux本质的不同,因此二者的二进制库是不兼容的。linux操作系统支持的函数库可分为静态库和动态库,动态库又称为 阅读全文
posted @ 2013-11-04 10:42 amanlikethis 阅读(1324) 评论(0) 推荐(0) 编辑
摘要: (1)我们假设只有一个赋初值的char型全局变量,那么系统会在data区分配一个4字节的存储空间来存储它。实际上,只用了1个字节,但是为了4字节对齐,只好分配4个字节,所以就会有3个字节浪费。(2)我们假设在原来基础上增加一个赋初值的char型全局变量,那么系统会在data区原来的4字节中取出一个字节来保存这个新的变量。实际上,这时只用了2个字节,但是为了4字节对齐,只好分配4个字节,所以就会有2个字节浪费。(3)我们假设再在原来基础上增加一个赋初值的short型全局变量,那么系统会在data区原来的4字节中再取出两个字节来保存这个新的变量。实际上,这时用了4个字节,恰好4字节对齐,所以就不会 阅读全文
posted @ 2013-11-01 17:19 amanlikethis 阅读(1726) 评论(0) 推荐(0) 编辑