自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (1)
  • 收藏
  • 关注

原创 数据结构之循环队列

队列是一个能够实现“先进先出”的存储结构。队列分为链式队列和静态队列;静态队列一般用数据来实现;链式队列是用链表来实现队列。在对循环队列操作之前,先要建立队列结构元素:#define BUF_SIZE 10 //循环队列的空间大小typedef struct Queue{ int *BUF; int front; int rear;}QUEUE;1.初始化是为新建的队列分配内存空间,然后在将头尾指针置零:void initQueue(QUEUE *qu

2021-04-22 11:06:30 359

原创 STM32的IAP

IAP(In Application Programming)即在应用编程,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品的固件程序进行更新升级。通常实现IAP功能时,即用户程序运行自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信方式(如USB USART)接收程序或者数据,执行对第二个部分代码的更新;第二个项目代码才是真正的功能代码。这两部分代码项目...

2021-04-07 10:11:45 1125 2

原创 UCOS-III任务管理

多任务操作系统最主要的就是对任务的管理,包括任务的创建、挂起、删除和调度等,因此对于UCOS-III操作系统中任务管理的理解就显得尤为重要。1.UCOS-III启动和初始化: a:最先肯定是要调用CPU_Init()初始化UCOS-III; b:创建任务,一般我们在main()函数中只创建一个start_task任务,其他任务都在start_task任务中创建,在调用OSTaskCreak()函数创建任务的时候一定要调用OS_CRITICAL_ENTER()函数进入临界区,任...

2021-02-20 10:16:21 511

原创 UCOS-III的工作流程图

UCOS-III的工作流程分为如下几步:1.初始化变量(OSIint):初始化所有变量、数据结构、创建最低优先级空闲任务OSTaskIde,(如果使用了统计任务,也在此创建),创建6个空数据链表:1空任务控制块链表;2空事件控制块链表;3空队列控制块链表;4空标志组链表;5空内存控制块链表;6空闲定时器控制块链表。2.创建任务(OSTaskCreate):至少创建一个任务。一般创建一个最高优先级别TaskStart任务,任务调度后,在这个任务中再创建其他任务,初始化硬件,并开中断。3.进入多任务

2021-02-20 09:32:48 1114

原创 STM32读保护

1.功能及设置功能:读保护设置后将不能读出flash的内容;当解除读保护的时候stm32会自动擦出整篇FLASH。设置:在程序的开头加入“读保护”代码,即实现了读保护功能。(每次程序运行前先开保护)(1)设置读保护:if(FLASH_GetReadOutProtectionStatus() != SET){ FLASH_Unlock(); //不解锁FLASH也可设置...

2019-01-10 16:29:17 3648 1

原创 keil c51不编译未调用函数

      在用KEIL C51,经常会遇到定义了的函数未调用,编译时会发出“UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS”的警告,我们不想手动去删除,也不想这部分代码被编译和链接进最终的程序,以免浪费有限的储存空间。方法如下:       未设置的情况下:设置如下1.把target options中的device页中选上“use Extended Li...

2018-03-23 10:04:56 8425 7

原创 冒泡排序

      冒泡排序(Bubble Sort)一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。      先声明一个用于排序用的顺序表结构#define MAXSIZE 10 /* 用于要排序数组个数最大值 */typedf struct{ int r[MAXSIZE]; /* 用于存储要排序数组 */...

2018-03-08 08:52:03 227

原创 C语言之指针函数和函数指针

1.指针函数:本质是一个函数。函数返回类型是某一类型的指针       格式:类型标识符  * 函数名(参数表)       int *f(int x, int y);int *fun();int *p;p = fun();      当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,用于需要该指针或地址的表达式中。2.函数指针是指向函数的指针变量,即本质是一个指针变量。 ...

2018-03-06 15:02:21 896

原创 C语言之自动类型转换

自动转换遵循以下规则:      1)若参与运算的类型不同,则先转换成统一类型,然后进行运算。      2)转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int型转换成long型后再进行运算。            a.若两种类型的字节数不同,转换字节数高的类型            b.若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型  ...

2018-03-06 14:32:17 307

原创 C语言之结构体

      结构体(struct)是由一系列相同类型或者不同类型的数据构成的数据集合,也叫结构。结构也是一种数据类型,可以使用结构变量,因此,与其他类型的变量一样,在使用结构变量时要先对其定义。定义结构变量的一般格式为:struct 结构名{ 数据类型 变量名; 数据类型 变量名; ...}结构体变量;结构名是结构的标识符不是变量名。构成结构的每一个类型变量称为结构成...

2018-02-28 17:23:54 375

原创 KEIL C51中的data、idata、xdata、code详解

      51单片机采用哈佛结构。内存空间编址有重叠。可以在不同总线上定义不同的变量。在KEIL C51中定义了xdata、idata、xdata、code几种域修饰符。这些修饰符决定了变量访问方式。      data:固定指前面0x00-0x7F的128个RAM,可以用acc直接读写,速度最快,生成的代码也最小。      idata:固定指前面0x00-0xFF的256个RAM,其中前12...

