- 博客(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
4182
1
原创 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
2893
原创 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 1 struct ramdisk_dev { st
2016-05-07 14:48:48
1073
转载 平方根倒数速算法
#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
1093
原创 关于浮点数转换为整数的测试
#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
1515
原创 关于数组指针和函数指针的测试
/* * 关于数组指针和函数指针的测试 * -ansi -pedantic -errors */ #include #include #define ARR_SZ 0x10 void 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
433
原创 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
613
原创 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
887
转载 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
1224
转载 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
13230
转载 FLASH和EEPROM的区别
FLASH和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因而适合用作程序存储器,EEPROM则更多的用作非易失的数据存储器。当然用FLASH做数据存储器也行,但操作比EEPROM麻烦的多,所以更“人性化”的MCU设计会集成FLASH和EEPROM两种非易
2015-12-13 21:59:01
631
原创 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
2945
原创 数据结构之快速排序
#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
406
原创 大整数加法回顾
/* 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
478
原创 二叉排序树(二叉搜索树,BST)的使用
/** * 输入一系列整数,建立二叉排序树, * 并进行前序、中序、后序遍历。 * 不计入重复元素。 * 方法:注意二级指针的使用, * 相当于引用一级指针, * 被调函数能改变调用函数的变量。 */ #include #include #include typedef struct treeNode { int dat; struct treeNode *
2015-09-07 20:49:37
416
原创 命令行和文件的操作
/** * 使用命令行方式 * 复制任意多个文件内容到一个文件中 * 命令行形式:mycopy 1.txt 2.txt 3.txt 4.txt * 功能: 复制2.txt 3.txt 4.txt的内容到1.txt中 */ #include #include #include #define BUF_SZ 81 char buf[BUF_SZ]; void main(int a
2015-09-06 14:27:11
455
原创 插入排序样例
#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
344
原创 数组循环左移的一种方法
/** * 数组循环左移的一种方法 * 时间复杂度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
3025
原创 Linux实验之Makefile
在Linux环境下编写一个工程,包括main.c、p1.c、h1.h、p2.c、h2.h五个文件。编写一个Makefile文件,能实现编译完成后,清除不需要的文件。 CC = gcc CFLAGS = -I. DEPS = h1.h h2.h OBJ = main.o p1.o p2.o %.o:%.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS) exefi
2015-06-06 16:14:57
893
原创 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
343
原创 Linux学习笔记2
Linux学习笔记2 一、用户管理命令 1.useradd 添加用户 例:useradd njzy passwd njzy 2.userdel 删除用户 例:userdel -r njzy 二、路径 路径分为绝对路径和相对路径两类。 绝对路径:从“/”(根目录)开始。 相对路径:从用户工作目录或用户主目录开始。其中“.”表示用户工作目录,“..”表示工作目录的上级目录,
2015-05-26 00:07:16
487
原创 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
3944
原创 electromagneticDev组件
#ifndef _ELECTROMAGNETIC_DEV_H #define _ELECTROMAGNETIC_DEV_H extern uint8_t elecMagState; void relay_on(); void relay_off(); void buzzer_toggle(); #endif #include #include "stdint.h" #
2015-05-24 17:13:55
467
原创 51单片机项目 模拟智能传送装置
/** * 项目名:模拟智能传送装置 * 文件名:main.h */ #ifndef _MAIN_H #define _MAIN_H typedef enum WorkingState { STOP, START, TRANSFER } eWorkingState_t; sbit RELAY = P0^4; sbit BUZZER = P0^6; void samplingPCF
2015-05-22 13:17:43
1915
1
原创 51单片机项目 门禁系统
/** * 项目名:门禁系统 * 文件名:main.h */ #ifndef _MAIN_H #define _MAIN_H sbit 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
3478
原创 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
1371
原创 Linux学习笔记1
1.以root身份登录系统,列出\目录下的二级和三级子目录,将结果放到指定的文件中。 解: ls -l /home > /home/direction2.txt ls -l /home/user > /home/user/direction3.txt 注:用ls列出目录的内容,用-l列出文件详细信息,后面接的是目录的路径,然后用重定向将查询的结果输出到指定的文件中。 2.在自己的
2015-05-13 23:32:00
397
原创 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
6000
原创 前后台系统的应用:改版的多功能记录仪
/** * 51单片机项目:多功能记录仪 * 文件名:main.h */ #ifndef _MAIN_H #define _MAIN_H typedef struct msg { uint8_t hour; //时 uint8_t minute; //分 uint8_t second; //秒 uint8_t tempIntPart; //温度 uint8_t hu
2015-05-12 23:37:32
626
转载 事件驱动机制在单片机软件中的应用
一、Windows的事件驱动机制 在Windows系统中,程序的设计围绕事件驱动来进行。当对象有相关的事件发生时(如按下鼠标键),对象产生一条特定的标识事件发生的消息,消息被送入 消息队列,或不进入队列而直接发送给处理对象,主程序负责组织消息队列,将消息发送给相应的处理程序,使相应的处理程序执行相应的动作,做完相应的处理后 将控制权交还给主程序。 在这种机制中,对象的请求仅仅是向队列中
2015-05-12 20:19:43
4324
1
转载 前后台系统
早期的嵌入式系统中没有操作系统的概念,程序员编写嵌入式程序通常直接面对裸机及裸设备。在这种情况下,通常把嵌入式程序分成两部分,即前台程序和后台程序。 应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看成后台行为。前台程序通过中断来处理事件;后台程序则掌管整个嵌入式系统软、硬件资源的分配、管理以及任务的调度,是一个系统管理调度程序。这就是通常所说的前后台系统。一般情
2015-05-12 20:03:39
1222
原创 51单片机项目:多功能记录仪
main.h /** * 51单片机项目:多功能记录仪 * 文件名:main.h */ #ifndef _MAIN_H #define _MAIN_H typedef struct msg { uint8_t hour; //时 uint8_t minute; //分 uint8_t second; //秒 uint8_t tempIntPart; //温度 ui
2015-05-06 23:46:21
1226
原创 51单片机常用开发工具的一些说明
51单片机常用开发工具 硬件工具:电烙铁、万用表、双踪示波器、逻辑分析仪 软件工具: Keil:这个版本最好选择v4.72的,可以选择UTF-8的字符编码,这样就不容易出现乱码了。我之前用的v4.00版本的就没有这一功能。 STC-ISP下载软件:这个最好选择最新版本的。 Protel 99 SE或Altum Designer:这两个用于绘制电路原理图和PCB设计。 Microso
2015-05-05 21:50:51
2134
原创 位运算复习——字节的奇偶校验和反转一个字节中的二进制位
#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
1475
原创 循环冗余检验(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
9042
原创 单片机项目 温度记录仪
main.c /** * 工程名称:温度记录仪 * Mode 0: 温度采集间隔选择模式,用以确定温度采集间隔 * Mode 1: 采集并显示实时时间,采集温度并缓存 * Mode 2: 查看采集到的10个温度样本 * * */ #include #include "stdint.h" #include "timer.h" #include "digitalTu
2015-04-13 19:32:05
1245
原创 基于OneWire组件的DS18B20组件
DS18B20.h #ifndef _DS18B20_H #define _DS18B20_H bit 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
694
原创 OneWire组件
OneWire.h #ifndef _ONEWIRE_H #define _ONEWIRE_H sbit 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
1910
原创 I2C组件(新)
/** * 文件名:I2C.c * 描 述:I2C总线驱动模块(新) * 备 注:基于IO口模拟实现,总线时序延时等皆由软件方式实现 * 时钟信号SCL的产生和延时很重要 */ #include #include #include "stdint.h" #include "I2C.h" /* 产生总线起始信号 */ void I2Cstart() { I
2015-04-10 13:28:14
501
原创 将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
4530
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人