![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
marven
热爱ARM,热爱linux,热爱oracle 热爱嵌入式,热爱C/C ,热爱csdn。
展开
-
ARM-elf-gcc的C语言内嵌汇编语言
在用embest ide调试s3c44b0的时候,想在C环境下操作内部寄存器。查了很多资料可是编译始终通不过。照着书上__ASM格式还是错。后来经过一天一夜的努力,终于实现了,现在传上来大家一起研究一下~~ 网上说的都是80x86的内嵌汇编,跟据那上面的格式来编译是通不过的。还有 arm-elf-gcc和arm-linux-gcc的语法也是不同的。 刚开始时在网上看到一位仁兄写的调原创 2009-07-27 09:50:00 · 2096 阅读 · 0 评论 -
#define MenuWhat(n) {(U8 **)n,(sizeof(n)/sizeof(U8 *))}
在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。 sprintf 是个变参函数,定义如下: int sprintf( char *buffer, const char *format [, argument] ... ); 除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格转载 2010-08-23 14:40:00 · 1088 阅读 · 0 评论 -
C语言中字符数组和字符串指针分析
<br />这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么用到过C,虽然网上这类的文章也有很多,还是决定自己在这做个小总结,也算加深下自己的印象,写了下面的测试程序:<br /><br />#include <stdio.h> <br />int main(int argc, char *argv[])<br />{<br /> char day[15] = "abcdefghijklmn";<br />转载 2010-08-23 14:45:00 · 487 阅读 · 0 评论 -
到底什么啊句柄
所谓句柄实际上是一个数据,是一个Long (整长型)的数据。 <br /><br />句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。 <br /><br />从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个1转载 2010-08-23 14:57:00 · 423 阅读 · 0 评论 -
关于头文件文件包含的问题
有的时候,一个同文件里面包含了许多个头文件,C文件中都包含这个主的头文件即可 ,这样很方便。但是有的时候 在分头文件中声明一个函数的时候,会意想不到的出现很多错误,这个时候 只要将这个分头文件在主头文件中的位置调整到比较后面的位置即可。如:#include "fat.h"#include "Menu.h"<br />#include "OSFile.h"<br />#include "uart0.h"<br />#include "LCD.h"<br />#include原创 2010-08-23 14:33:00 · 537 阅读 · 0 评论 -
malloc函数用法
原型:extern void *malloc(unsigned int num_bytes); <br /> 用法:#i nclude <malloc.h>或#i nclude <stdlib.h> <br /> 功能:分配长度为num_bytes字节的内存块 <br /> 说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。 <br /> 当内存不再使用时,应使用free()函数将内存块释放。 <br /> malloc的语法是:指针名=(数据类型*)malloc(长度),(数原创 2010-08-23 14:38:00 · 2203 阅读 · 0 评论 -
编译与头文件
C语言中的.c和.h文件2009-06-29 09:30简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:<br />1.预处理阶段 <br />2.词法与语法分析阶段 <br />3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件 (.obj文件)<br />4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也转载 2010-08-23 15:18:00 · 2287 阅读 · 2 评论 -
内联函数
<br />1.内联相对于宏的优点<br /><br />2.为什么“inline”只是程序员对编译器的建议(而非强制命令)<br /><br />在C、C++中函数调用需要少量开销。有时候这少量开销积少成多,对程序性能造成影响。有时候函数本身很简单,函数调用的开销比执行函数内容本身的开销还大。C程序员一定知道可以采用宏(Macro)机制来改善上述情况。但是宏基本上是在预编译阶段做文本替换,因此它有以下缺陷:<br /><br />1.它无法进行类型检查;<br /><br />2.传入有副作用(side转载 2010-08-26 10:34:00 · 586 阅读 · 0 评论 -
嵌入式工程师笔试题目汇总
C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。<br /> 从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这是个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间在微机转载 2011-01-14 13:18:00 · 1656 阅读 · 0 评论 -
函数指针和指针函数
<br />【函数指针】<br /><br /> 在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。<br />1.函数指针定义<br />函数类型 (*指针变量名)(形参列表);<br />“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。原创 2010-08-23 15:17:00 · 490 阅读 · 0 评论 -
关于C/C++语言中头文件的使用的一些看法
一、 只有一个文件的情况先来看一下比较简单的情形,也就是只有一个文件的时候,一个程序是什么样子的。//main.c#include int main(int argc, char** args){ printf("Hello/n") ; return 0 ;}这个时候程序一目了然,我们很容易就可以看出它说了什么。二、 多个源代码文件的情况但是,随着我们要编写的程序的规模不断扩大,我们不得不把一个源代码文件拆分开,把具有一定功能的某些方法放到其它单独的源码文件中。比如像下面这样://main.转载 2010-08-23 15:03:00 · 651 阅读 · 0 评论 -
SDK消息循环机制
Windows下,每个线程都可以拥有一个消息队列,通常UI线程默认就拥有自己的消息队列,Work Thread需要自己调用PeekMessage来创建自己的消息队列。<br /> 消息是一个数据结构,下面是它的定义:<br />typedef struct tagMSG {<br /> HWND hwnd;<br /> UINT message;<br /> WPARAM wParam;<br /> LPARAM lPa转载 2010-08-23 14:57:00 · 560 阅读 · 0 评论 -
struct和typedef struct
分三块来讲述:1 首先: 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu;于是在声明变量的时候就可:Stu stu1;如果没有typedef就必须用struct Student stu1;来声明这里的Stu实际上就是struct Student的别名。另转载 2009-10-05 14:17:00 · 448 阅读 · 0 评论 -
函数指针和指针函数
【函数指针】 在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。 1.函数指针定义 函数类型 (*指针变量名)(形参列表); “函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“转载 2009-10-05 14:19:00 · 609 阅读 · 0 评论 -
extern "C"的用法...
C++中extern “C”含义深层探索 1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言, C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变转载 2009-10-05 14:27:00 · 450 阅读 · 0 评论 -
uc/os-ii的最高级就绪表
OSOSRdyTbl[0]的bit7-bit0对应于优先级7-0, OSOSRdyTbl[1]的bit7-bit0对应于优先级15-8, OSOSRdyTbl[2]的bit7-bit0对应于优先级23-16, OSOSRdyTbl[3]的bit7-bit0对应于优先级31-24, OSOSRdyTbl[4]的bit7-bit0对应于优先级39-32, OSOSRdyTbl[5]原创 2009-10-18 08:07:00 · 505 阅读 · 0 评论 -
MSDN中API参数说明前的[in]和[out]是什么意思
[In]是输入参数,也就是说从用户到系统,系统根据这个参数作处理[Out]是处理后系统返还给用户的其中[Out]也就是[O]与返回值不同,举个例子:bool test(int a, int& b){ b = a; return true;}这个函数的返回值需要一个bool型的,a是输入参数,b是输出参数,大体就这样:main(){int s;bool nRes = test(5,s);}原创 2010-01-25 08:52:00 · 1481 阅读 · 0 评论 -
BIOS执行位置的问题
看到CSDN上面问到一个问题,BIOS执行第一句的时候到底是在RAM中执行,还是在ROM中执行的。http://topic.csdn.net/t/20061215/10/5232444.html里面很多高手在讨论,有的人搬出最权威的书籍,有的自己做实验,甚至有人去量PCI和BIOS引脚的电平。看了这些回答,我很受用。首先,要知道ROM和RAM是统一编址的。那是不是上电后,在BIOS自检之前,BIOS将自己搬到RAM(内存)中去了呢,还是根本就是直接在BIOS里面取指令执行的呢?现在有两个疑问:原创 2010-08-10 09:53:00 · 2141 阅读 · 0 评论 -
typedef struct的理解
<br />于对typedef struct tagpoint{ float x, y; int z;}point,*ppoint; 首先可以分解为:typedef struct tagpoint{ float x, y;原创 2010-08-23 14:39:00 · 1047 阅读 · 0 评论 -
sprintf函数的用法
<br />在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。<br />sprintf 是个变参函数,定义如下:<br />int sprintf( char *buffer, const char *format [, argument] ... );<br />除了前两个参数类型固定外,后面可以接任意多转载 2010-08-23 14:44:00 · 436 阅读 · 0 评论 -
C语言测试是招聘嵌入式系统程序员
C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。<br /> 从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这是个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间在微机转载 2011-02-22 09:11:00 · 947 阅读 · 0 评论