2018-02-25 18:15:11 35577 5

原创 UART串口协议

      通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UATR,是一种异步收发传输器。将数据由串行通信与并行通信间做传输转换,作为并行输入称为串行输出的芯片。UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。1、UART通信协议      UART作为异步串口通信协议的一种,工作原理是...

2018-02-10 16:50:47 27070 1

原创 智能卡系统设计之安全体系

IC卡的安全体系是IC卡最核心的模块,高强度的安全保护也是IC卡得以迅速推广的重要原因。1、卡片安全结构      在IC卡,COS的安全模块分散在COS的各层次中,包括最低层的加密算法实现、系统安全服务和应用安全控制等。其中最核心的是安全服务中系统所提供的安全策略。      卡片的安全性也就是对卡片内数据对象访问的安全控制能力,卡片中的主要数据对象是命令和文件,所以也就是对文件访问

2018-02-06 09:18:01 621

原创 智能卡系统设计之文件系统

智能卡由硬件资源(智能卡芯片)与卡的操作系统COS组成,COS是智能卡的灵魂,智能卡正因为有了COS才具有了“智能”。COS由于不可避免地受到了智能卡内微处理器芯片的性能及内存容量的影响,因此,在很大程度上不同于我们通常所见的微机上的操作系统。COS是一个专用系统而不是通用系统。即:一种COS一般都只能应用于特定的某种智能卡,不同卡内的COS一般是不相同的,因为COS一般都是根据某种智能卡的特点及

2018-01-30 17:30:24 1398

原创 队列的链式存储结构

