C语言基础篇
liuxd3000
Hello World!
有技术问题可以发邮件[email protected]
wx:liuxd3000
qq:343935622
展开
-
嵌入式中指针几个简单却常见的用法
用法一:绝对地址访问:1.1:#define XBYTE ((unsigned char volatile xdata *) 0)#define MDrv_WriteByte( u16Reg, u8Value ) (XBYTE[u16Reg] = u8Value) 1.2; #define FVAR(object, addr) (*((obj原创 2008-07-13 15:17:00 · 2254 阅读 · 0 评论 -
关于C语言中对数组取址的问题
关于C语言中对数组取址的问题,详见补充: 如下:定义一个数组INT8U a[4];然后对它进行强制转换(暂时不用考虑大小端的问题啊),有三种写法:1,*(INT32U *)a;2,*(INT32U *)(&a[0]);3,*(INT32U *)(&a);请问第3种写法是否正确?我认为是错误的,但是为什么编译和实际运行都没有问题?如果是正确的,该如何理解? 解答:原创 2013-02-21 11:23:49 · 1656 阅读 · 0 评论 -
等待队列和工作队列
转自:http://blog.csdn.net/ralph_sqd/article/details/6081462对这2个容易混淆的队列做简单概念上的区别,至于怎么用,资料一大堆,不多说,等需要的时候再去找吧 等待队列在内核中有很多用途,尤其适合用于中断处理,进程同步及定时。我们在这里只说,进程经常必须等待某些事件的发生。例如,等待一个磁盘操作的终止,等待释放系统资源,或者转载 2013-02-21 17:08:00 · 787 阅读 · 0 评论 -
linux驱动面试题目汇总
1、linux驱动分类2、信号量与自旋锁3、platform总线设备及总线设备如何编写4、kmalloc和vmalloc的区别5、module_init的级别6、添加驱动7、IIC原理,总线框架,设备编写方法,i2c_msg8、kernel panic9、USB总线,USB传输种类,urb等10、android boot 流程11、android init解转载 2013-02-27 18:53:13 · 741 阅读 · 0 评论 -
linux 下platform设备和驱动注册的先后顺序
哪个先注册应该貌似看源码先注册驱动如果没有设备,那probe不会被执行int driver_probe_device(struct device_driver * drv, struct device * dev){ if (drv->bus->match && !drv->bus->match(dev, drv)) return -ENODEV; dev->driver = drv原创 2013-02-28 10:44:07 · 2553 阅读 · 0 评论 -
poll()函数的使用
poll函数用于监测多个等待事件,若事件未发生,进程睡眠,放弃CPU控制权,若监测的任何一个事件发生,poll将唤醒睡眠的进程,并判断是什么等待事件发生,执行相应的操作。poll函数退出后,struct pollfd变量的所有值被清零,需要重新设置。示例是使用poll函数来监测按键的输入--------------------------------------------------原创 2013-03-01 11:26:11 · 1415 阅读 · 0 评论 -
linux下spi驱动分析
内核版本:linux-2.6.29 主要的几个结构platform_device platform_driver s3c24xx_spi spi_master spi_bitbang spi_device spi_driver spidev_data s3c_spi_info第一步:注册platform_device在arch/arm/mach-s3c2410/mach-qt2410.c 中原创 2013-10-31 23:24:34 · 997 阅读 · 0 评论 -
linux设备模型之spi子系统
linux设备模型之spi子系统===============================本文系本站原创,欢迎转载!转载请注明出处:http://www.cnblogs.com/gdt-a20=============================== 相比于前面介绍的i2c子系统,spi子系统相对简单,和i2c的结构也很相似,这里主要介绍一下平转载 2013-11-06 14:41:33 · 967 阅读 · 0 评论 -
弱符号与强符号概念
胡是弱符号与强符号概念弱符号与强符号概念链接过程实质上就是把不同目标文件粘在一起,对不同目标文件中定义或引用的相同名字进行决议resolve和绑定binding。符号的分类如下:定义在本目标文件中的全局符号,可以被其它文件引用。在本目标文件中引用的全局符号,却没有定义在本目标文件,这一般叫做外部符号(External Symbol),转载 2013-11-12 10:06:49 · 1130 阅读 · 0 评论 -
静态链接库和动态链接库
我们可以创建一种文件里面包含了很多函数和变量的目标代码,链接的时候只要把这个文件指示给链接程序就自动地从文件中查找符合要求的函数和变量进行链接,整个查找过程根本不需要我们操心。这个文件叫做 “库(Libary)”,平时我们把编译好的目标代码存储到“库”里面,要用的时候链接程序帮我们从库里面找出来。静态链接库: 在早期库的组织形式相对简单,里面的目标代码只能够进行静态链接,所以我们转载 2013-11-12 13:20:35 · 1156 阅读 · 0 评论 -
c语言可变参数 ...
#ifdef DEBUGPRINT_INFO(x) printk(x,...)#elsePRINT_INFO(x) #endif原创 2014-01-02 11:09:04 · 846 阅读 · 0 评论 -
MIN(x,y) MAX(x,y)
#define min(x,y) ({ \ typeof(x) _x = (x); \ typeof(y) _y = (y); \ (void) (&_x == &_y); \ _x #define max(x,y) ({ \原创 2014-01-06 14:09:59 · 1607 阅读 · 0 评论 -
#pragma once与 #ifndef的区别
原文地址::http://www.cppblog.com/szhoftuncun/archive/2007/10/28/35356.html类似文章地址::http://www.cnblogs.com/hokyhu/archive/2009/03/30/1425604.html为了避免同一个文件被include多次1 #ifndef方式2 #pragma once方式转载 2014-01-23 17:07:07 · 686 阅读 · 0 评论 -
uIP与LWIP的区别
uIP是专门为8位和16位控制器设计的一个非常小的TCP/IP栈。完全用C编写,因此可移植到各种不同的结构和操作系统上,一个编译过的栈可以在几KB ROM或几百字节RAM中运行。uIP中还包括一个HTTP服务器作为服务内容。 uIP是专为8位和16位的嵌入式微控制器设计的微型TCP/IP协议栈, 它采用BSD授权(这里可以获得完整的BSD许可证), 具有良好的原创 2014-05-15 16:55:19 · 15560 阅读 · 1 评论 -
linux audio codec driver 结构
本文以max98088为参照设备进行。我自己也在学习audio, 本着多多交流,相互进步的原则写下流程,欢迎大家来拍砖, 学习中有不正确的地方还请指出来。大体结构: cpu_dai-------指的是I2C通路.codec_dai-----codec的功能,如录音放音参数。codec_dev-----解码设备,重点platform转载 2014-08-08 10:29:45 · 2558 阅读 · 0 评论 -
在系统中增加一个可唤醒中断--同时说明platform_device &platform_driver
在系统中增加一个可唤醒中断--简单实例分类: C++学习 项目调试2013-07-09 17:51 531人阅读 评论(0) 收藏 举报android kernel inter 在系统休眠的时候3G来电或者短信需要唤醒系统,使系统resume。从3G模块手册看到有WAKE#脚,当收到来电或者SMS时这个脚会有0.5S的拉低,就是cp_wakeup_ap,用转载 2015-02-15 13:54:05 · 1175 阅读 · 0 评论 -
VIA深圳linux驱动软件工程师面试试题
1. 大端与小端的定义及0x12345678在内存中的存放顺序;2. 去掉字符串前面的空格的lib函数的实现;(如:原串为 " helloworld",输出为"helloworld")3. char * p = malloc(5); strcpy(p,"hello"); free(p); 请问以上程序有没有问题?但是为什么其在长时间运行并没有出现问题原创 2013-02-21 13:47:35 · 2434 阅读 · 1 评论 -
大端模式和小端模式
大端格式:在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中:小端格式:与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。如 请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1解答:int checkCPU( ){ {原创 2013-02-21 13:20:05 · 726 阅读 · 0 评论 -
C语言中的回调函数(函数指针)
#include static int Test1();static int Test2(int num);typedef int(*HaHa)(); //***1111*****typedef int(*CallBack)(int num);int Test1(){ printf("%s/n","Hello world!");转载 2008-07-12 16:31:00 · 1044 阅读 · 1 评论 -
ELF文件和BIN文件
文件的内容:1. BIN文件是 raw binary 文件,这种文件只包含机器码。2. ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。所以ELF文件的体积比对应的BIN文件要大。文件的执行:1. 执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行; FILE *fp = fopen("vmli原创 2012-10-31 16:08:21 · 1036 阅读 · 0 评论 -
strcpy和memcpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。原创 2012-10-25 10:26:03 · 499 阅读 · 0 评论 -
KEIL MDT 开发stm32F103ze Code RO-data RW-data ZI-data
字节 8位半字 16位字 32位Code, RO-dataRW-data,ZI-dataCode为程序代码部分RO-data 表示 程序定义的常量 const temp;RW-data 表示 已初始化的全局变量ZI-data 表示 未初始化的全局变量Program Size: Code="18248" RO-data=320 RW-dat原创 2012-11-02 16:13:34 · 1551 阅读 · 0 评论 -
strlen与sizeof区别
#include "stdio.h"#include "string.h"void main(){char aa[10];printf("%d",strlen(aa));printf("%d",sizeof(aa));}程序运行得到结果是strlen(aa)=15.sizeof(aa)=10;这是怎么回事呢?strlen是有效字符串的长度,不包含‘\0’,与初始化有原创 2012-10-25 10:34:59 · 488 阅读 · 0 评论 -
NVIC_Configuration
void NVIC_Configuration(void){ NVIC_InitTypeDef NVIC_InitStructure;#ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM,原创 2012-11-04 23:40:58 · 7036 阅读 · 0 评论 -
NVIC_Configuration 中使能SysTick_IRQn
void NVIC_Configuration(void){ NVIC_InitTypeDef NVIC_InitStructure;#ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM,原创 2012-11-05 00:54:37 · 5437 阅读 · 1 评论 -
手机AT指令 AT+CMGS发信息
最近在忙一个手机AT指令的项目,就是电脑通过蓝牙串口(无线)发送AT指令控制手机,比如给手机接受与发送短信(AT+CMGR AT+CMGS),给手机打电话(ATD110),获取手机电话本(AT+CPBR),手机类型(AT+CGMI)···· 这2天发送短信把我整惨了,网上AT+CMGF=0OKAT+CMGS=18>0011000D91683105114501F5000转载 2012-10-26 10:34:11 · 15616 阅读 · 0 评论 -
我对STM32F10x NVIC中断优先级的理解
NVIC中断优先级的理解 CM3支持硬件中断嵌套,分为抢占式优先级和亚优先级,使用规则主要有,抢占优先级高级别的可以打断低级别的,同一级别的抢占优先级同时发生时,亚当优先级高的先发生中断,若是相同,则按硬件排列顺序发生。若是有一个亚优先级正在执行中断,同一级别的其它亚优先级发生时,则先挂起,等此中断执行完再执行! 从库函数中找到优先级分组模式:#define NVIC原创 2012-11-05 10:02:38 · 3848 阅读 · 0 评论 -
STM32F10X_LD STM32F10X_MD STM32F10X_HD STM32F10X_CL宏定义的选择
//=====================================================================//TITLE:// STM32F10X_XX宏定义的选择//AUTHOR:// norains//DATE:// Tuesday 12-October-2010//Environment:// KE原创 2012-11-04 23:39:40 · 20211 阅读 · 1 评论 -
stm32读写SD卡的问题
1, MCU读写SD卡一个块是512Byte,请问这个块的大小固定的吗?2.MCU读写一个块,例如第9块,请问这个块是虚块吗?写数据之前需要进行坏块检测吗?3.MCU读写SD卡,可以对其进行命名吗?像有文件系统一样进行命名。知道是请回答,谢谢。原创 2012-11-19 18:20:47 · 3655 阅读 · 0 评论 -
code RO-data RW-data ZI-data
Code为程序代码部分RO-data 表示 程序定义的常量(如:const temp等);RW-data 表示 已初始化的全局变量ZI-data 表示 未初始化的全局变量,以及初始化为0的变量Program Size: Code="18248" RO-data=320 RW-data=260 ZI-data=3952 Code, RO-data,RW-data ....原创 2012-11-21 11:21:25 · 1754 阅读 · 0 评论 -
keil mdk 常见警告解析
1,warning Deprecated declaration/函数/ - give arg types该函数如果没有参数就要在括号里加“void”例如:函数定义void TP_GetAdXY(){ int adx,ady; adx=Read_X(); ady=Read_Y(); //*x=adx; //*y=ady;原创 2012-11-21 09:54:20 · 6944 阅读 · 0 评论 -
堆与栈的区别
一、预备知识―程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)― 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) ― 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局转载 2013-03-04 09:28:58 · 576 阅读 · 0 评论 -
strcpy()失败的原因是什么?
定义如下,分析失败的原因是什么?void loop(void ){ char *p =(char *)malloc(5); strcpy(p,"hello"); free(p);}调用以上函数失败的原因是是什么?原创 2013-03-04 13:05:34 · 2284 阅读 · 5 评论 -
nxp LPC824 gpio中断配置指南手册
最近手头上接到一个LPC824的单片机的项目,娘的,nxp的lib及源码用的人太少了,根本无法与stm32相关的资源相比,搞个gpioo中断用了我两天时间,心里那个火啊~~~~,问了周立功的技术支持,唉,也是强差人意,什么事看来都得自己好研究才行啊。回头说正事,要加一个gpio中断,先参考了一个系统里的INT0,其配置如下: 1. gpio4 做为PIN_INT0_IRQn...原创 2019-03-29 17:37:23 · 1962 阅读 · 0 评论