自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

宁静致远

Keep quietude to reach far horizons.

  • 博客(137)
  • 收藏
  • 关注

原创 PCIe-块设备驱动-SG DMA

/* * kernel: 4.5.2 */#include #include #include #include #include // needed in 4.3.3#define TEST_PCIE_DEV_NAME "test_pcie"//#define PCI_VENDOR_ID_XILINX 0x10EE /* already defined in The d

2016-06-03 14:02:26 4015 2

原创 PCIe-块设备驱动-Single DMA

/* * kernel: 4.5.2 */#include #include #include #include #include // needed in 4.3.3#define TEST_PCIE_DEV_NAME "test_pcie"//#define PCI_VENDOR_ID_XILINX 0x10EE /* already defined in The d

2016-06-03 13:56:46 2804

原创 Linux块设备驱动: ramdisk

/* * linux: 4.5.2 */#include #include #include #define BLKDEV_NAME "test_blkdev"#define GENDISK_NAME "test_gendisk"#define NSECTORS 1024#define VMEM_DISK_MINORS 1struct ramdisk_dev { st

2016-05-07 14:48:48 1012

转载 平方根倒数速算法

#include #include #include #define MAGIC_NUMBER 0x5F3759DF/* 平方根倒数速算法 */static float inv_sqrt(float x) { float x_half = 0.5f * x; //long i = *(long *)&x; /* get bits for floating valu

2016-02-27 15:03:16 1033

原创 关于浮点数转换为整数的测试

#include int main(void) { float flt = 1.116533e24f; printf("%e\n", flt); printf("%ld\n", (long)flt); /* wrong */ printf("%u\n", *(unsigned long * const)&flt); /* 将浮点数理解为整数 */

2016-01-13 22:04:10 1450

原创 关于数组指针和函数指针的测试

/* * 关于数组指针和函数指针的测试 * -ansi -pedantic -errors */#include #include #define ARR_SZ 0x10void init_arr(int * const a, int cnt) { int i; for (i = 0; i < cnt; i++) a[i] = i;}voi

2016-01-12 21:04:25 405

原创 C语言 类型提升

/* 编译选项:-ansi -pedantic */#include int main(void) { char var0 = 0, var1 = 1; short var2 = 2, var3 = 3; printf("sizeof(char) == %d, sizeof(char + char) == %d\n", sizeof(var

2016-01-09 18:18:29 573

原创 C89标准库头文件——非本地跳转<setjmp.h>的应用

setjmp函数用于设置跳转的目的位置,longjmp函数进行跳转。env:保留了需要返回的位置的堆栈情况。setjmp的返回值:直接调用该函数,则返回0;若由longjmp的调用,导致setjmp被调用,则返回val(longjmp的第二个参数)。/* * -ansi -pedantic -errors * -O */#include #include jmp_buf

2016-01-08 15:08:23 834

转载 K&R C与ANSI C的区别

C语言由Dennis M. Ritchie在1973年设计和实现。从那以后使用者逐渐增加。到1978年Ritchie和Bell实验室的另一位程序专家Kernighan合写了著名的《TheC Programming Language》,将C语言推向全世界,许多国家都出了译本,国内有一些C语言书就是这本书的翻译或者编译。由这本书定义的C语言后来被人们称作K&R C。随着C语言使用得越来越广泛,出现

2016-01-01 12:01:42 1160

转载 C语言中函数的参数列表为空和void的区别

C语言中函数的参数列表为空和void的区别C标准和C++标准在main函数上是有区别的,所以我分别详细来介绍他们。对于C语言:  C89标准的main()函数是可接受的,尽管现在建议是使用C99的标准。C99标准只定义了如下两种可接受的函数原型:int main(void)int main(int argc, char *argv[])  以上函数原型微小的变形也是可以被接

2015-12-31 19:55:12 12977

转载 FLASH和EEPROM的区别

