
ARM语言基础
咕唧咕唧shuboLK
这个作者很懒,什么都没留下…
展开
-
CONST 精解
<br />C中CONST的使用: <br /> const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。 <br /> 虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面几个问题。 <br /> 问题:const变量 & 常量 <br /> 为什么下面的例子在使用一个const变量来初始化数组,ANSI原创 2010-06-26 19:45:00 · 997 阅读 · 0 评论 -
volatile关键字
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。使用该关键字的例子如下:int volatile nVint; 当要求使用volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即原创 2010-05-26 15:12:00 · 844 阅读 · 0 评论 -
sprintf系列函数
sprintf系列函数和可变参数函数 收藏 sprintf函数定义如下:int sprintf (char * szBuffer, const char * szFormat, ...) ;第一个参数是字符缓冲区;后面是一个格式字符串。Sprintf不是将格式化结果标准输出,而是将其存入szBuffer。该函数返回该字符串的长度。在文字模式程序设计中,printf ("The sum of转载 2010-05-29 17:06:00 · 6989 阅读 · 0 评论 -
vsprintf.c 源码
Goto sanos source index//// vsprintf.c//// Print formatting routines//// Copyright (C) 2002 Michael Ringgaard. All rights reserved.//// Redistribution and use in source and binary forms, with or witho原创 2010-05-29 17:02:00 · 4024 阅读 · 0 评论 -
void指针
void指针<br />指针有两个属性:指向变量/对象的地址和长度<br />但是指针只存储地址,长度则取决于指针的类型 <br />编译器根据指针的类型从指针指向的地址向后寻址 <br />指针类型不同则寻址范围也不同,比如: <br />int*从指定地址向后寻找4字节作为变量的存储单元 <br />double*从指定地址向后寻找8字节作为变量的存储单元 <br /><br />1.void指针是一种特别的指针 <br /> void *vp <br /> //说它特别是因为它没有类型 <br原创 2010-06-24 23:45:00 · 1014 阅读 · 0 评论 -
C语言与汇编语言混合编程应遵守的规则
<br />1、C语言与汇编语言混合编程应遵守的规则<br />ARM编程中使用的C语言是标准C语言,ARM的开发环境实际上就是嵌入了一个C语言的集成开发环境,只不过这个开发环境与ARM的硬件紧密相关。<br />在使用C语言时,要用到和汇编语言的混合编程。若汇编代码较为简洁,则可使用直接内嵌汇编的方法;否则要将汇编程序以文件的形式加入到项目中,按照ATPCS(ARM/Thumb过程调用标准,ARM/Thumb Procedure Call Standard)的规定与C程序相互调用与访问。<br />在C程原创 2011-02-14 20:21:00 · 5035 阅读 · 0 评论 -
c语言内嵌汇编语法
在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作。 F6j平坦软件园F6j平坦软件园1、简单的内嵌汇编 F6j平坦软件园例: F6j平坦软件园 __asm__ __volatile__("hlt");原创 2011-06-14 17:35:00 · 1975 阅读 · 1 评论 -
内存分配方式
内存分配方式内存分配方式有三种:[1] 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量, static 变量。[2] 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中 ,效率很高,但是分配的内存容量有限。[3] 从堆上分配,亦称转载 2011-06-14 16:46:00 · 1203 阅读 · 0 评论 -
C语言中的__attribute__机制
C语言中的__attribute__机制 来源: ChinaUnix博客 日期: 2008.09.25 15:52 (共有0条评论) 我要评论 GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以转载 2011-10-09 19:22:15 · 3326 阅读 · 0 评论 -
fread与read的区别
f是ANSI的C标准库。而后者的是UNIX下的系统调用。fread带有缓冲,是read的衍生,或者说fread是通过read实现的要想直接和硬件打交道,必须用readfopen/fread是C标准的库函数,操作的对象是: file streamopen/read是和操作系统有关的系统调用。操作的对象是: “file descriptor”fread返回的是一转载 2011-10-24 17:16:54 · 3644 阅读 · 0 评论 -
宏定义好处
define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利。 1 #define命令剖析 1.1 #define的概念 #define命令原创 2010-05-26 15:03:00 · 2492 阅读 · 0 评论 -
关于__irq 的使用
关于__irq 的使用关于__irq使用,首先看ARM公司的说明:ARM 编译器 armcc 支持的函数关键字和运算符。下表列出的关键字是 ARM 对 C 和 C++ 标准的扩展。 表中没有介绍不具备 ARM 编译器特有的行为或限制的标准 C 和 C++ 关键字。ARM 编译器支持的关键字扩展表: 关键字__a原创 2010-05-26 13:11:00 · 1414 阅读 · 0 评论 -
void
<br />1.概述<br /> 本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。<br /> 2.void的含义<br /> void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。<br /> void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义:<br /> void a;<br /> 这行语句编译时会出错,提示“illegal use of type 'vo原创 2010-06-24 23:50:00 · 1037 阅读 · 0 评论 -
__main() 和 main()(转载)
__main() 和 main()(转载)因为我们通常在BOOTLOADER中都已做好了比较细致的初始化工作,包括代码的搬运,所以我们最好别再调用库函数__main(),因为__main()作为ADS集成好的库函数,会对系统进行初始化设置,可能会与我们的初始化发生冲突,故在我们做好初始化后最好别调用__main()。仿真时若调了__main()且没设置entry会报警告,__main()库函数原创 2010-05-24 08:44:00 · 2474 阅读 · 0 评论 -
宏和CONST
使用宏更好,还是使用函数更好 这取决于代码是为哪种情况编写的。宏与函数相比有一个明显的优势,即比函数效率(并且更快),因为红可以直接在源代码中展开,而调用函数还需要而外的开销。但是宏一般比较小,无法处理大的、复杂的代码结构,而函数可以。此外宏需要逐行展开,因此宏每出现一次,宏的代码就要复制一次,这样程序就会变大,而使用函数不会是程序变大。用CONST说明常量有什么好处原创 2010-05-26 21:16:00 · 1350 阅读 · 0 评论 -
typedef
用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量; 以下则可行: typedef char* PCHAR; PCHAR pa, pb; 用途二:转载 2010-05-27 11:13:00 · 942 阅读 · 0 评论 -
内嵌汇编和内联汇编的使用
有时为了高效,有时为了直接控制硬件,有些模块我们不得不直接用汇编语言来编写,并且对外提供调用的接口,隐藏细节,这其实就是内联汇编。如何使用内联汇编?我们就以 GCC 为例,一窥其中奥秘! 一、关键字 如何让 GCC 知道代码中内嵌的汇编呢? 借助关键字!来看下面的例子: __asm__ __volatile__("hlt"); __asm__ 表示后面的代码为内嵌汇编,as原创 2010-05-26 11:39:00 · 3763 阅读 · 0 评论 -
__forceinline, inline,__inline的详细说明
inline function_declarator; __inline function_declarator; // Microsoft相关__forceinline function_declarator; // Microsoft相关__inline与inline等同。inline和__inline通知编译器将该函数的内容拷贝一份放在调用函数的地方,这称原创 2010-05-26 12:52:00 · 8275 阅读 · 0 评论 -
inline
一、inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。 表达式形式的宏定义一例: #define ExpressionName(Var1,Var2) ((Var1)+(Var2))*((Var1)-(Var2)) 为什么要取代这种形式呢,且听我道来: 1. 首先谈一下在C中使用这种形式宏定义的原因,C语言是一个效率很高的语言,原创 2010-05-26 13:02:00 · 919 阅读 · 0 评论 -
#include
今天上计算方法这课时觉得无聊至极,于是拿出C++编程之道来看了看。。无意之中看到了#include va_list,va_start,va_end等东西,不知是怎么用的,于是很想解决。。 课后速回到宿舍,打开电脑一查才 知道原来是:定义成一个可变参数列表的指针: 于是写下了下面的一小程序加以运用(开发环境为vs2005) #include #include转载 2010-05-27 11:47:00 · 979 阅读 · 0 评论 -
extern "C"
extern "C"extern "C"包含双重含义,其一:被它修饰的目标是“extern”的;其二:被它修饰的目标是“C”的。1)被extern “C”限定的函数或变量是extern类型的; extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其他模块原创 2010-05-27 12:05:00 · 922 阅读 · 0 评论 -
关于变量在存储中的定位
变量和值在内存中的存储位置一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分 配方式倒是类似于链表,呵原创 2010-05-26 18:02:00 · 1142 阅读 · 0 评论