- 博客(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关注的人