摘要:__inline的用法一、inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。表达式形式的宏定义一例:#define ExpressionName(Var1,Var2) ((Var1)+(Var2))*((Var1)-(Var2))为什么要取代这种形式呢,且听我道来:1. 首先谈一下在C中使用这种形式宏定义的原因,C语言是一个效率很高的语言,这种宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈,代码生成等一系列的操作,因此,效率很高,这是它在C中被使用的一个主要原因。2. 这种宏定义在形式上类似于一个函数,但在使用它时,仅仅只是做
阅读全文
摘要:假设链表节点的数据结构为:struct node {int data;struct node* next;};创建单链表的程序为:struct node* create(unsigned int n){//创建长度为n的单链表assert(n > 0);node* head;head = new node;head->next = NULL;cout << "请输入head节点的值(int型):";cin >> head->data;if (n == 1){ return head;}node* p = head;for (unsi
阅读全文
摘要:我们经常在题目中有要求,输入一个整数,然后以这个整数作为数组的元素个数,下面的程序代码是错误的。intn,array[n];scanf(%d,&n);在TurboC中,不允许出现动态数组。那么如果必须需要这样时,就只能使用链表了。一、堆堆是一种动态存储结构,实际上就是数据段中的自由存储区,它是C语言中使用的一种名称,常常用于动态数据的存储分配。堆中存入一数据,总是以2字节的整数倍进行分配,地址向增加方向变动。堆可以不断进行分配直到没有堆空间为止,也可以随时进行释放、再分配,不存在次序问题。所谓动态数组是指在程序运行期间确定其大小的,如常用到的动态数组,它们是在程序执行过程中动态进行变化
阅读全文
摘要:位运算 位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果。 位运算符有: &(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。 其中,按位取反运算符是单目运算符,其余均为双目运算符。 位运算符的优先级从高到低,依次为~、&、^、|, 其中~的结合方向自右至左,且优先级高于算术运算符,其余运算符的结合方向都是自左至右,且优先级低于关系运算符。 (1)按位与运算符(&) 按位与运算将两个运算分量的对应位按位遵照以下规则进行计算: 0 & 0 = 0, 0 & 1 = 0,
阅读全文
摘要:图片可以在下面的博客中看到.转自:http://blog.csdn.net/bigloomy/article/details/6633008可能有不少读者会问,字节对齐有必要拿出来单独写一篇博客嘛?我觉得是很有必要,但是它却是被很多人所忽视的一个重点。那么我们使用字节对齐的作用和原因是什么呢?由于硬件平台之间对存储空间的处理上是有很大不同的,一些平台对某些特定类型的数据只能从某些特定地址开始存取,如通常有些架构的CPU要求在编程时必须保证字节对齐,否则访问一个没有进行字节对齐的变量的时候会发生错误。而有些平台可能没有这种情况,但是通常的情况是如果我们编程的时候不按照适合其平台要求对数据存放进行
阅读全文
摘要:STM32学习笔记(7):USART串口的使用2011年4月19日 USART串口通信1. 串口的基本概念在STM32的参考手册中,串口被描述成通用同步异步收发器(USART),它提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互联网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。还可以使用DMA方式,实现高速数据通信。USART通过3个引脚与其他设备连接在一起,任何US
阅读全文
摘要:STM32学习笔记(6):LCD的显示2011年4月14日 LCD显示1. LCD/LCM的基本概念液晶显示器(Liquid Crystal Display: LCD)的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。LCM(LCD Module)即LCD显示模组、液晶模块,是指将液晶显示器件,连接件,控制与驱动等外围电路,PCB电路板,背光源,结构件等装配在一起的组件。在平时的学习开发中,我们一般使用的是LCM,带有驱动IC和LCD屏幕等多个模块。2. FSMC的基本概念在STM32上开发LCD
阅读全文
摘要:STM32学习笔记(4):通用定时器基本定时功能 2011年3月29日 TIMER基本定时功能1. STM32的Timer简介STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。其中系统嘀嗒定时器是前文中所描述的SysTick,看门狗定时器以后再详细研究。今天主要是研究剩下的8个定时器。其中TIM1和TIM8是能够产生3对PWM互补输出的高级登时其,常用于三相电机的驱动,时钟由APB2的输出产生。TIM2-TIM5是普通定时器,TIM6和TIM7是基本定时器,其时钟由APB1输出产生。由于STM32的TIMER功能太
阅读全文
摘要:STM32学习笔记(5):通用定时器PWM输出2011年3月30日 TIMER输出PWM1. TIMER输出PWM基本概念脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。一般用来控制步进电机的速度等等。STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出。1.1 PWM输出模式STM32的PWM输出有两种模式,模式
阅读全文
摘要:STM32学习笔记(3):系统时钟和SysTick定时器2011年3月21日 系统时钟和SysTick定时器1. STM32的时钟系统在STM32中,一共有5个时钟源,分别是HSI、HSE、LSI、LSE、PLL(1)HSI是高速内部时钟,RC振荡器,频率为8MHz;(2) HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围是4MHz – 16MHz;(3)LSI是低速内部时钟,RC振荡器,频率为40KHz;(4)LSE是低速外部时钟,接频率为32.768KHz的石英晶体;(5) PLL为锁相环倍频输出,严格的来说并不算一个独立的时钟源,PLL的输入可以接HSI/2、HSE
阅读全文
摘要:STM32学习笔记(2):外部中断的使用2011年3月20日 外部中断中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部中断,2个定时/计数器中断和一个串口中断,但是在STM32中,中断数量大大增加,而且中断的设置也更加复杂。今天就将来探讨一下关于STM32中的中断系统。1 基本概念ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级的设置,仅使用中断优先级设置8bit中的高4位。STM3
阅读全文
摘要:STM32学习笔记(1):GPIO口的使用2011年3月19日 顺序点亮LED灯摸索了很久之后终于把ARM开发板上的LED灯点亮了,虽然是很简单的一个IO口操作,但是由于以前从来都没有什么经验,所以浪费了很多时间,也查找了很多资料。现在可以操作IO口了,证明迈出了学习ARM的第一步。实验平台清单如下:开发板: 奋斗STRIVE V3核心芯片: STM32F103VET6开发环境: RealView MDK-ARM Version:3.50PC操作系统: Windows 7 家庭普通版仿真器: SEGGER J-Link其中,STM32F103VET6芯片是基于ARM Cortex-M3内核的,
阅读全文
摘要:相信很多网友在学习C语言是总是为找到合适的书籍而犯愁,在国内,我相信大家听得最多的就是有关谭浩强的<c语言程序设计>了,对于此书我不做评价,如果你看了此书,好与不好在你看了以下几本后应该会有一个全新的认识。在这里,我根据自己的切身体会向大家推荐几本书,相信这几本书能够帮助大家更深刻的了解C语言的世界:1、C程序设计语言(The C Programming Language) c语言的圣经,当为初学者之首选,并反复阅读之。这本书虽然只有简简单单的两百多页,但却把C语言描述得非常透彻,国外人写的书,大家都明白,讲究的是实在。2、Expert C Programming(C专家编程) 一
阅读全文
摘要:有很多理由都能说明为什么我们应该写出清晰、可读性好的程序。最重要的一点,程序你只写一次,但以后会无数次的阅读。当你第二天回头来看你的代码时,你就要开始阅读它了。当你把代码拿给其他人看时,他必须阅读你的代码。因此,在编写时多花一点时间,你会在阅读它时节省大量的时间。 让我们看一些基本的编程技巧:尽量保持方法简短永远永远不要把同一个变量用于多个不同的目的使用自描述的变量名和方法名尽可能的把变量定义在靠近使用它的地方拒绝神秘数字友好的对待你的语言不要逆常规而行警惕过早优化积极重构测试过的程序不要过度沉迷于技巧通过习例学习新知 现在,让我们把每个小点展开来详细讲一下。 1. 尽量保持方法简短 ...
阅读全文
摘要:在对片内FLASH编程时,查看芯片数据手册上面说只需配置FMA、FMD、FMC三个寄存器就行了,可是忽略了很重要的一点,这一点在AN01237[ProgrammingtheOn-ChipFlashMemoryinaStellarisMicrocontroller]笔记上面说明了,就是一定要配置FLASH操作的时钟频率USECRL以确保正确的时序。AN01237相关文档及详细说明请看:http://www.cnblogs.com/tdyizhen1314/archive/2012/10/16/2726734.html另外一定要慎重对片内FLASH使用ReadOnly模式,否则很有可能使你的芯片无
阅读全文
摘要:关于C语言类型扩展的问题,经常被大家忽略,因为这是一个很隐秘的问题,请看下文:void func(void){ int i=1; unsignedchar c1= 1; signed char c2 = -1; if(c2> i) dprintf("\r\n -1 > 1"); else dprintf("\r\n -1 <= 1"); if(c2> c1) dprintf("\r\n -1> 1"); else dprintf("\r\n -1<= 1");}实际运行结果会是多
阅读全文
摘要:Abstractprintf()只能顯示10、8、16進位的值,卻無法顯示2進位的值,但有時候我們會希望能直接顯示2進位數字。Introduction使用環境:Visual C++ 8.0 / Visual Studio 2005Method 1:這是從C Primer Plus 5/e改寫的,使用bit運算來將10進位轉2進位,相當漂亮的寫法。decimal2binary.c / C1/*2(C) OOMusou 2008 http://oomusou.cnblogs.com34Filename : decimal2binary.c5Compiler : Visual C++ 8.06Des
阅读全文
摘要:堆栈其实是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。要点:堆:顺序随意.栈:后进先出(Last-In/First-Out)堆和栈的区别 一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)— 由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(static)— 全...
阅读全文