C/C++
文章平均质量分 67
可乐虎
嵌入式!
展开
-
C语言计算日期间隔天数的经典算法解析
#include #include int day_diff(int year_start, int month_start, int day_start , int year_end, int month_end, int day_end){ int y2, m2, d2; int y1, m1, d1; m1 = (month_start + 9) % 1转载 2015-09-15 19:11:26 · 7068 阅读 · 1 评论 -
动态顺序栈的C语言实现!
大家写的顺序栈一般都是用数组实现,大小固定,一旦压栈数量超过栈大小则会发生溢出!现在写一个用malloc和realloc实现的动态顺序栈,当压栈数量超过栈大小时,程序可根据所需求空间自动调节栈大小,以满足要求!代码如下,调试通过,放心使用! 此动态顺序栈的栈底空间设为空,不用来作为存放数据的有效空间,故当输入栈大小为N时栈实际可用空间为(N-1)即只能压栈(N-1)次原创 2014-04-25 17:29:10 · 3514 阅读 · 0 评论 -
详解realloc函数的功能——C语言代码展示
一、程序C语言代码展示如下:/************************************************运行平台:vc++6.0实现功能:体现realloc函数的功能 ************************************************/#include#include#define NUM1 5#define NU原创 2014-04-22 17:37:00 · 4463 阅读 · 0 评论 -
C语言编程 - 清空键盘缓冲区
清空键盘缓冲区很多种方法,如用fflush(stdin); rewind(stdin);等,但是在linux这些都不起作用,还得我今天试了半天都没成功,上网搜了一下发现setbuf(stdin, NULL);就能直接清空键盘缓冲区了。以下几个实例:Sample one#include int main(){ char ch1; char ch2;转载 2014-04-03 17:29:40 · 2005 阅读 · 0 评论 -
解决gcc提示:从不兼容的指针类型赋值 从不兼容的指针类型初始化
今天在ubuntu里编程,用gcc编译时,遇到两个警告,半天不得其解,苦查良久,搞定。快哉!警告: 从不兼容的指针类型赋值 [默认启用]警告: 从不兼容的指针类型初始化 [默认启用]typedef struct single_list{ int data; struct singlelist *p_next;}single_list;原因:singl原创 2014-04-16 15:31:38 · 14108 阅读 · 6 评论 -
C语言中给main函数传递参数!
相信大家用C语言定义main函数时,大多数人的写法都是int main(void)。其实main函数是可以向其传递参数的,给个实例://给main函数传参实例:#include #include //int main(int argc, char *argv[])int main(int argc, char **argv){ char *array[3]原创 2014-04-14 16:54:46 · 9495 阅读 · 0 评论 -
嵌入式c笔试题
预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你转载 2013-10-24 10:48:38 · 844 阅读 · 0 评论 -
C语言中sizeof()求字节数的应用举例
本文尽可能多的测试了在win32平台下用sizeof()求各种类型变量字节数的结果,而且会不断更新。很有参考价值哦!sizeof(char)=1sizeof(short)=2sizeof(int)=4sizeof(long)=4sizeof(float)=4sizeof(double)=8sizeof(long double)=8sizeof(unsigned ch原创 2013-11-07 00:29:08 · 9212 阅读 · 2 评论 -
结构体字节对齐
结构体字节对齐 在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何 变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列, 而不是简单地顺序排列,这就是内存对齐。 内存对齐的原因:转载 2013-11-07 00:35:49 · 927 阅读 · 0 评论 -
详解排序算法C语言代码实现之选择排序法
通过本文大家就知道选择排序法的原理了!原创 2013-11-04 22:40:47 · 1892 阅读 · 0 评论 -
error: #70: incomplete type is not allowed——已解决!
今天在使用sizeof与数组时总是编译出错,百思不得其解,折腾了半天问题终于解决了!现在此做点笔记,警醒自己也方便他人! 代码结构如下:在某个c文件里定义并初始化了light_value[]这个数组,在另一个c文件要用到此数组,于是用extern声明如下:extern u8 light_value[];然后错误代码如下:for (i=0; i{原创 2013-06-14 19:51:46 · 37288 阅读 · 5 评论 -
图解为什么形参的变化不会改变实参的值?
本文从“压栈出栈”的角度解释为什么形参的变化不会改变实参的值。(注:图中地址是随便写的,旨在示意)原创 2014-04-11 18:25:32 · 5872 阅读 · 0 评论 -
C/C++ 内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区
这可以帮助你深入了解程序的运行机制,由于自己还是一个初学者,因此大部分内容都只是转载。http://blog.sina.com.cn/s/blog_7edcf63b0100yhk9.htmlhttp://www.cnblogs.com/CBDoctor/archive/2011/12/24/2300624.html 一. 在c中分为这几个存储区1.栈 ——由编译器自动分配释放转载 2014-12-04 22:08:53 · 3514 阅读 · 0 评论 -
sprintf、atoi、strlen、strcat、memset、sizeof的一些用法总结
一、sprintf的用法// 将字符串存入arr数组 sprintf(arr, "%s", "abc"); // 将整数转换为字符串存入arr数组sprintf(arr, "%d", 123); 二、atoi的用法// 将字符串转换为整数a = atoi("1243");三、strlen的用法1、strlen 字符串的结原创 2015-06-20 20:55:31 · 1397 阅读 · 2 评论 -
C/C++编译器与链接器工作原理
这里并没不是讨论大学课程中所学的《编译原理》,只是写一些我自己对C++编译器及链接器的工作原理的理解和看法吧,以我的水平,还达不到讲解编译原理(这个很复杂,大学时几乎没学明白)。要明白的几个概念: 1、编译:编译器对源文件进行编译,就是把源文件中的文本形式存在的源代码翻译成机器语言形式的目标文件的过程,在这个过程中,编译器会进行一系列的语法检查。如果编译通过,就会把对应的CPP转换成O转载 2015-08-23 09:10:05 · 1159 阅读 · 0 评论 -
数据结构 学习笔记之:关于顺序栈中给结构体类型指针分配内存时,使用malloc和不使用malloc的疑惑之解惑!
////////////////////////////////////////////////////////////////////////////////更多原创“uC/OS-II学习笔记之:系列”基础及嵌入式相关知识详解,请访问可乐虎博客:http://blog.csdn.net/dcx1205相信不会让您失望!!//////////////////////原创 2013-03-08 21:35:05 · 2052 阅读 · 1 评论 -
内联函数和宏定义的区别
用内联取代宏:1.内联函数在运行时可调试,而宏定义不可以;2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会; 3.内联函数可以访问类的成员变量,宏定义则不能; 4.在类中声明同时定义的成员函数,自动转化为内联函数。文章(一)内联函数与宏定义 在C中,常用预处理语句#define来代替一个函数定义。例如: #d转载 2015-05-18 21:41:58 · 608 阅读 · 0 评论 -
关于二维数组和指针
在C语言中有如下结论:一、在表达式中数组名都是其首元素的地址 但有两种情况除外:(1)当数组名作为sizeof操作符的操作数时,sizeof返回的是整个数组长度,而不是指向数组的指针长度(2)当数组名作为&操作符的操作数时,所产生的是一个指向数组的指针,而不是一个指向指针常量的指针 二、在任何变量的前面加&,就是取这个变量的地址。三、举例:若有二原创 2015-05-29 00:23:53 · 1546 阅读 · 0 评论 -
四线电阻触摸屏采样滤波算法C语言代码
四线电阻触摸屏的采样滤波算法,实践证明很好用的!原创 2015-05-16 01:01:56 · 3958 阅读 · 0 评论 -
求三个数值的中间值的宏定义
怎么用一个宏来求三个数值的中间值呢?请看:原创 2015-05-15 22:20:19 · 2423 阅读 · 0 评论 -
关于 可重入 函数的详解
一、什么是可重入函数?答:可重入函数就是多个线程访问同一个函数时,彼此之间互不影响,均能得到期望的结果二、如何使函数可重入?答:保证函数所有的输入都来自于函数的形参,所有的输出都为从函数返回值或输出参数得到, 函数内部不得使用全局变量或者静态局部变量三、不可重入函数举例 int g_flag = 0;int fun(int x){原创 2015-05-13 23:34:11 · 1084 阅读 · 0 评论 -
do...while(0)的妙用
在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。 但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。1. do...while(0)消除goto语句。通常,如果在转载 2015-04-17 07:37:03 · 477 阅读 · 0 评论 -
详解排序算法C语言代码实现之冒泡排序法(改进)
本文将教科书里的冒泡法改进下以提高排序效率,并提供标准函数接口,大家可以直接调用!原创 2013-11-04 22:14:40 · 2949 阅读 · 0 评论 -
详解判断回文字符串和回文数算法的C语言代码!
本文详细讲解判断回文数和回文字符串的算法原理,并给出了完整的标准C语言代码,且提供标准函数接口,可供大家直接调用!原创 2013-11-03 21:02:18 · 3538 阅读 · 0 评论 -
基于stm32的4X4矩阵键盘定时器扫描消抖法,彻底告别delay函数!
经本人刻苦钻研,将51单片机上用的矩阵键盘扫描程序移植到了stm32上,同时也做了很大的改进,最大的改进莫过于消抖这块了。以前的消抖总是采用delay延时约10到20ms的时间,但这样会导致MCU在延时里空跑而造成主程序被搁置,显然,程序的实时性大打折扣,今天便在此让新手们别delay,从此走进一个崭新的扫描消抖世界!(本人也是新手——爱钻研的新手哈!^_^)//stm32矩阵键盘翻转扫描法(原创 2013-04-27 16:12:53 · 15371 阅读 · 6 评论 -
时间片轮询法
时间片轮询法 时间片轮询法,在很多书籍中有提到,而且有很多时候都是与操作系统一起出现,也就是说很多时候是操作系统中使用了这一方法。不过我们这里要说的这个时间片轮询法并不是挂在操作系统下,而是在前后台程序中使用此法。也是本贴要详细说明和介绍的方法。 对于时间片轮询法,虽然有不少书籍都有介绍,但大多说得并不系统,只是提提概念而已。下面本人将详细介绍本人模式,转载 2013-05-21 20:55:20 · 10018 阅读 · 0 评论 -
C语言枚举类型
在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任转载 2013-05-20 20:51:47 · 868 阅读 · 0 评论 -
提高编译效率的Keil C编程技巧
提高编译效率的Keil C编程技巧1、选择合适的算法和数据结构应该熟悉算法语言,知道各种算法的优缺点,具体资料请参见相应的参考资料,有很多计算机书籍上都有介绍。将比较慢的顺序查找法用较快的二分查找或乱序查找法代替,插入排序或冒泡排序法用快速排序、合并排序或根排序代替,都可以大大提高程序执行的效率。.选择一种合适的数据结构也很重要,比如你在一堆随机存放的数中使用了大量的插入和转载 2013-04-21 17:05:49 · 2881 阅读 · 0 评论 -
利用单片机里的定时器模拟秒表计数器需注意的事项!
用stm32做项目时,需要用定时器做一个秒表计时,但发现秒表总是比实际慢,百思不得其解,最终求教高人,得以解决,现将心得整理如下,以警醒自己方便他人!int main(void){ u16 i; s8 key_value; Stm32_Clock_Init(9);//系统时钟设置(正常是9倍频) delay_init(72);//延时初始化(正常原创 2013-04-24 19:34:43 · 2534 阅读 · 0 评论 -
静态链表C语言实现详解
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////更多原创“uC/OS-II学习笔记之:系列”基础及嵌入式相关知识详解,请转载 2013-03-12 14:50:11 · 1874 阅读 · 0 评论 -
数据结构 学习笔记之:线性表——顺序表、静态链表、动态链表(单链表、双链表、单循环链表、双循环链表,链式栈、链式队列)——基础概念大扫盲!
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////更多原创“uC/OS-II学习笔记之:系列”基础及嵌入式相关知识详解,请原创 2013-03-12 17:44:14 · 2389 阅读 · 0 评论 -
数据结构 学习笔记之:顺序栈的C语言实现
//////////////////////////////////////////////////////////////////////////////////更多原创“uC/OS-II学习笔记之:系列”基础及嵌入式相关知识详解,请访问可乐虎博客:http://blog.csdn.net/dcx1205相信不会让您失望!!////////////////////原创 2013-03-09 15:57:32 · 844 阅读 · 1 评论 -
数据结构 学习笔记之:结构体及其所定义变量的内存分配的问题
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////更多原创“uC/OS-II学习笔记之:系列”基础及嵌入式相关知识详解,请原创 2013-03-11 15:37:00 · 3242 阅读 · 0 评论 -
static使用总结
static使用总结1. 关键字static有三个明显的作用:A、在函数体,静态的变量在这一函数被调用过程中维持其值不变。B、在模块内(但在函数体外),静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。C、在模块内,静态的函数只可被这一模块内的其它函数调用。2. 常见的两种用途: 1>统计函数被调用的次数; 2>转载 2013-05-22 13:17:51 · 759 阅读 · 0 评论 -
给51 DIY超轻量级多任务操作系统
前言想了很久,要不要写这篇文章?最后觉得对操作系统感兴趣的人还是很多,写吧.我不一定能造出玉,但我可以抛出砖.包括我在内的很多人都对51使用操作系统呈悲观态度,因为51的片上资源太少.但对于很多要求不高的系统来说,使用操作系统可以使代码变得更直观,易于维护,所以在51上仍有操作系统的生存机会.流行的uCos,Tiny51等,其实都不适合在2051这样的片子上用,占资源较多,转载 2013-05-22 18:28:33 · 1070 阅读 · 1 评论 -
用C语言实现高效嵌入式系统编程
1引言 随着市场竞争的日趋激烈,要求电子工程师能够在短时间内编写出执行效率高而又可靠的嵌入式系统的执行代码。同时,由于实际系统的日趋复杂,要求所写的代码规范、模块化并便于多个工程师以软件工程的形式进行协同开发。汇编语言作为传统的嵌入式系统的编程语言,已经不能满足这样的实际需要了。而C语言以其结构化和能产生高效代码满足了这样的需要,成为电子工程师在进行嵌入式系统编程时的首选开发工具而转载 2013-05-23 19:08:29 · 2926 阅读 · 0 评论 -
关于stm32的MY_NVIC_Init()中断管理函数的使用心得!
有次在使用stm32做项目时,遇到要用2个定时器及其中断服务程序的情况。这样就需要使用函数MY_NVIC_Init(NVIC_PreemptioPriority,NVIC_SubPriority,NVIC_Channel,NVIC_Group)对两个中断服务的优先级进行设定了。最开始,这个函数看得我是一头雾水,无从着手,仔细研究了一会才明白该如何使用了。相信很多新手同学会和我有类似的经历吧,为了方原创 2013-05-03 18:44:28 · 10096 阅读 · 0 评论 -
详解keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法!
以前写单片机程序时总是把所用函数和变量都写在一个c文件里,后来遇到大点的项目,程序动则几千行,这种方式无疑会带来N多麻烦,相信大家都有所体验吧! 后来学会了在keil里进行模块化编程,即只把功能相同或相近的函数写在同一个c文件,这样以来一个项目往往由很多个c文件组成,但又带来一个问题即是某些c文件之间需要相互通信,一般我们都采用了全局变量,对吧。很多同学虽然知道在其它c文件里引用原创 2013-06-14 22:08:46 · 8927 阅读 · 5 评论 -
Error: C3065E: type of input file 'XXX' unknown——已解决!
今天在使用KEIL MDK编译工程时出现这种错误:user_app.c: Error: C3065E: type of input file 'REMOTE' unknown。 以前从未遇到过,折腾半天才发现是remote.c所在文件夹的名字里有个空格所致。于是将文件夹名改为IR_REMOTE后,问题就迎刃而解(原名是IR REMOTE)。原创 2013-06-15 17:24:18 · 10966 阅读 · 2 评论 -
keil 中建立多文件时,变量重复定义的解决
keil 中建立多文件时,变量重复定义的解决 c/c++语言中有很多地方要用到extern,但是如果没有真正的了解它的意义,会给编程带来很大的麻烦,为了使大家少走弯路,特祥细的说明一下。 对于比较小的程序,一般只有一个c文件和一个头文件,全局变量我们通常会直接定义在c文件中,在程序之前加int i定义。如果要在头文件中定义有以下两种方法:用extern来声明:extern转载 2013-06-09 19:03:21 · 12294 阅读 · 0 评论