状态机程序
摘要:基于时间状态机是在一个定时器的协调下周期扫描执行各个任务:步骤如下: 一 首先定义一个回调函数的结构体:包含计时计数器,延时时间,空类型的指针(做函数参数用),以及一个指针函数(注意参数和返回值) 二 用自定义的数据类型顶一个指针数组:最后一项指针函数为NULL. 三 用单片机的一个定时器作为系统的
阅读全文
posted @
2016-07-25 23:09
杰瑞鼠
阅读(547)
推荐(1) 编辑
静态局部变量
摘要:1静态局部变量赋初值是在编译时进行值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值 2如果在定义局部变量时不赋初值的话,对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符型变量)。所以对于静态联合体(初始化不好处理)就
阅读全文
posted @
2016-07-25 15:46
杰瑞鼠
阅读(233)
推荐(0) 编辑
函数指针 回调函数 指针数组
摘要:一 函数指针的用法 1.1 先自定义一个函数指针类型,注意它指向的函数的函数的参数和返回值必须与其一致, typedef int (*PFUN)(int a, int b) 1.2 定义一个函数指针变量并指向某一个函数 PFUN pfunc = functionA;// int functionA
阅读全文
posted @
2016-07-15 14:01
杰瑞鼠
阅读(288)
推荐(0) 编辑
赋值问题:
摘要:1 数组和数组间的赋值: 数组作为参数时退化成一个指针,数组不能作为函数值 ,数组间的赋值必须通过内存拷贝实现。 2 结构体的赋值 2.1 结构体可以在定义时用{}赋值(注意{}赋值也只能在定义时用) 2.2 结构体可以以linux风格在定义时赋值,注意顺序可以与定义时不一样。 struck 结构体
阅读全文
posted @
2016-07-14 11:41
杰瑞鼠
阅读(239)
推荐(0) 编辑
关于二维数据中的一维指针作为函数参数和返回值
摘要:问题描述: 1 假定定义了一个二维数组用来存放多条(总20条)数据,每条数据长度为10,uchar message[20][10] 2 要将外部来的一条数据存放到缓冲区指定位置(入口参数 uchar *p,数据的开始地址) 3 要从缓冲区读出一条记录,将其输出(出口参数 uchar *p,数据的开始
阅读全文
posted @
2016-07-13 17:16
杰瑞鼠
阅读(380)
推荐(0) 编辑
freemodbus线圈中的位操作
摘要:连续位的操作函数: xMBUtilSetBits(UCHAR * ucByteBuf, USHORT usBitOffset, UCHAR ucNBits,UCHAR ucValue); xMBUtilGetBits(UCHAR* ucByteBuf, USHORT usBitOffset, UCH
阅读全文
posted @
2016-05-30 14:19
杰瑞鼠
阅读(1114)
推荐(0) 编辑
浮点数相关
摘要:一 用四个字节十六进制数表示单精度浮点数:即是所谓的IEEE754标准,这也是大多数硬件存储浮点数的标准。单精度浮点数占4个字节,表示范围为:在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38, 相关工
阅读全文
posted @
2016-05-30 10:26
杰瑞鼠
阅读(619)
推荐(0) 编辑
一种预编译容易出错的地方:
摘要:经常见到这样的一段程序: 1 /* file of aa.h*/ #ifdef XXX_MODULE_GLOBALS #define XXX_EXT#else#define XXX_EXT extern#endif XXX_EXT unsigned char VAL1, VAL2...... //
阅读全文
posted @
2016-03-15 13:58
杰瑞鼠
阅读(192)
推荐(0) 编辑
变量的条件编译
摘要:在很多程序中都会有以下的程序段: /"模块MAIN变量#ifdef XXX#define GLOBAL_XXX#else#define GLOBAL_XXX extern#endif 然后会看到很多这样的变量GLOBAL_XXX unsigned char VAL1.... 同时我们经常会碰到在一些
阅读全文
posted @
2016-02-25 09:54
杰瑞鼠
阅读(345)
推荐(0) 编辑
液晶菜单设计(笔记)
摘要:源文件目录 /* 基于变量库和菜单库的树形拓扑液晶菜单数据结构。 */typedef enum {INT=1;DW;FL}VarType;//INT字节型**;DW字型****;FL浮点数***.*typedef enum {M_MAIN=1;M_VAR;M_SELCET;M_SET;M_CONST
阅读全文
posted @
2015-05-18 16:22
杰瑞鼠
阅读(632)
推荐(0) 编辑
小程序
摘要:void u16_outlento_u8(unsigned char *d,unsigned char len,unsigned int *s){ unsigned char i=0,j=0; for(;i执行循环体->变量变化->变量判断,满足?是继续循环体:结束循环体。当变量变化放在循环体内也...
阅读全文
posted @
2015-04-28 09:36
杰瑞鼠
阅读(281)
推荐(0) 编辑
串口问题总结:
摘要:直通线交叉线: 标准DB9(PC的公头 2=RX;3=TX;5=GND),延长线(母头连PC,公头连设备)也是标准的直连线;但PC和设备之间需要交叉(设备端DB9的2=TX=MCU的TXD,即MCU和设备板子上的DB9是不交叉的),但这很不方便,一般PC到设备都让其直连,而设备的DB9与MCU之间实
阅读全文
posted @
2015-04-21 11:55
杰瑞鼠
阅读(1348)
推荐(0) 编辑
STM32中断控制及优先级设置
摘要:M3用8bits而STM32用高四位来表示抢占和子优先级:bit=1表示抢占;bit=0表示非抢占即子优先级;所以共有5中方案分组:分组 Bit7 Bit6 Bit5 Bit4 说明:第0组 0 0 0 0第1组 1 0 0 0第2组 1 1 0 ...
阅读全文
posted @
2015-04-14 18:33
杰瑞鼠
阅读(3195)
推荐(0) 编辑
何时要打开stm32的AFIO时钟
摘要:STM32的管脚配置一般有2个:Default和rinmap,如果使用default就不需要打开AFIO,否则使用后者就需要打开3个时钟:GPIO时钟、外设功能时钟和AFIO时钟。一般在涉及外中断配置、管脚重定向或对AFIO_EVCR寄存器改写操作时需要打开AFIO时钟。
阅读全文
posted @
2015-04-06 09:51
杰瑞鼠
阅读(550)
推荐(0) 编辑
使用UltraEdit+BCC5.5搭建C语言学习环境(转)
摘要:今天闲来无聊,想起以前学的C都差不多忘光了,想练练,先搭环境吧,vc bc之类都太大了,我以前在borland下过一个命令行编译工具不错,好像以前看到有人用ultraedit配合命令行工具做过一个开发环境,我也试试看。。。 因为最后成功了,所以记录一下,防止以后忘记。我用的是ultraedit9....
阅读全文
posted @
2014-10-28 21:11
杰瑞鼠
阅读(664)
推荐(0) 编辑
堆内存 栈内存 虚拟内存 动态内存管理
摘要:从编译器角度来看内存分三种情况: 1 系统初始化时都已经确定好、不会再变动的内存区域,一般指的是全局变量、静态变量数组等。 2 栈上内存:一般指的是函数内部的局部变量等,函数调用时分配内存,调用结束后系统自动释放不用自己考虑回收,效率高。有时候栈需要自己设定,设定不当可造成栈溢出。 3 堆上内存:即
阅读全文
posted @
2014-10-20 12:32
杰瑞鼠
阅读(1033)
推荐(0) 编辑
keil编译器
摘要:1 数组比指针效率高.2 v4.73不能查看局部变量的值:可先将C/C++选项下的优化级别设置成O0,查看完之后修改回去.因默认级别是2级.
阅读全文
posted @
2014-08-30 00:32
杰瑞鼠
阅读(316)
推荐(0) 编辑
c语言-关键字
摘要:1volatile:易变的,一般寄存器的访问速度比RAM快,所以在指定了优化之后,一般编译器会从寄存器读取数据以加快速度.而对于:由硬件寄存器设备决定的状态信息等 中断服务程序中修改的且最终要被其它程序查询使用的变量标志等如:按键值,软定时次数等 多线程共享变量都要用volatile修饰,让编...
阅读全文
posted @
2014-08-30 00:02
杰瑞鼠
阅读(268)
推荐(0) 编辑
C数据结构与算法-算法复杂度
摘要:算法复杂度分为时间复杂度T(n)和空间复杂度F(n)时间复杂度:也就是执行算法程序所需的时间,与硬件的速度、编程语言的级别、编译器的优化、数据的规模、执行的频度有关,前三个有很大的不确定性,所以衡量指标只要是后两者即算法的时间复杂度是数据规模n的函数。T(n)=O(F(n)),其中O表示同阶,即当n...
阅读全文
posted @
2014-08-08 13:51
杰瑞鼠
阅读(313)
推荐(0) 编辑
C语言-断言
摘要:1 作用: 断言常做语言处理的高级形式,自动处理软件隐藏很深其且它手段不易发现的错误,快速进行异常定位。同时这也是软件单元测试必须的技术。2 使用范围: 2.1放在函数入口对入口参数进行合法性检查(这也是我们经常看到的) 2.1将assert(0)放在预计正常情况不会出现的地方(一旦出现肯定是...
阅读全文
posted @
2014-08-07 11:35
杰瑞鼠
阅读(3255)
推荐(0) 编辑