自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 资源 (1)
  • 收藏
  • 关注

原创 应届生笔试编程题

第一题:查找有一个数组a[n],数组中的数据是一个无规律的递增数,请写出一个函数用最高效的方式判段关键字num是否在这个数组中。如果存在则返回该数所在数组中的位置,如果不存在则返回0XFFFFFFFF(假定数组长度小于这个值)。例如:Int a[]={1,2,3,4,555,666,888,......,444444};FindNumber(a,sizeof(a)/sizeof(a

2015-10-31 12:33:43 1867 3

转载 全面解析《嵌入式程序员应该知道的16个问题》

1、预处理器(Preprocessor)2、如何定义宏3、预处理器标识#error的目的是什么?4、死循环(Infinite loops)5、数据声明(Data declarations)6、关键字static的作用是什么?7、关键字const有什么含意?8、Volatile的使用9、位操作(Bit manipulation)10、访问固定的内存位置(Acces

2015-10-22 23:53:30 768

原创 面试中一些基本概念的辨析

一、const与#define相比有什么不同?答案:1.const定义的只读变量在程序运行过程中只有一份拷贝(因为它是全局的只读变量,存放在静态区),而#define定义的宏常量在内存中有若干个拷贝。2.#define宏是在预编译阶段进行替换,而const修饰的只读变量是在编译的时候确定其值。3.#define宏没有类型,而const修饰的只读变量具有特定的类型(编译器可以对后

2015-10-21 23:27:21 921 3

原创 GetMemory的典型例子分析

NO.1void GetMemory(char *p){   p = (char*)malloc(100);}void Test(void){   char *str = NULL;   GetMemory(str);   strcpy(str, "hello world");   printf(str);}//运行Test函数后会是什么样的结果?解析如下:/*

2015-10-20 11:39:28 475

原创 全局变量、局部变量、静态局部变量及静态全局变量的区别

一、程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分:1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(stat

2015-10-19 13:42:20 535

转载 三种字符串逆序的方法

转载自http://blog.csdn.net/h971379154/article/details/47998423//字符串逆序 #include #include //新创建等长度的数组,将原数组从末字符一次放入新数组char *Reverse_String(char *src){ if(NULL==src) return src; char *p =

2015-10-19 11:24:21 954

转载 字符串回文和数字回文

转载自http://blog.csdn.net/h971379154/article/details/481617511.字符串回文判断  所谓字符串回文就是逆序后与原来字符串相同,如“abccba”就是回文字符串。  使用递归求解,递归结束情景: 字符串长度可能会奇数或偶数:             (1)如果字符串长度是奇数,字符串会剩下

2015-10-19 10:36:39 480

转载 常见字符串操作函数

转载自http://blog.csdn.net/h971379154/article/details/48846755//常见字符串操作函数内部实现#include size_t strlen(const char *s)//char型指针间距可表示长度{ const char *sc; for (sc = s; *sc != '\0'; ++sc); ret

2015-10-18 19:04:31 398

转载 链表基本操作

转载自http://blog.csdn.net/h971379154/article/details/48860495#include #include #include typedef struct node{ int data;//数据域 struct node *pNext;//指针域}Node,*pNode; // Nodestruct node p

2015-10-18 18:32:44 373

原创 查找(顺序,有序)总结

一、代码示例#include int Binary_Search_Recursion(int *a,int low,int high,int key);int F(int i);/*顺序查找,a为数组,len为要查找的数组个数,key为要查找的关键字*/ //代码1int Sequential_Search(int *a,int len,int key){ int i; fo

2015-10-08 15:37:15 902 1

原创 斐波那契的递归函数

#include #include /*int main()//此为常规方法{ int i; int a[32]; a[0]=0; a[1]=1; printf("%d ",a[0]); printf("%d ",a[1]); for (i=2;i<40;i++) { a[i]=a[i-1]+a[i-2]; printf("%d ",a[i]); } return

2015-10-06 16:31:31 597

转载 二分法查找的两种方法

转载自http://blog.csdn.net/h971379154/article/details/48845355#include int BinSearch_Recursion(int Array[],int low,int high,int key);//递归方法int BinSearch_Recursion(int Array[],int len,int key){

2015-10-01 11:36:23 2870

原创 C/C++值传递、指针传递和引用传递详解

一、实例//下面5个函数哪个能成功进行两个数的交换?#include using namespace std; void swap1(int p, int q){ int temp; temp=p; p=q; q=temp;} void swap2(int *p, int *q){ int *temp; *temp

2015-09-28 16:50:22 2140

原创 全面总结sizeof的用法(定义、语法、指针变量、数组、结构体、类、联合体、位域位段)

一、前言编译环境是vs2010(32位)。#include    #include    #includeusing namespace std;typedef struct{    int a;    char b;}A_t;typedef struct{    int a;    char b;    char c;}B_t;

2015-09-08 13:40:46 7875 7

转载 C++用冒号(:)和双冒号(::)用法

1.冒号(:)用法(1)表示机构内位域的定义(即该变量占几个bit空间)typedef struct _XXX{          unsigned char a:4;          unsigned char c;} ; XXX(2)构造函数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。

2015-09-01 22:30:42 765

原创 main/int main/void main

main()是省略了返回值类型,C语言会默认认为成main的类型为int,在main()的函数体内要返回一个值,如return 0; 而void main()的返回值是void类型,也就是说没有返回值。这样在main()的函数体内你就不用写return 0;或者return 1;之类的返回语句。 在一个程序中,可以说你看不出两者的差别,因为main()是C语言的入口点,入口点如果返回了程序

2015-09-01 18:39:23 696

原创 局部和全局变量

从解析一段程序入手,程序如下:#include static int var1=0;int var2=3;int var3=6; void f(int var2){    static int i=0;    int j=9;    int var1;    i++;    j--;    var1=5;    var2=6;    va

2015-08-30 15:08:35 451

转载 sizeof 和 strlen 的区别

char str[20]="0123456789"; int   a=strlen(str); /*a=10;strlen 计算字符串的长度,以\0'为字符串结束标记。 int   b=sizeof(str); /*b=20;sizeof 计算的则是分配的数组str[20] 所占的内存空间的大小,不受里面存储的内容影响==================================

2015-08-22 09:19:42 426

原创 assert_param的应用

在STM32的固件库,到处都可以见到assert_param()的使用。一开始见到这玩意就被打蒙了,不晓得它存在的价值,各种查询,理解综合如下。如果打开任何一个例程中的stm32f10x_conf.h文件,就可以看到实际上assert_param是一个宏定义;在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数。所谓有效的参数是指满足规定范围的参数,比如某个参数的取值范围只能是小于7的

2015-11-19 10:15:53 819

转载 STM32的中断与事件

这张图是一条外部中断线或外部事件线的示意图,图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套.图中的蓝色虚线箭头,标出了外部中断信号的传输路径,首先外部信号从编号1的芯片管脚进入,经过编号2的边沿检测电路,通过编号3的或门进入中断挂起请求寄存器,最后经过编号4的与门输出到NVIC中断检测电路,这个边沿检测电路受上升沿或下降沿选择寄存器控制,用户可以使用这两个寄存器控制需要

2015-11-04 22:50:57 716

原创 【C语言】关于宏定义中#和##符号的使用和宏定义展开问题

1.#在英语里叫做pound,在C语言的宏定义中,一个#表示字符串化,两个#代表concatenate。2.实例一:#include void quit_command(){ printf("I am quit command\n");} void help_command(){ printf("I am help command\n");} stru

2015-09-18 11:37:25 1219

转载 C/C++静态变量static详解

静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值。    静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见。用法1:函数内部声明的static变量,可作为对象间的一种通信机制    如果一局部变量被声明为static,那么将只有唯一的一个静态分配的对象,它被用于在该函数的所有调用中表示这个变量。这个对象将只在

2015-09-12 08:07:29 20033 1

转载 重载函数

重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。 两个重载函数必须在下列一个或两个方面有所区别:1、函数有不同参数。2、函数有不同参数类型,C++的这种编程

2015-08-30 14:59:18 514

转载 c++ 字符串常量

字符串常量,之所以称之为常量,因为它可一看作是一个没有命名的字符串且为常量,存放在静态数据区。这里说的静态数据区,是相对于堆、栈等动态数据区而言的。静态数据区存放的是全局变量和静态变量,从这一点上来说,字符串常量又可以称之为一个无名的静态变量,因为"Hello world!"这个字符串在函数 s1和s2 中都引用了,但在内存中却只有一份拷贝,这与静态变量性质相当神似。cha

2015-08-20 11:45:29 2869

转载 C++ 常量

常量是一种标识符,它的值在运行期间恒定不变。C语言用 #define来定义常量(称为宏常量)。 C++ 语言除了 #define外还可以用const来定义常量(称为const常量)。 1 为什么需要常量  如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦? (1)程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思, 用户则更加不知它们从何处来、

2015-08-20 10:36:41 359

转载 C++ 复合数据类型--枚举型用法深解

1、枚举enum的用途浅例      写程序时,我们常常需要为某个对象关联一组可选alternative属性.例如,学生的成绩分A,B,C,D等,天气分sunny, cloudy, rainy等等。      更常见的,打开一个文件可能有三种状态:input, output和append. 典型做法是,对应定义3个常数,即:      const int input = 1;

2015-08-20 09:27:38 637

转载 UIP协议栈六 WEB

程序使用了作者写的webserver的demo程序,添加了相应的注释。说一下整个web服务器实现的流程。uip的web服务的回调函数是/webserver/httpd.c中httpd_appcall(void)。接着进入了handle_connection函数。[cpp] view plaincopystatic void  handle_c

2015-08-19 14:59:19 1356

转载 UIP协议栈四

写到这里本来不想再写下去了,不过还是有些没明白的地方。比如,我只看到了设备接收对方发过来的数据包,但是,UIP如何将数据包发送出去?还有那个uip_process()函数好长,很多没弄明白,今天继续翻看了另外一些代码,发现一个宏UIP_APPCALL。    都是自己的疏忽,在uip文档里面搜索UIP_APPCALL就提到了,不同的事件调用不懂的函数,UIP_APPCALL被定义成一个宏,当要

2015-08-18 22:09:35 857 1

转载 UIP协议栈三

下面说说网卡如何与UIP协议交互中的ICMP情况,首先必须知道什么叫ICMP,在百科上的介绍是:   ----------------------------------ICMP------------------------------------------------------    ICMP是(Internet Control Message Protocol)Internet控

2015-08-18 22:06:42 670

转载 UIP协议栈二

1. 网卡如何与uIP协议交互(包括arp, icmp等)   在我看来,CP2200提供了读取网络数据的能力,而UIP提供的是一种如何封装网路数据的策略。对用户数据不断封装,最后交给CP2200发送,在UIP协议中有一个uip_buf缓冲用来接收和发送数据。(转自:维库电子开发网>电子通列表 > 协议栈)   ARP请求和应答在UIP协议中定义了一个ARP的str

2015-08-18 22:04:51 894

转载 UIP协议一

UIP协议多用于嵌入式产品。     结合如CP2200芯片的网卡芯片,组成嵌入式网卡,硬件提供能力,UIP提供的是策略。     由上往下逐步封装用户的数据,如:     应用层----------传输层--------网络层------数据链路层-----物理层     应用数据---TCP封装头部---IP封装头部-----mac封装+尾部-----发送     任何的事

2015-08-18 22:01:52 795

转载 stm8的硬件

2 硬件设计下面的原理图利用STM8 MCU  (以STM8S105S4-PKT评估板为例)。本节将通过这个原理图向大家介绍如何开始STM8 的硬件开发,以及需要注意的地方。  2.1  电源STM8S系列单片机的工作电压约为2.95V ~ 5.5V(具体的电压以Datasheet提供的数据为准)。因此在设计时要注意保证MCU的供电电源在这个范围之内。

2015-07-30 15:14:27 2878

原创 关于使用IAR软件stlink下载stm8程序失败问题

以前一直使用IAR很正常,这次使用使用stlink下载,stlink莫名其妙的就不能下载了,断电,重启,有时候能用,有时候真的就不能用了提示信息如下图,Failed to initialize communcation with hardware: SWIM error [3]: Detected hardware not compatible with software然后网上搜

2015-07-30 15:12:43 21471 1

转载 stm32的MDA应用设置

DMA,全称为:Direct Memory Access,即直接存储器访问。DMA传输方式无需CPU 直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM 与I/O设备开辟一条直接传送数据的通路,能使CPU 的效率大为提高。       STM32中 DMA1有7个通道,DMA2有5个通道(DMA2 仅存在大容量产品中)。DMA挂载的时钟为AHB总线,其时钟为

2015-07-22 10:51:43 2742

转载 stm32的ADC

12位ADC是一种逐次逼近型模拟数字数字转换器。它有多达18个通道,可测量16个外部和2个内部信号源。ADC的输入时钟不得超过14MHZ,它是由PCLK2经分频产生。如果被ADC转换的模拟电压低于低阀值或高于高阀值,AWD模拟看门狗状态位被设置。ADC通常要与DMA一起使用 这里只是简单的用库配置ADC 不断扫描来实现ADC的应用。 首先配置GPIO与ADC的时钟: ADC

2015-07-16 19:56:31 667

转载 STM32的时钟系统RCC详细整理

一、综述:1、时钟源在 STM32 中,一共有 5 个时钟源,分别是 HSI 、 HSE 、 LSI 、 LSE 、 PLL 。 ①HSI 是高速内部时钟, RC 振荡器,频率为 8MHz ; ②HSE 是高速外部时钟,可接石英 / 陶瓷谐振器,或者接外部时钟源,频率范围是 4MHz – 16MHz ; ③LSI 是低速内部时钟, RC 振荡器,

2015-07-15 11:40:36 1838

转载 在IAR For ARM和Keil Realiew MDK中建立工程的步骤

从接触STM32以来,一直都是在IAR For ARM 4.22A环境下进行开发。因为以前用过IAR For MSP430,对IAR的开发环境比较熟悉,再加上万利板子提供的例程都是IAR的,用起来也还顺手。          直到前一阵参加了一个ARM的研讨会,会上英蓓特极力推荐RealView MDK中国版,好奇之下就Download了一个试用版,但一直没仔细研究。后来网上又出现了ST Li

2015-07-08 16:57:05 1488

转载 初学stm32-环境搭建——stm32和IAR配置

1.1 说明        本文逐步介绍了作者自身在STM32处理器和IAR编译环境的学习过程,并介绍了在该类环境下容易产生错误的地方,最后顺利的进行Firmware下的程序编写和ST-LINK的调试。1.2 选择STM32单片机/处理器        在公司完成一个项目之后,需要考虑新的芯片适应新的需求,以此,同主管商量之后,决定采用ST的8位或32位单片机。其价格、功能、用

2015-07-08 14:36:42 29485

转载 解决 declaration is incompatible with "__interwork __softfp unsigned long __get_PSP(void)" 报错

使用IAR 6.4(7.0)编译工程报错 Error[Pe147]: declaration is incompatible with "__interwork __softfp unsigned long __get_PSP(void)"在网上找到一个解决方法  http://www.amobbs.com/thread-5172279-1-1.html   7楼没有再出现

2015-07-08 11:18:25 9305

转载 Keil MDK 和 IAR 两款ARM开发工具区别比较

首先要说明,没有那款开发工具是万能的,也没有那款工具在所有方面都具有绝对优势。对于Keil MDK-ARM和IAR两款工具择,可以根据自己的习惯来选择,而不应该在使用其中的一款时贬低另外一款,或者总是赞美自己的选择。好了,下面开始讲Keil MDK-ARM和IAR的区别。一、概述Keil MDK-ARM(旧称RealView MDK)开发工具源自德国Keil

2015-07-08 10:10:34 1693

频率 频点 频道的概念区别

详细解释频率 频点 频道这三个极重要又容易混淆的概念

2015-08-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除