FLASH和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因而适合用作程序存储器,EEPROM则更多的用作非易失的数据存储器。当然用FLASH做数据存储器也行,但操作比EEPROM麻烦的多,所以更“人性化”的MCU设计会集成FLASH和EEPROM两种非易

2015-12-13 21:59:01 584

原创 C语言的printf函数的执行顺序

C语言的printf函数是先从右往左计算各表达式的值(入栈),再从左往右输出各表达式的值(出栈)。#include int main() { int i = 1; printf("%d %d %d\n", i++, i++, i++); printf("%d\n", i); return 0;}/** * 输出结果: * 3 2 1 * 4

2015-12-12 15:20:05 2828

原创 数据结构之快速排序

#include #include #include int a[1000];int partition(int * a, int low, int high) { int pivotKey; pivotKey = a[low]; //将枢轴记录取出来,此位置就空出来了 while (low < high) { while (low = piv

2015-09-18 11:20:46 367

原创 大整数加法回顾

/* hdu 1002 AC */#include #include #include char res[1001], num1[1001], num2[1001];void bigIntAdd(char * res, char * num1, char * num2) { char * tmp; int tmp2; char sum, jinwei;

2015-09-14 15:59:28 435

原创 二叉排序树(二叉搜索树,BST)的使用

/** * 输入一系列整数,建立二叉排序树, * 并进行前序、中序、后序遍历。 * 不计入重复元素。 * 方法:注意二级指针的使用, * 相当于引用一级指针, * 被调函数能改变调用函数的变量。 */#include #include #include typedef struct treeNode { int dat; struct treeNode *

2015-09-07 20:49:37 389

原创 命令行和文件的操作

/** * 使用命令行方式 * 复制任意多个文件内容到一个文件中 * 命令行形式:mycopy 1.txt 2.txt 3.txt 4.txt * 功能: 复制2.txt 3.txt 4.txt的内容到1.txt中 */#include #include #include #define BUF_SZ 81char buf[BUF_SZ];void main(int a

2015-09-06 14:27:11 419

原创 插入排序样例

#include int a[100];/* 插入排序 */void insertSort(int * a, int n) { int tmp, i, j; for (i = 1; i < n; i++) { tmp = a[i]; for (j = i-1; j >= 0 && a[j] > tmp; j--) a[

2015-09-06 13:13:01 317

原创 数组循环左移的一种方法

/** * 数组循环左移的一种方法 * 时间复杂度O(n),空间复杂度O(1) */#include #include typedef int element;element a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};int gcd(int a, int b) { if (b == 0) return a;

2015-08-30 13:44:45 2971

原创 Linux实验之Makefile

在Linux环境下编写一个工程,包括main.c、p1.c、h1.h、p2.c、h2.h五个文件。编写一个Makefile文件,能实现编译完成后,清除不需要的文件。CC = gccCFLAGS = -I.DEPS = h1.h h2.hOBJ = main.o p1.o p2.o%.o:%.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS)exefi

2015-06-06 16:14:57 828

原创 Linux学习笔记3

3.1 gcc的使用3.1.1 gcc简介查看gcc版本:gcc -v查看gcc所在路径:which gcc 3.1.2用gcc编译源程序(1)只有一个源文件的情况。编译、链接:$gcc hello.c -o hello执行:$./hello(若无-o选项,则为$./a.out)(2)有多个源文件的情况。编译、链接:$gcc hello.c printf2.

2015-06-05 00:06:23 305

原创 Linux学习笔记2

Linux学习笔记2一、用户管理命令1.useradd 添加用户例:useradd njzy passwd njzy2.userdel 删除用户例:userdel -r njzy 二、路径路径分为绝对路径和相对路径两类。绝对路径:从“/”(根目录)开始。相对路径:从用户工作目录或用户主目录开始。其中“.”表示用户工作目录,“..”表示工作目录的上级目录,

2015-05-26 00:07:16 456

