
编程
文章平均质量分 80
咸菜白饭
这个作者很懒,什么都没留下…
展开
-
关于独立按键扫描程序的思考(整合两种算法)
转自关于独立按键扫描程序的思考(整合两种算法)源程序主要部分如下:[cpp] view plaincopyprint?volatile unsigned char Trg; volatile unsigned char Cont; volatile unsigned char Release;转载 2015-03-02 16:26:22 · 1064 阅读 · 0 评论 -
const 详解(修饰变量、输入参数、返回值、成员函数)
看到const关键字,程序员首先想到的可能是const 常量。const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。const 是constant 的缩写,“恒定不变”的意思。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多C++程序设计书籍建议:“Use const whenever you need”。转载 2016-06-29 16:52:07 · 1302 阅读 · 0 评论 -
回调函数的理解
在看LWIP时,见到用回调函数,再看某老外公司OPC源代码时,见到用回调函数。看我国内某些代码(我公司软件等)时没用到。于是,我对回调函数产生了很大的好奇。以前,我写VC程序时用到过回调函数,但是没有用C语言来使用。最近,看到国外大量的经典代码中广泛使用了回调函数(LWIP、某两个公司的OPC程序等),都是C语言来实现的,而不是VC windows程序中别人实现自己使用的那种。为了弄明白这种函转载 2016-06-27 10:15:37 · 277 阅读 · 0 评论 -
printf使用技巧
巧用可变参数宏、编译器内置宏和printf输出调试信息前言:我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选转载 2016-05-19 11:17:19 · 538 阅读 · 1 评论 -
很好的debug方式取代printf满天飞
对于喜欢用printf Debug的同行来说,最麻烦的莫过于要重复输入很多printf语句,而且模块调试完成后要手动的把它们拿掉。 现在介绍一个很好的办法:#ifdef DEBUG#define D_STR(_STR_) printf("f:%s(l:%d)%s\n",__FILE__,__LINE__,_STR_);#define D_LINE转载 2016-05-19 11:00:49 · 571 阅读 · 0 评论 -
volatile的作用
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:short flag;vo转载 2015-05-02 15:30:26 · 295 阅读 · 0 评论 -
C语言条件编译及编译预处理阶段
一、C语言由源代码生成的各阶段如下:C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件 其中 编译预处理阶段,读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理。或者说是扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。预处理过程先于编译器对源代码进行处理。 在C 语言中,并没有任何内在的机制转载 2015-03-03 16:34:42 · 337 阅读 · 0 评论 -
关于按键扫描程序的终极讨论
一、思路基于STM8,按键处理,思路是这样的:每20ms左右一次去扫描按键,用一个key_now记录当前值,用key_last记录上次的值,如果key_now和key_last同时有效,则开始进行cnt++。 我设定两个阈值,LONG_PRESS为100(100*20ms=2s),SHORT_PRESS为4(4*20ms=80ms,去抖)。 cnt大于LONG_PRESS,转载 2015-03-02 16:34:56 · 1074 阅读 · 0 评论 -
一种软件去除键抖动的方法
摘要:单片机控制系统中大多使用控制键来实现控制功能。消除按键瞬间的抖动是设计者必须要考虑的问题。本文介绍一种很实用的软件去抖动方法,它借助于单片机内的定时中断资源,只要运算一下逻辑表达就完成了去抖动。这个方法效率高,不耗机时且易实现。文中使用的逻辑表达式由简单卡诺图和真值表推出,使该方法的机理容易理解。文中还提供用C51单片机编程语言编写的实用例程。 关键词:单片机 键处理 控制系统 去抖转载 2015-03-02 16:54:15 · 5035 阅读 · 0 评论 -
C语言头文件中定义变量问题(转)
上个星期回学校的时候,刚好碰到一个学弟在写程序,并且刚好碰到一个总编不过去的问题,我看了看,正好是个头文件重复包含问题,问题描述如下:他在程序中建立了一个global.h的文件,代码如下:#ifndef _GLOBAL_H_#define _GLOBAL_H_int a;int b;int c;然后在其他文件代码中,有多个.cpp文件引用他,转载 2015-03-16 11:38:24 · 839 阅读 · 0 评论 -
C语言中利用共用体、结构体、位域实现位操作
编写过51(MCU)程序的同学都知道51架构的MCU支持位操作,这是一个很方便的特性,在读取/修改寄存器某位的值时非常方便快捷。但其他架构的MCU大多都不支持该特性,即不支持位操作,所在在对寄存器中某一位进行操作的时候都是and/or两个操作共同使用,在编写程序时非常麻烦。在查找了大量资料后,笔者得出了本文中提到的一种折中方法。名词解释:共用体(union)表示几个变量共用一个内存位置,在转载 2015-03-16 11:39:11 · 5667 阅读 · 0 评论 -
调试中日志打印printf技巧
前言:我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选择使用宏定义的方式来输出调试语句。比如,定义一个宏原创 2016-06-30 15:37:52 · 3991 阅读 · 0 评论