队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,我们把它简称为链队列。为了操作上的方便,我们将队头指针指向链队列的头结点,而队尾指针指向终端结点,如下图所示:空队列时,front和rear都指向头结点。链队列的结构为:typedef int QElemType;typedef struct QNode{ QElemType data;

2018-01-26 09:57:17 596

原创 栈的链式存储结构

栈的链式存储结构,简称为链栈。      栈是栈顶来做插入和删除操作,由于单链表有头指针,而栈顶指针也是必须得,所以比较好的办法是把栈顶放在单链表的头部。因为栈顶在头部,单链表中常用的头结点也就失去了意义,通常对于链栈来说。是不需要头结点的。如下图所示:对于空栈来说,链表原定义是头指针指向空,那么链栈的空其实就是top=NULL。链栈的结构代码如下:typedef st

2018-01-25 18:03:31 647

原创 栈的顺序存储结构

栈是限定仅在表尾进行插入和删除操作的线性表。      我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。      既然栈是线性表的特征,那么栈的顺序存储其实也是线性表顺序存储的简化,我们称为顺序栈。线性表是用数组来实现的,我们定义一个top变量来指

2018-01-25 17:00:32 305

原创 单链表的相关操作

1.单链表的读取      在线性表的顺序存储结构中,我们计算任意一个元素的存储位置很容易。单在单链表中,由于第i个元素到底在哪?没办法一开始就知道,必须得从头开始找。获得链表第i个数据的算法思路如下:1)声明一个结点p指向链表第一个结点,初始化j从1开始;2)当j3)若到链表末尾p为空,则说明第i个元素不存在;4)否则查找成功,返回结点p的数据。代码算法实现如下:/*

2018-01-25 10:56:26 634

原创 数据结构与算法之线性表的链式存储结构

在前章中的顺序结构中,每个数据元素只需存数据元素信息就可以了,而在链式结构中,除了要存数据元素信息外,还要存储它的后继元素的存储地址。     因此,为了表示每个数据元素ai与其直接后继数据元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。我们把存储数据信息的域称为数据域,把存储直接后继位置的域称为指针域。指针域

2018-01-24 17:15:31 449

原创 数据结构与算法之线性表的顺序存储结构

线性表(List):零个或多个数据元素的有限序列。      线性表的数据对象集合为{a1,a2,......,an},每个元素的类型均为DataType。其中,除第一个元素a1外,每个元素有且只有一个直接前驱元素,除了最后一个元素an外,每个元素有且只有一个后继元素。数据元素之间的关系是一对一的关系。      线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素

2018-01-24 14:27:34 376

原创 ISO14443协议之防冲突

正常情况下读写器每一时刻只能对磁场中的一张射频卡进行读写操作。但是当多张卡片同时进入读写器的射频场时,读写器需要选出唯一一张卡片进行读写操作,这就是防冲突。      防冲突机制是非接触式智能卡特有的问题。在接触式智能卡的操作中是不存在冲突的,因为接触式智能卡的读写器有一个专门的卡座,一张卡座只能插一张卡片,不存在读写器同时面对两张以上卡片的问题。常见的非接触式智能卡中的防冲突机制主要有以下几

2018-01-19 15:24:15 3977

原创 ISO14443协议之信号接口

1.信号接口ISO14443协议支持两种信号接口:Type A和Type B。信号接口的意思是双方都能识别的信号,包括信号的频率、幅度和编码方式。Type A和Type B的主要区别是:编码、调制和防冲突三个方面。两种方式的共同点是:载波频率fc = 13.56MHZ,数据传输速率为fc/128=106kbps。从PICC发往PCD的信号均通过负载通/断生成频率为847kHZ(fs=fc/16

2018-01-17 09:22:41 3300

原创 source insight编辑器和Keil 编译器的代码对齐问题的解决方法

第一步:在source insight 中设置TAB符转换位空格:1)在options->Document options中将Expand Tabs选项选中打钩;2)TAB符宽度设置,在TAB width 中填入期望数值,一般为4个空格,即填4。如下图1:第二步:在Keil中设置TAB符转换位空格1)edit->configuration 下方有Tab size,默认为4;2)c/c+...

2018-01-15 10:07:24 2720

转载 C语言之volatile关键字

1.volatile关键字的介绍    volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其他线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。2.volatile关键字的用法    当要求使用volatile关键字声明的变量的时候,编译器总是重新从它所在的内存

2018-01-11 16:49:01 383

转载 智能卡系统设计之断电保护和数据恢复

1.数据备份的原因    智能卡由外部供电,如果在写数据的过程中突然掉电,导致卡内的数据丢失,就有可能造成COS崩溃或者用户数据写入不正确。因此COS必须提供掉电保护机制保证卡内数据的读写安全。    数据备份就是COS的掉电保护机制,在写入数据时,将整个页面备份后再擦除写入,防止在改写过程中出现突然掉电,导致数据丢失。2.数据备份的作用     备份机制设计的目的是采取一种措施,

2018-01-09 12:58:01 874

原创 Keil C51中变量和函数的绝对地址的定位和访问

1.变量绝对地址定位1)在定义变量时使用 _at_ 关键字即可,如:uint8 code value _at_ 0x5555; //把变量value定义在程序区的0x5555处注:在使用 _at_ 关键字定位绝对地址时,不能对其赋初值。2)使用Keil c51编译器定义绝对地址的变量首先定义一个变量:uint8 code value;之后在编译器中打开project->options fo...

2018-01-09 09:50:02 8152

原创 C语言之const关键字

【优点】:1)与预编译相比,预编译指令(#define)只是进行简单的替换,不能进行类型检查。                2)可以保护被修饰的东西,防止意外修改,增强程序的健壮性。               3)编译器通常不为普通const常量分配存储空间,而是将它们保存在符号中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。【用法】:1)const int ...

2018-01-09 08:53:13 392

原创 C语言的strcpy函数和memcpy函数的区别

strcpy函数和memcpy函数的区别如下:1)复制的内容不同。strcpy函数只能复制字符串,而memcpy函数可以复制任意内容,例如字符数组、整型、结构体等;2)用途不同。通常在复制字符串时用strcpy函数,而需要复制其他类型数据时则一般用memcpy函数;3)复制方法不同。strcpy函数不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy函数

2018-01-08 18:10:50 1081

原创 C语言之memset函数

【函数原型】:void *memset(void *ptr, int value, size_t n)【头文件】:#include 【函数说明】:此函数将ptr所指向的某一块内存中的每一字节的内容全部设置为第二个参数value指定的ASCLL值,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作。【参数】:1)ptr:为要操作的内存的首地址。  2)value:为要设

2018-01-08 18:02:08 282

原创 C语言之strcpy函数

【函数原型】:char* strcpy(char *dst, const char *src)【头文件】:#include 【函数说明】:从源src所指的内存地址开始且含有NULL结束符的字符串复制到以dst所指的开始地址空间【参数】:1) [OUT] dst:目标地址  2)  [IN] src:源地址注:1)strcpy只能复制字符串。    2)strcpy不需要指定

2018-01-08 17:29:37 413

原创 C语言之memcpy函数

【函数原型】:void *memcpy(void *dst, const void *src, size_t n)【头文件】:#include 【函数说明】:从源src所指的内存地址的起始位置开始拷贝n个字节到dst所指的内存地址的起始位置中【参数】:1)[OUT] dst:目的数组的首地址                2)[IN] src:源数组的首地址

2018-01-08 12:26:57 424

原创 在Keil C51下生成LIB库文件以及如何使用LIB库文件

                                                                                                                如何生成LIB库文件1.首先准备好生成LIB库文件对应的.c和.h文件,在这里用到的.c和.h文件分别是:"reg303.h""rjwf303_flash.h""rjwf303...

2018-01-03 14:51:00 7564

转载 IC卡的简介

IC卡即集成电路卡(Integrated Circuit Card),是超大规模集成电路技术、计算机技术以及信息安全技术等发展的产物。它将集成电路芯片镶嵌于塑料基片的指定位置上,利用集成电路的可存储特性,保存、读取和修改芯片上的信息。    按照与外界数据传送的形式来分,IC卡分为接触式和非接触式:接触式IC卡的芯片金属触点暴露在外,可以直观看见,数据存储在卡体内嵌的集成电路(IC)中,通过芯

2018-01-03 11:56:09 1292

STM32读保护

STM32对读保护的设置及使用ST-Link Utility对使用读保护机制的STM32擦出FLASH

2019-01-10

空空如也

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

TA关注的人

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