ARM C嵌入式编程中的几个关键字
ARM C嵌入式编程中的几个关键字
1、访问绝对地址的内存位置:
#define pISR_EINT0 (*(unsigned *) (_ISR_STRATADDRESS+0x74))
上述语句把无符号整数_ISR_STRATADDRESS+0x74强制转换为指针,指向RAM,用下面的语句可以访问它:
pISR_EINT0 = (int)Eint0_ISR
为了访问一个绝对地址,把一个整形数强制转换(typecast)为一指针。
注:第一个*表间址、第二个*表强制转换(看的不是太明白)
2、__irq:
为了方便使用高级语言编写异常处理函数,ARM编译器对异常处理函数做了特定扩展,只要使用关键字_irq,这样编译出来的函数就满足异常响应对现场保护和恢复的需要;
3、编写中断服务程序的一些基本原则:
√避免在中断服务程序中做浮点运算:好的中断服务程序应该遵循短小有效这一原则,在中断服务程序中做浮点运算大大违背这一原则,同时有些处理器/编译器就是不允许在中断服务程序中做浮点运算;
√中断服务程序不能有返回值:所以中断服务程序都定义为返回类型为void,即:void _irq Eint0_ISR(void);
√中断服务函数不能传递参数:故参数列表为void,即:void _irq Eint0_ISR(void);
4、Static:
一个static变量,其实就是全局变量,只不过它有作用域,它可用于保存变量所在函数被类调用期间的中间状态,比如:
int cCout()
{
Static int loop = 0;
.......
loop++;
.......
}
loop变量的值会跟随着函数的调用次数而递增,函数退出后,loop的值还存在,只是loop只能在函数中才能被访问(函数作用域),而loop的内存 空间也只会在函数第一次被调用时才会被分配和初始化,以后每次进入函数,都不为static分配了,而直接使用上一次的值。在模块内,一个被声明为静态的 函数只可被这一模块内的其他函数调用,模块外其它函数无权访问,是一个本地全局变量。
5、Constant:
将一个变量或对象定义成constant类型,则定义之后不能被更新(可读不可写),即在定义或说明类型时必须给他一个初始值。
几种须要注意的地方:
√如果const位于星号(*)的
相关文档:
#include <stdio.h>
#include <string.h>
#include <math.h>
#define BASE 10
int intlen(long n);
int main()
{
int i, j, num, sz;
i = j = num = sz = 0;
if (!scanf("%d", &num) || num <= 0) {
printf("invalid input\n");
retu ......
我从数据库动态读取2个父节点:
111
a
a1
b
b1
c
&n ......
数组是类型相同的对象的序列,其中的对象称为数组元素。也可以将数组想像成一连串的用下标值编号的相邻存储区。
可能在某些编程语言中,一个下标变量是不允许超出数组定义中所设的界限的。但是在C和C++中,数组是没有这种安全措施的。下面先来看看数组下标越界的几种异常结果。
&nb ......
一、屏幕操作函数
1. clrscr()清除字符窗口函数
2. window()字符窗口函数
3. gotoxy()光标定位函数
4. clreol() 清除光标行尾字符函数
5. insline() 插入空行函数
6. delline() 删除一行函数
7. gettext() 拷进文字函数
8. puttext() 拷出文字函数
9. movetext() 移动文字函数
二、字符属性函数
10. textmode( ......
//输入参数:*str 搜索字符串
// subStrLen 用于返回找到的最大子字符串长度
//返回:找到的最大子字符串指针
char * findMaxSubStr(char *str, int &subStrLen){
char *subStr;
char *p = str;
int index[256] ;
for (int ix = 0; ix < sizeof(index)/sizeof(index[0]); ix++)
{
in ......