原创 stc15系列单片机 timer组件

/** * 文件名:timer.h */#ifndef _TIMER_H#define _TIMER_H#define SYS_MCLK 11059200 //系统主时钟#define FOSC 11059200 //晶振频率#define USING_T0#define USING_STC15_T2#ifdef USING_T0 extern uint8_

2015-05-24 17:35:33 3883

原创 electromagneticDev组件

#ifndef _ELECTROMAGNETIC_DEV_H#define _ELECTROMAGNETIC_DEV_Hextern uint8_t elecMagState;void relay_on();void relay_off();void buzzer_toggle();#endif#include #include "stdint.h"#

2015-05-24 17:13:55 420

原创 51单片机项目 模拟智能传送装置

/** * 项目名:模拟智能传送装置 * 文件名:main.h */#ifndef _MAIN_H#define _MAIN_Htypedef enum WorkingState { STOP, START, TRANSFER} eWorkingState_t;sbit RELAY = P0^4;sbit BUZZER = P0^6;void samplingPCF

2015-05-22 13:17:43 1858 1

原创 51单片机项目 门禁系统

/** * 项目名:门禁系统 * 文件名:main.h */#ifndef _MAIN_H#define _MAIN_Hsbit RELAY_PIN = P0^4;sbit BUZZER_PIN = P0^6;void sys_init();void samplingDS1302();void samplingUlt();void openRelay();void c

2015-05-19 22:25:30 3362

原创 51单片机 超声波测距组件

/** * 超声波测距组件 * 文件名:ultrasonic.h */#ifndef _ULTRASONIC_H#define _ULTRASONIC_H#define somenop(); { \ _nop_();_nop_();_nop_();_nop_();_nop_(); \ _nop_();_nop_();_nop_();_nop_();_nop_();

2015-05-17 20:02:31 1294

原创 Linux学习笔记1

1.以root身份登录系统,列出\目录下的二级和三级子目录,将结果放到指定的文件中。解:ls -l /home > /home/direction2.txtls -l /home/user > /home/user/direction3.txt注:用ls列出目录的内容,用-l列出文件详细信息,后面接的是目录的路径,然后用重定向将查询的结果输出到指定的文件中。2.在自己的

2015-05-13 23:32:00 370

原创 Keil C51中printf()函数的说明

在C51中,使用printf()函数进行格式化输出时,格式控制符与ANSI C有所不同。在格式控制字符中,b表示byte以十进制输出uint8_t : %bu以十进制输出int8_t : %bd#include void tst_printf (void) { char a = 1; int b = 12365; long c = 0x7FFFFFFF

2015-05-13 13:20:15 5833

原创 前后台系统的应用:改版的多功能记录仪

/** * 51单片机项目:多功能记录仪 * 文件名:main.h */#ifndef _MAIN_H#define _MAIN_Htypedef struct msg { uint8_t hour; //时 uint8_t minute; //分 uint8_t second; //秒 uint8_t tempIntPart; //温度 uint8_t hu

2015-05-12 23:37:32 584

转载 事件驱动机制在单片机软件中的应用

一、Windows的事件驱动机制    在Windows系统中,程序的设计围绕事件驱动来进行。当对象有相关的事件发生时(如按下鼠标键),对象产生一条特定的标识事件发生的消息,消息被送入 消息队列,或不进入队列而直接发送给处理对象,主程序负责组织消息队列,将消息发送给相应的处理程序,使相应的处理程序执行相应的动作,做完相应的处理后 将控制权交还给主程序。在这种机制中,对象的请求仅仅是向队列中

2015-05-12 20:19:43 4198 1

转载 前后台系统

早期的嵌入式系统中没有操作系统的概念,程序员编写嵌入式程序通常直接面对裸机及裸设备。在这种情况下,通常把嵌入式程序分成两部分,即前台程序和后台程序。  应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看成后台行为。前台程序通过中断来处理事件;后台程序则掌管整个嵌入式系统软、硬件资源的分配、管理以及任务的调度,是一个系统管理调度程序。这就是通常所说的前后台系统。一般情

