我的自学实践
文章平均质量分 71
少占鱼-正定
河北正定欢迎您-少占鱼
展开
-
typedef(自定义数据类型)与#define(宏定义)用法比较(前者定义指针比define好用)---(转载)
不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中。typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些C/C++的学习者的博客,其中有一篇关于typedef的总结还是很不错,由于总结的很好,我就不加修改的引用过来了,以下是引用的内容(红色部分是我自己写的内容)。用途一:定义一种类型的别名,而defin原创 2013-10-23 16:40:51 · 1276 阅读 · 0 评论 -
Z-Stack1.4.3-1.2.1中SampleApp中重要函数解析
Z-Stack1.4.3-1.2.1中SampleApp中重要函数解析在上几篇文章中我们分析了,整个OSAL的流程,还有添加自己的任务,以及如何运行到自己定义的任务。这一篇文章主要是分析一下,自己定义的任务中要完成的功能,需要的事件函数是怎样的。 这个例子就是一个简单的点对点的数据发送,其中涉及到较少的网络配置,其中最主要的两个函数是SampleApp_ProcessEvent(uint8 t原创 2013-10-23 16:45:12 · 1748 阅读 · 0 评论 -
C语言中动态数组的实现
近来编写几个程序,很多都用到了数组。但是对于数组的大小却是没有固定的,也就是说可以更改数组大小,其大小是可以变化的。并不像初学时的那样,告诉你一个范围,你就必须取最大值以满足要求。那样可能就会浪费很多不必要的内存单元!那么到底应该怎样定义一个动态数组列? 在数组一章中,曾介绍过数组的长度是预先定义好的, 在整个程序中固定不变。C语言中不允许动态数组类型。例如: int n;scanf(原创 2013-10-23 16:45:14 · 551 阅读 · 0 评论 -
VS2008 创建DLL和调用DLL
隐式链接就是在程序开始执行时就将DLL文件加载到应用程序当中。隐式链接必须的文件:lib . 显式链接是应用程序在执行过程中随时可以加载DLL文件,也可以随时卸载DLL文件,这是隐式链接所无法作到的,所以显式链接具有更好的灵活性,对于解释性语言更为合适。不过实现显式链接要麻烦一些。在应用程序中用LoadLibrary或MFC提供的AfxLoadLibrary显式的将自己所做的动态链接库调进来,动态原创 2013-10-23 16:45:21 · 562 阅读 · 0 评论 -
场效应管(MOS)在开关电路中的应用
场效场效应管在mpn中,它的长相和我们前面讲的三极管极像,所以有不少修mpn的朋友好长时间还分不清楚,统一的把这些长相相同的三极管、场效应管、双二极管、还有各种稳压IC统统称作“三个脚的管管”,呵呵,如果这样麻木不分的话,你的维修技术恐怕很难快速提高的哦!好了,说到这里场效应管的长相恐怕我就不用贴图了,在电路图中它常用 表示,关于它的构造原理由于比较抽象,我们是通俗化讲它的使用,所以不去多讲,由原创 2013-10-23 16:45:27 · 4733 阅读 · 0 评论 -
KEIL----单片机实现自定义bootloader,用于程序更新
关于8051的bootloader实现方式 一, 基本硬件需求要实现IAP功能,需要51单片机可以在程序里修改代码空间的Flash,或者至少可以修改用户程序区的Flash,新出的51大部分都能满足这个要求 二, 空间划分一般bootloader位于单片机代码空间的起始地址,用户程序在后面。这个需要根据实际的需求来决定,bootloader功能简单,原创 2013-10-23 16:45:45 · 9667 阅读 · 3 评论 -
keil下C51启动代码详解
由于CPU和程序启动代码文件STARTUP.a51的重要性,一些8051派生的CPU产品要求初始化CPU来满足设计中的相应的硬件,因此,有时候用户需要对STARTUP.a51进行修改,所以进行注释一下:;---------------------------------------------------;startup.A51: 用户上电初始化程序;-----------------------原创 2013-10-23 16:45:47 · 1597 阅读 · 0 评论 -
IAR for stm8 中指定编译的起始地址
IAR for stm8 中指定编译的起起地址已经用STVD+cosmic完成了IAP功能,但想试着在STM8上跑上官的UCOS,不得不用IAR编译,但编译后代码的生成地址怎么再从0X9000开始生成呢,找遍全网,也没有发现三言两语直接的表白,又对IAR环境不熟,看过了IAR下的工程设置的全部选项,都没有发现怎么修改这个地址,IAR的这个地址的修改,并不象KEIL及STVD下那么直接,它必须通过I原创 2013-10-23 16:46:22 · 3653 阅读 · 0 评论 -
为什么要进行傅立叶变换(留起,难说哪天会看)
2012.11.18一、傅立叶变换的由来 关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶变换的描述,但是大都是些故弄玄虚的文章,太过抽象,尽是一些让人看了就望而生畏的公式的罗列,让人很难能够从感性上得到理解,最近,我偶尔从网上看到一个关于数字信号处理的电子书籍,是一个叫Steven W. Smith, Ph.D.外国人写的,写得非常浅显,里面有七章由浅入深地专门讲述关于离散信号的傅立原创 2013-10-23 16:46:33 · 1323 阅读 · 0 评论 -
CC2530中常用的控制寄存器
根据学习的不断深入将不断,将陆续更新学习到的寄存器P0SEL(P1SEL相同):各个I/O口的功能选择,0为普通I/O功能,1为外设功能 D7D6 D5 D4 D3 D2 D1 D0 P0_7功能 P0_6功能P0_5 功能P0_4 功能P0_3 功能P0_2 功能P0_1功能 P0_0 功能 P2SEL:(D0到D2位)端口2 功能选择和端口1 外设优先级控制什么是外设优先级:当PERCFG原创 2013-10-23 16:46:37 · 1431 阅读 · 0 评论 -
8051的bootloader实现方式
关于8051的bootloader实现方式 一, 基本硬件需求要实现IAP功能,需要51单片机可以在程序里修改代码空间的Flash,或者至少可以修改用户程序区的Flash,新出的51大部分都能满足这个要求 二, 空间划分一般bootloader位于单片机代码空间的起始地址,用户程序在后面。这个需要根据实际的需求来决定,bootloader功能简单,原创 2013-10-23 16:46:41 · 2667 阅读 · 0 评论 -
C语言中的结构体数据存储-对齐规则
(1)什么是字节对齐 一个变量占用 n 个字节,则该变量的起始地址必须能够被 n 整除,即: 每个变量的起始存放地址 % n = 0, 对于结构体,这个 n 取其成员种的数据类型占空间的值最大的那个。 默认定义的指针,是CPU最大数据类型 如:对于32位CPU,char *p; 占4个字节 而定义了数据的存储类型后,如:static char *p; 占1个字节 即:A原创 2013-10-23 16:45:10 · 670 阅读 · 0 评论 -
详解C语言volatile关键字(禁止编译器优化-原地址读取)
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:short flag;void t原创 2013-10-23 16:44:46 · 14723 阅读 · 1 评论 -
编程教训少占鱼之:内部变量不会默认初始化为0
//少占鱼制作 河北正定欢迎您 长沙航空职业技术学院 2010 年QQ:411656434函数内部变量,你不初始化他,不会自动初始化为0的。如果你下面直接把他当0,就会出错,数组也是一样。这个亏吃过了,记住!!!!根据情况,尤其是直接做计算的,必须初始化。区别:全局变量或者数组会自动初始化为0.原创 2013-10-23 16:41:04 · 548 阅读 · 0 评论 -
集成芯片制作过程(有图)
芯片的制造过程可概分为晶圆处理工序(Wafer Fabrication)、晶圆针测工序(Wafer Probe)、构装工序(Packaging)、测试工序(Initial Test and Final Test)等几个步骤。其中晶圆处理工序和晶圆针测工序为前段(Front End)工序,而构装工序、测试工序为后段(Back End)工序。 1、晶圆处理工序:本工序的主要工作是在晶圆上制作电路原创 2013-10-23 16:41:15 · 4541 阅读 · 0 评论 -
(Keil教训:属性设置XDADA有时中断调用函数会出错)编程之难2:难在调试中大胆假设--排除软硬件开发平台错误!!
正如生活之难一样,难的是适应环境而不是改变环境。编程之难难的不是编程。而是调试。调试之难难在排除各种复杂条件下的错误。软件硬件。。 像单片机,这类软件硬件结合的产品。难就难在软硬结合。编写程序时,不能只是纯软件式的硬件无关性开发。尤其调试时,结合硬件的状况才能调试。 调试老手,遇到过不少问题,甚至是一些很雷人的错误。对于那些嘴上说的一套一套的人来说。他怎么也不会碰到这些问题。而这也是差原创 2013-10-23 16:41:20 · 1117 阅读 · 0 评论 -
菩提本无树,明镜亦非台,本来无一物,何处惹尘埃(学习)
在南北朝的时候,佛教禅宗传到了第五祖弘忍大师,弘忍大师当时在湖北的黄梅开坛讲学,手下有弟子五百余人,其中翘楚者当属大弟子神秀大师。神秀也是大家公认的禅宗衣钵的继承人。弘忍渐渐的老去,于是他要在弟子中寻找一个继承人,所以他就对徒弟们说,大家都做一首畿子(有禅意的诗),看谁做得好就传衣钵给谁。这时神秀很想继承衣钵,但又怕因为出于继承衣钵的目的而去做这个畿子,违法了佛家的无为而作意境。所以他就在半夜起来原创 2013-10-23 16:41:26 · 934 阅读 · 0 评论 -
射频IC卡-M1卡介绍-转
对于电脑周边编程,主要有两种思路一、利用windows系统本身dll库。二、利用硬件产家提供的dll。 本篇对M1卡的编程是利用上述第二种方法。M1卡最为重要的优点是可读可写并且安全性高的多功能卡。这些优点与其自身的结构密不可分。 M1结构:M1卡分为16个扇区,每个扇区4块(块0~3),共64块,按块号编址为0~63。第0扇区的块0(即绝对地址0块)用于存放厂商代码,已经固化,不可更改。其他各扇原创 2013-10-23 16:41:44 · 2423 阅读 · 1 评论 -
Keil C51的代码效率(转帖)
C51程序编译生成汇编代码的效率,是由许多因素共同决定的,对于Keil C51,主要受以下两种因素影响: 第一节 存储模式的影响 存储模式决定了缺省变量的存储空间,而访问各空间变量的汇编代码的繁简程度决定了代码率的高低。例如:一个整形变量i,如放于内存18H、19H空间,则++i的操作编译成四条语句:INC 0x19MOV A,0x19JNZ 0x272DINC 0x180x272D原创 2013-10-23 16:42:25 · 1287 阅读 · 0 评论 -
Keil C51高级编程(转帖)
本章讨论以下内容:l 绝对地址访问l C与汇编的接口l C51软件包中的通用文件l 段名转换与程序优化第一节 绝对地址访问C51提供了三种访问绝对地址的方法:1. 绝对宏:在程序中,用“#include”即可使用其中定义的宏来访问绝对地址,包括:CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD具体原创 2013-10-23 16:42:28 · 893 阅读 · 0 评论 -
#if、#ifdef、#if defined之间的区别
#if,#ifdef和#if defined 对于条件编译#if,#ifdef和#if defined这些,深究起来还是有些意思#if要求是一个表达式,为真则执行以下代码,#ifdef则只要求是否定义,并不关心这个值是什么。#if defined则是#if和#define的连用。比如:#if 0#endif#ifdef __MMI_MESSAGES_CLUB__#i nclude "Message原创 2013-10-23 16:42:43 · 973 阅读 · 0 评论 -
单片机程序优化经验
由于单片机的性能同电脑的性能是天渊之别的,无论从空间资源上、内存资源、工作频率,都是无法 与之比较的。PC 机编程基本上不用考虑空间的占用、内存的占用的问题,最终目的就是实现功能就可以了。 对于单片机来说就截然不同了,一般的单片机的Flash 和Ram 的资源是以KB 来衡量的,可想而知,单片 机的资源是少得可怜,为此我们必须想法设法榨尽其所有资源,将它的性能发挥到最佳,程序设计时必须 遵循以下几原创 2013-10-23 16:43:39 · 2145 阅读 · 0 评论 -
电子可靠性工作的十大误区(电子展讲义)
刚刚结束慕尼黑上海电子展的国际医疗电子创新论坛,为了方便参会的听众朋友温故而知新,为了方便未能莅临论坛现场的朋友也能有所斩获,在此发布本人在论坛上的讲义、体验和总结,以期有所启迪和借鉴。9:20,会议即将开始,但仍人员寥寥无几,作为论坛专家团成员,颇为主办方和演讲的效果捏了一把汗,咨询慕尼黑展览公司负责会务的小姑娘,说一会儿就会坐满,我与复旦大学的汪教授开玩笑,说二阶阶跃响应曲线的上升过渡过程起作原创 2013-10-23 16:44:36 · 764 阅读 · 0 评论 -
单片机keil-c51语言乘除法和取膜超范围问题(部分不适用于C)
注意:计算式,能不写成一大行的就分开写,只要保证了精度就可以了!!写一大行有时候反而影响精度!例如:unsigned long int X; double AD;AD=AD/50.0;X=AD*5000.0000/1023.00;最好先局部计算一下,X=AD*100/1023.00;1。浮点类型的不能做“模”运算。 例如:float a=1234.56; a=a%10; 这是错误的。只有原创 2013-10-23 16:36:21 · 5185 阅读 · 0 评论 -
c语言数据运算超范围要注意
注意:计算式,能不写成一大行的就分开写,只要保证了精度就可以了!!写一大行有时候反而影响精度!例如:unsigned long int X; double AD;AD=AD/50.0;X=AD*5000.0000/1023.00;最好先局部计算一下,X=AD*100/1023.00;1。浮点类型的不能做“模”运算。 例如:float a=1234.56; a=a%10; 这是错误的。只有原创 2013-10-23 16:36:23 · 2215 阅读 · 0 评论 -
C语言中用#if、#ifndef、(或者#ifndef)、#def、#endif等宏进行条件编译调试的技巧
#ifndef、(或者#ifndef)、#def、#endif等宏这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #el原创 2013-10-23 16:40:47 · 1567 阅读 · 0 评论 -
回调函数使用方法--例子程序(转载)
看了人家的例子,比看那么多定义好多了。一看就明白了。好人啊!老外把国人玩的不是人了。国人还自己玩自己。非把一个简单的东西复杂化。叫那么难理解!!完啦,窝里斗的典型!!!!!!!!回调函数:我的理解。假设 A是回调函数,B是调用者,B参数里一个是指向A的函数指针,即回调A,同时另外的参数传递给A作为参数。A可以是多个函数的统一指向,只要函数参数个数相同即可。WINDOWS回调函数:永远不会被程序原创 2013-10-23 16:40:56 · 1477 阅读 · 0 评论 -
(教训)编程之难--难在大片程序中的小细节-注意变量类型和范围
for(i=0;i { Byte_Program(0x800+i,0); Byte_Program(0x1000+i,0); Byte_Program(0x1600+i,0); }///////////////////////////////////////////////////////////////////////////////原创 2013-10-23 16:41:07 · 673 阅读 · 0 评论 -
(教训少占鱼)编程之难--难在大片程序中的小细节-注意变量类型和范围
//少占鱼制作 河北正定欢迎您 长沙航空职业技术学院 2010 年QQ:411656434 for(i=0;i { Byte_Program(0x800+i,0); Byte_Program(0x1000+i,0); Byte_Program(0x1600+i,0); }//////////////////////////原创 2013-10-23 16:41:09 · 562 阅读 · 0 评论 -
手工制作印制电路板的一般步骤(复印纸法)
(1)选择覆铜板,清洁板面 根据电路要求,裁好霍铜板的尺寸和形状,然后用细水磨砂纸将覆铜板打磨,加入少量去污粉将铜箔面磨亮,再用布擦干净。 (2)复印电路和描板 将设计好的印制电路图用复写纸复印在覆铜板上,用毛笔 或直线笔蘸调和漆按复印电路图描板。描板要求线条均匀,焊盘要描好。 注意复印过程中,电路图一定要与覆铜板对齐,并用胶带纸粘牢,等到用铅笔或复写笔描完图形并检查无误后再将其揭开。 (3)腐蚀原创 2013-10-23 16:41:28 · 3427 阅读 · 0 评论 -
转载网友的--学习型PT2262无线遥控开关程序(315M)--未验证
/******************************************************************** 学习型PT2262无线遥控开关程序STC系列89C58RD 晶振11.0952MHZ ~ 12MHZ发射芯片采用的是PT2262芯片用4.7M的震荡电阻315M发射通电后运行指示灯闪烁,按动按钮开关后P0.4输出取反,当输出为低时运行指示灯熄灭长按按钮开原创 2013-10-23 16:41:31 · 3203 阅读 · 0 评论 -
基于单片机的modbus例程详细
#include #define uint8 unsigned char#define uint16 unsigned int#define FOSC 16000000uint16 BAUD=9600;uint16 TEMP_Alert=1000;//字地址 0 - 255 (只取低8位)//位地址 0 - 255 (只取低8位)/* CRC 高位字节值表 */ const uint8 code原创 2013-10-23 16:43:41 · 2531 阅读 · 0 评论 -
三极管工作原理分析,精辟、透彻,看后你就懂
【转】三极管工作原理分析,精辟、透彻,看后你就懂 随着科学技的发展,电子技术的应用几乎渗透到了人们生产生活的方方面面。晶体三极管作为电子技术中一个最为基本的常用器件,其原理对于学习电子技术的人自然应该是一个重点。三极管原理的关键是要说明以下三点:1、集电结为何会发生反偏导通并产生Ic,这看起来与二极管原理强调的PN结单向导电性相矛盾。2、放大状态下集电极电流Ic为什么会只受控于电流I原创 2013-10-23 16:45:32 · 761 阅读 · 0 评论 -
汇编----正确区分LJMP、AJMP、SJMP、JMP跳转指令
正确区分LJMP、AJMP、SJMP、JMP指令MCS-51的控制转移类指令,共17条,分为无条件转移指令、条件转移指令、子程序调用和返回指令、空操作指令等四类。无条件转移指令(共4条)LJMP addr16 ; PC〈—— addr16AJMP addr11 ; PC〈—— PC+2 , PC10-0〈—— addr11SJMP rel ; PC〈—— PC+2 , PC原创 2013-10-23 16:45:40 · 21279 阅读 · 0 评论 -
keil c文件中加入汇编方法
1.汇编语句写法2.设置嵌套了汇编的C文件属性勾选这两项为黑色4.汇编常包含的库文件。自己看着选 存储模式是small模式添加这个文件、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、C51下加入汇编代码使用如下标志符:#pragma asm;汇编语句#pragma end原创 2013-10-23 16:45:43 · 3893 阅读 · 0 评论 -
单片机定时器初始化不能用负号\"-(1000/256)\"写法
用负号的写法是错误的。定时时间并不是从-A到0。 TMOD=0x01; TH0=-(50000/256); TL0=-(50000%256);下面这样写才是对的:有的书上用的负号写法。误导我了!!负号是错误的,并不相当于65536-A;TH0=(65536-50000)/256;TL0=(65536-50000)%256; 用负号出错: TH0=-(1000/256); TL0=-(1000%2原创 2013-10-23 16:40:41 · 1207 阅读 · 0 评论 -
教训少占鱼之:单片机定时器初始化不能用负号\"-(1000/256)\"写法
//少占鱼制作 河北正定欢迎您 长沙航空职业技术学院 2010 年QQ:411656434 用负号的写法是错误的。定时时间并不是从-A到0。 TMOD=0x01; TH0=-(50000/256); TL0=-(50000%256);下面这样写才是对的:有的书上用的负号写法。误导我了!!负号是错误的,并不相当于65536-A;TH0=(65536-50000)/256;TL0=(6553原创 2013-10-23 16:40:39 · 800 阅读 · 0 评论 -
编程教训---四则运算别超范围(int*int结果不可超过int最大值)
注意:计算式,能不写成一大行的就分开写,只要保证了精度就可以了!!写一大行有时候反而影响精度!例如:unsigned long int X; double AD;AD=AD/50.0;X=AD*5000.0000/1023.00;最好先局部计算一下,X=AD*100/1023.00;1。浮点类型的不能做“模”运算。 例如:float a=1234.56; a=a%10; 这是错误的。只有原创 2013-10-23 16:36:25 · 2713 阅读 · 0 评论 -
教训少占鱼之:TLC1543--AD测试(单片机)教训(注意电压型芯片限流问题,器件属于电压输入型还是电流输入型)
先说一下,交流电压,搞了我几个月,搞死我了,找了好几种方法转直流,进AD,就是不行。NND!!!!在软件上仿真了好几个电路,都蛮好的波形。焊成板子就是不行,没出来电压,要么就是不滑,进了AD差天上去了,N次想砸了它GOUNIANGYANGDE!!!!!! //少占鱼制作 河北正定欢迎您 长沙航空职业技术学院 2010年5月 QQ:411656434 /*邮箱:ssou_1985@163原创 2013-10-23 16:36:58 · 2594 阅读 · 2 评论 -
单片机(STC12C2052AD)AD转换功能C语言程序(成功)+教训体会--注意关系运算优先级啊
首先:这个小程序搞了我两天,加上焊板子共三天,当然是业余时间。也有24个小时了。 啊!!!啊!! 啊!!! 两个晚上!!!我瞪着电脑两个晚上,我拆了装,装了拆(下载程序不在本板子上)。最后,就在今天!(“今”读四声)18点。可让我找到问题所在了!搞了两个晚上,AD转换控制流程,根本没错!!!!啊!! 错就错在一个小地方,打死都想不到的地方。 具体错在哪,请在下文中找!!!!原创 2013-10-23 16:37:11 · 5887 阅读 · 3 评论