当前搜索:

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

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

undefined reference to '_modsi3'和`__udivdi3'

【问题描述】:自己实现printf函数来方便裸板调试打印的时,在printf函数中用到了求余%和除法/操作: 结果报错: 【问题分析】:ARM是精简指令集,对求余和除法操作基本上不支持,所以应该尽量避免上述操作。【解决方法】:linux内核源码linux/arch/arm/lib/lib1funcs.S实现支持除法、求模操作等操作的库函数,下载地址:https://gitee.com/zgdy/...
阅读(26) 评论(0)

自己实现printf函数

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

使用ldr命令注意事项

今天犯了一个小错误,调试了几个小时;最后重新分析了几遍反汇编才发现。万丈高楼平地起、勿以浮沙驻高台。 错误代码:.text .global _start _start: b reset ldr pc,=und_addr ldr pc,=swi_addrund_addr: .word undefswi_addr: .word swi_handleundef:...
阅读(44) 评论(0)

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

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

ARM与Thumb之间的状态转换

由于Thumb指令在某些特殊情况下可能比ARM指令更有效,所以它在很多方面得到了广泛的应用。但是Thumb知识ARM指令集的一个子集,它不能独立组成一个应用系统,所以在很多情况下应用程序需要二者的混合编程,这就必然存在ARM与Thumb状态之间函数调用的问题。下面将分别详细介绍。1)      状态切换的实现ARM/Thumb之间的状态切换是通过一条专用的转移交换指令BX来实现的。BX指令以通用寄...
阅读(97) 评论(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,那么不足的部分填充...
阅读(163) 评论(0)

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

原文内容:http://www.100ask.org/bbs/forum.php?mod=viewthread&tid=16231&page=1&authorid=2---------------------------------------------------------------------------------------------------------------------...
阅读(119) 评论(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))...
阅读(177) 评论(0)

S5PV210启动过程分析

一、iROM启动方式简介    九鼎X210开发板的SoC为三星S5PV210,S5PV210采用iROM启动方式进行启动,通过查阅三星官方S5PV210文档s5pv210_irom_applicationnote_preliminary可知,iROM启动方式支持从MoviNAND/iNand, MMC/SD Card ,pure Nand, eMMC, eSSD, UART and USB等存储...
阅读(719) 评论(0)

判断机器大小端模式

简单介绍一下大小端模式:         像内核开发,网络开发,以及嵌入式开发都要涉及以位为单位来操作,所以都要考虑大小端问题。 大端模式:数据的高位,存放在地址的低位。 小端模式:数据的高位,存放在地址的高位。 介绍三种判断本机大小端模式的程序:① 通过位移操作#include #include #define panduan(x) (x>>1)?...
阅读(188) 评论(0)

安装交叉编译工具链

关于ARM交叉编译工具链的介绍与下载请点我跳转一、简介:     简单介绍一下:交叉编译器一般来说是针对某个特定版本的uboot和kernel来专门制作的,也就是说,如果一个开发板的uboot和内核版本确定了,那么对应的编译器版本也就确定了。       ① 因为随着时间的推移,C/C++语言的标准每隔一段时间就更新扩展一次,导致的结果是修改uboot和kernel的那帮工作人员在使用新标准的语言...
阅读(220) 评论(0)

[置顶] 嵌入式Linux开发常用命令总结

1.打开pc服务:win+r-> services.msc 2.将命令输入到文件以后:echo "ifconfig eth0 192.168.2.3" >> /etc/init.d/rcS 3.虚拟机挂载到开发板根文件系统:mount -t nfs -o nolock 192.168.2.3:/work/nfs_root/test /mnt 4.putty的复制粘贴鼠标左键-复制 鼠...
阅读(270) 评论(0)

VMware虚拟机状态已挂起无法恢复解决方案

问题简述:虚拟机挂起了两个系统,在页面中不小心删除了一个,后面打开虚拟机其中一个系统找不到。 ①在虚拟机文件所在目录下面,找到扩展名为vmss的文件并删除该文件。②重启该系统虚拟机...
阅读(531) 评论(0)

VMware没有虚拟网卡出现

——问题概述:相信大家在因各种原因删除卸载vm虚拟机后,突然有一天想要重装vm在本机做一个其他类型的系统来满足一些学习工作需求,但是安装完了以后发现没有虚拟网卡无法桥接!,在百度谷歌上苦苦搜索,在各大论坛苦苦询问,并没什么卵用……——问题分析:●下载的vm虚拟机安装包是精简版。 ●以前安装过vm虚拟机,没卸载删除干净。(这是重点!) ●重做过系统。——解决办法:①下载vm虚拟机完整版安装包,自己...
阅读(2235) 评论(5)
35条 共3页1 2 3 下一页 尾页
    个人资料
    • 访问:345114次
    • 积分:7619
    • 等级:
    • 排名:第3189名
    • 原创:316篇
    • 转载:12篇
    • 译文:89篇
    • 评论:98条
    【目录索引】

    闲适音乐

    博客专栏
    最新评论

    Email: 457086306@qq.com