2015-05-12 20:03:39 1167

原创 51单片机项目:多功能记录仪

main.h/** * 51单片机项目:多功能记录仪 * 文件名:main.h */#ifndef _MAIN_H#define _MAIN_Htypedef struct msg { uint8_t hour; //时 uint8_t minute; //分 uint8_t second; //秒 uint8_t tempIntPart; //温度 ui

2015-05-06 23:46:21 1112

原创 51单片机常用开发工具的一些说明

51单片机常用开发工具硬件工具:电烙铁、万用表、双踪示波器、逻辑分析仪软件工具:Keil:这个版本最好选择v4.72的,可以选择UTF-8的字符编码,这样就不容易出现乱码了。我之前用的v4.00版本的就没有这一功能。STC-ISP下载软件:这个最好选择最新版本的。Protel 99 SE或Altum Designer:这两个用于绘制电路原理图和PCB设计。Microso

2015-05-05 21:50:51 2010

原创 位运算复习——字节的奇偶校验和反转一个字节中的二进制位

#include #include /** * 用软件实现字节的奇偶校验 * 返回值:如果这个字节中含有奇数个1,则返回1; * 否则返回0 */uint8_t parityCheck(uint8_t val) { uint8_t cnt = 0; while (val) { if (val & 0x01)

2015-04-15 12:39:46 1422

原创 循环冗余检验(CRC)求帧检验序列(FCS)

#include #include /** * 循环冗余检验(CRC),求帧检验序列(FCS) * 参数:M是待传送的数据 * p是除数 * 返回:帧检验序列(FCS) * 说明:都是从0开始编号。 */uint32_t getFCS(uint32_t M, uint32_t p) { uint32_t tmp; uint8_t plen =

2015-04-14 15:07:57 8881

原创 单片机项目 温度记录仪

main.c/** * 工程名称:温度记录仪 * Mode 0: 温度采集间隔选择模式,用以确定温度采集间隔 * Mode 1: 采集并显示实时时间,采集温度并缓存 * Mode 2: 查看采集到的10个温度样本 * * */#include #include "stdint.h"#include "timer.h"#include "digitalTu

2015-04-13 19:32:05 1197 1

原创 基于OneWire组件的DS18B20组件

DS18B20.h#ifndef _DS18B20_H#define _DS18B20_Hbit DS18B20_start();bit DS18B20_getTemperature(int16_t * temp);uint8_t getIntPart(int16_t temp);uint8_t getDecPart(int16_t temp);bit getSign(int1

2015-04-13 10:31:02 627

原创 OneWire组件

OneWire.h#ifndef _ONEWIRE_H#define _ONEWIRE_Hsbit ONEWIRE_PIN = P1^4; //检查通信引脚是否正确!bit OneWire_reset();void OneWire_write(uint8_t dat);uint8_t OneWire_read();#define OneWire_skip() OneWir

2015-04-13 10:20:14 1729

原创 I2C组件(新)

/** * 文件名:I2C.c * 描 述:I2C总线驱动模块(新) * 备 注:基于IO口模拟实现,总线时序延时等皆由软件方式实现 * 时钟信号SCL的产生和延时很重要 */#include #include #include "stdint.h"#include "I2C.h"/* 产生总线起始信号 */void I2Cstart() { I

2015-04-10 13:28:14 456

原创 将16位无符号整数转化为BCD码存放在数组中

#include #include #include uint8_t arry[3];/** * 将16位无符号整数转化为BCD码, * 每个BCD码占用半字节,一共占用三个字节。 */void uint16_tToBCD(uint8_t * arry, uint16_t num) { uint8_t index = 0, tmp; memset(arry, 0

2015-04-10 12:47:58 4413

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除