当前搜索:

使用gcc中的__attribute__指定字节对齐

在x86(32位机器)平台下,GCC编译器默认按4字节对齐: 如:结构体4字节对齐,即结构体成员变量所在的内存地址是4的整数倍。可以通过使用gcc中的_attribute_选项来设置指定的对齐大小① attribute((packed)),让所作用的结构体取消在编译过程中的优化对齐,按照实际占用字节数进行对齐 ② attribute((aligned (n))),让所作用的结构体成员对齐在n字节边...
阅读(19) 评论(0)

自己实现printf函数

在嵌入式开发中,常常会通过串口打印一些信息到PC终端,这就需要实现自己的printf函数。我们先通过man 3 printf来看一下printf函数的声明: int printf(const char *format, ...); format:固定参数 … :可变参数(变参) 下面解析printf函数的使用: x86平台VC6.0编译器中,stdarg.h头文件内变参宏定义如下,本次...
阅读(16) 评论(0)

链接脚本使用AT加载地址的总结

(一)如果不使用AT这个选项,比如下边这个连接脚本 此时在bin文件里的位置就是烧写到某个地址(比如0地址),然后顺着往下排,具体在文件哪个地址不确定。但在ELF文件里,它的地址信息是从0x30000000开始 在bin文件的位置那个地址和elf中的地址信息不一样 (二)如果使用AT这个选项,比如下边这个连接脚本 此时main.o在bin文件里的位置在4096(4096之前未使用的...
阅读(29) 评论(0)

C中使用汇编定义的字符串

官方文档① .ascii "string"... .ascii expects zero or more string literals (see section Strings) separated by commas. It assembles each string (with no automatic trailing zero byte) into consecutive addres...
阅读(219) 评论(0)

.word说明

官方定义.word expressions举例说明:_rWTCON: .word 0x19970208就是在当前地址,即_rWTCON处放一个值0x19970208 类似于C语言:*(_rWTCON) = 0x19970208...
阅读(67) 评论(0)

Linux dd命令详解

busybox dd if=/dev/zero of=/dev/block/mmcblk0 bs=512 seek=1 count=1 conv=sync 解释: f=/dev/zero:输入文件名为/dev/zero of=/dev/mmcblk0:输出文件名为/dev/mmcblk0 bs=512:读块和写块的大小都为512B(这里的输出文件为一个块设备,块大小的设置跟块设备中每块的大小相关) seek=1:跳过第一个块 count:只拷贝一个块 conv:若读取的输入块不足512B,那么不足的部分填充...
阅读(162) 评论(0)

C代码中如何使用链接脚本中定义的变量

原文内容:http://www.100ask.org/bbs/forum.php?mod=viewthread&tid=16231&page=1&authorid=2---------------------------------------------------------------------------------------------------------------------...
阅读(116) 评论(0)

linux 目标文件(*.o) bss,data,text,rodata,堆,栈

学习于:http://blog.csdn.net/sunny04/article/details/40627311linux目标文件一个简单的程序被编译成目标文件后的结构如下:注:初始化为0在此文章中表示为未初始化,后面不再重复!!!特此标出。从图可以看出,已初始化的全局变量和局部静态变量保存在 .data段中,未初始化的全局变量和未初始化的局部静态变量保存在 .bss段中。验证代码如下:/***...
阅读(171) 评论(0)

Makefile中=与:=的区别

我先来总结一下:① 如果y = $(x),那么取x最后一次被赋值的值(不管最后赋值方式是”:=”还是”=”)② 如果y := $(x),那么取x上一次被赋值的值(不管最后赋值方式是”:=”还是”=”)下面用八个例子来证明: 官方的定义太官方了,大家可以直接举例证明容易理解。 ①:x = czg y = $(x) x = xyz all: @echo y = $(y) 结果: y =...
阅读(113) 评论(0)

TTL电平、COMS电平、232电平、USB电平的区别与转换方法

TTL电平、COMS电平、232电平、USB电平的区别与转换方法一、电平信号的主要特性电平     输入     输出特点  高低高低TTL大于2.0小于1.2V大于2.4V小于0.8V所有的主控制芯片引脚(包括串口的RX,TX,普通IO口)都是TTL电平,TTL拥有较低的噪声容限①CMOS大于0.7VCC小于0.3VCC大于0.9VCC小于0.1VCC比TTL的噪声容限高 逻辑1逻辑0 232-...
阅读(233) 评论(0)

gcc程序的编译过程和链接原理

一、C/C++文件的编译过程:先来看一下gcc的使用方法和常用选项 提示:gcc --help Ⅰ、使用方法:gcc [选项] 文件名Ⅱ、常用选项: 选项 含义 -v 查看gcc编译器的版本,显示gcc执行时的详细过程 -o Place the output into ;指定输出文件名为file,这个名称不能跟源文件名同名 -E Pr...
阅读(256) 评论(0)

s3c2440_soc.h

S3C2440所有芯片配置寄存器,学习此方法。/* 制 作:www.100ask.org深圳百问网科技有限公司 工程师:韦东山 当前版本:v1.0 */ #ifndef __S3C2440_SOC_H #define __S3C2440_SOC_H #define __REG(x) (*(volatile unsigned int *)(x))...
阅读(174) 评论(0)

理解ARM中断原理以及中断嵌套

学习于韦东山 ARM有七种模式,我们这里值讨论SVC、IRQ和FIQ模式 usr(用户模式)、fiq(快速中断模式)、irq(中断模式)、svc(管理模式)、abt(数据访问终止模式)、sys(系统模式)、und(未定义指令中止模式) ① 我们假设ARM核心有两根中断引脚(实际上是看不见的),一根叫irq pin,一根叫fiq pin。在ARM的cpsr中,有一个I位和一个F位,分别用来禁止IR...
阅读(198) 评论(0)

外设位宽为8、16、32时,CPU与外设之间地址线的连接方法

flash连接CPU时,根据不同的数据宽度,比如16位的NOR FLASH (A0-A19),处理器的地址线要(A1-A20)左移偏1位。为什么要偏1位?从软件和CPU的角度而言,一个地址对应一个字节,就是8位数据。这是肯定的,不要怀疑这点。 对于具体器件而言,它的位宽是一定的,所谓位宽,指的是“读/写操作时,最小的数据单元”──别说最小单元是“位”,一般设备上没有单独的“位操作”,修改位时通过把整...
阅读(3435) 评论(15)

判断机器大小端模式

简单介绍一下大小端模式:         像内核开发,网络开发,以及嵌入式开发都要涉及以位为单位来操作,所以都要考虑大小端问题。 大端模式:数据的高位,存放在地址的低位。 小端模式:数据的高位,存放在地址的高位。 介绍三种判断本机大小端模式的程序:① 通过位移操作#include #include #define panduan(x) (x>>1)?...
阅读(188) 评论(0)
51条 共4页1 2 3 4 下一页 尾页
    个人资料
    • 访问:342666次
    • 积分:7590
    • 等级:
    • 排名:第3224名
    • 原创:316篇
    • 转载:12篇
    • 译文:89篇
    • 评论:98条
    【目录索引】

    闲适音乐

    博客专栏
    最新评论

    Email: 457086306@qq.com