自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (10)
  • 收藏
  • 关注

原创 Python序列化(pickle和json)

Python序列化(pickle和json) 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。变量从内存中变成可存储或传输的过程称之为序列化,序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上,把变量内容从序

2018-01-28 14:18:21 665

原创 Python异常

Python异常在学习python的过程中,感觉是一门特别容易出错的脚本程序语言,不像C/C++和java在编译的过程中对于语法会有各种检查,尤其是数据类型等,但是在python中,一个变量是可以指向任何类型的,要是编程习惯不好,一不小心就可能造成一些不属于该变量类型的操作,从而引起程序终止。同时,在做一些操作时,例如文件打开等,也可能不成功引发异常等,这个和其他语言一样必须要有异常处理机制。

2017-11-12 23:22:49 851

原创 Python类

Python类类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。Python也支持类类型。在python中类的定义通过关键字class,紧接着是(object),表示该类是从哪个类继承下来的,如果没有合适的继承类,就使用

2017-11-05 22:45:40 522

原创 Python函数

Python函数函数的定义在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回表示函数结束。例如:def function(arges):    函数主体    return函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回如果没有re

2017-10-22 22:43:03 426

原创 Python基础知识

Python基础知识Python简介Python是一门脚本语言,不同于C/C++编译型语言,python是一门解释型语言,不要通过编译生成可执行文件,编写的.py后缀的python源文件便可以通过pyhton解释器就可以执行。Python作为脚本语言,虽然相比C/C++在执行效率方面不高,但是开发效率高,而且Python就为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、

2017-09-25 22:33:28 385

原创 AVL平衡树及插入操作的C语言实现

源码地址:http://download.csdn.net/detail/mcu_tian/9555855AVL平衡二叉树是一种特殊的查找树,是一种每个节点的左右子树深度不超过1。AVL是绝对平衡树,增删的操作复杂度过高,应用不如红黑树。AVL树的引入,就是为了解决二叉查找树的不平衡性导致时间复杂度大大下降。那么AVL就保持住了(BST)的最好时间复杂度O(logn),所以每次的插

2016-06-21 22:26:32 1166

原创 二叉查找树的查找、插入、删除、释放等基本操作的实现(C语言)

二叉查找树是一种特殊性质的二叉树,该树中的任何一个节点,它的左子树(若存在)的元素值小于节点的元素值,右子树(若存在)的元素值大于节点的元素值。实现了二叉树查找树的实现以及基本操作,包括查找、插入、删除、初始化、释放等。源码下载地址:http://download.csdn.net/detail/mcu_tian/9548788二叉查找树节点的结构定义相比二叉树,二叉查找树的元素结

2016-06-14 11:31:39 8943

原创 二叉树(C语言)

树可以使用链表也可以用数组实现数组的实现通过下表与树的节点的序列对应,但是该方不够灵活,而且在C语言中,数组不进行下界检查,而且不能进行动态增长。在比较通用的实现方式使用的是树链表实现。对于大量的数据输入,链表的线性范文时间太慢,不宜使用,树的大部分操作的运行时间平均为O(log N)具体参照源码:二叉树二叉树是最简单、应用最广泛的树,通过构造表达式树,对表达式树的一些

2016-06-03 17:33:48 872

原创 BusyBox制作Initramfs嵌入式Linux根文件系统

嵌入式Linux系统由linux内核与根文件系统两部分构成,两者缺一不可(无根文件系统的内核无法启动)使用busybox构建嵌入式根文件系统目录结构,配置内核,并且使用Initramfs制作成根文件系统,根文件系统与内核都一起烧写在镜像中创建目录结构根目录的目录结构主要包含如下目录/dev /etc /lib /usr /var /proc /tmp /home /

2016-06-01 15:44:28 10272

原创 栈的链表实现(C语言)

源码文件地址 :http://download.csdn.net/detail/mcu_tian/9530628由前面:http://blog.csdn.net/mcu_tian/article/details/51493081所述链表实现的栈在操作过程中频繁的pop和push会伴随着频繁的malloc和free,伴随着很大的系统开销。基于此,在此实现中,通过实现一个空闲节点链表,将p

2016-05-25 11:46:21 6293

原创 栈及实现(C语言)以及中缀式到后缀式的转换实例

栈是一种先进后出(后进先出)的线性表,其限制是仅允许在表的一端进行插入和删除运算。栈可以用链表实现,也可以用数组实现。在使用链表实现时,栈顶指针指向链表的前端节点,当栈顶指针为NULL时即为空栈。在进行插入操作时,将节点插入链表的前端节点,并将栈顶指针指向插入节点。在进行删除操作的时候,将节点栈顶指针指向的节点(非空)删除,栈顶指针指向后面的链表节点。使用链表实现栈的方

2016-05-24 20:13:48 2711

原创 常见的几种内排序算法以及实现(C语言)

所有未排序的数组是经过检查合法的主要的内排序包括冒泡、插入、希尔、堆排序、归并、快速、桶排序等冒泡排序冒泡排序应该是排序中最简单的算法了主要思路如下:1: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。2:对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3:针对所有的元素重复以上的步骤,除了最后一个。

2016-05-18 18:43:02 14825 1

原创 MDK5错误以及解决方法

之前做stm32用MDK4.7版本,一直好好的。但是最近手痒,加上MDK5可以导入lwip以及ucos,所以就想试试。在这两天用的程中,磕磕绊绊的遇到不少问题,好在最终都解决了。现在基本上都能够用起,记录一下吧。1:在新建工程的时候,发现没有对应的device。MDK5不像MDK4,在安装的时候,device就已经集成在安装包里。对应的芯片设备型号需要我们自己根据需要导入。

2015-12-24 16:16:04 27616 3

原创 lwip网络接口netif

一个系统中可能有多个网络接口,有可能是以太网,有可能是WiFi,也有可能是其他的网络接口。在lwip中每一个网络接口都由一个netif结构体表示。表示不同网卡的netif结构体链接成一个链表。全局变量struct netif *netif_list指向该链表表头。全局变量struct netif *netif_default指向的netif结构所表示的网卡为缺省网卡。在发送消息的时候,会首

2015-11-20 20:49:23 6464 2

原创 lwip包缓冲区pbufs

lwip信息包是存储在pbufs中,pbufs作为lwip的数据缓冲区,是由pbuf结构组成的链表。数据存在pbufs链中各个pbuf节点所指向存储块中。pbuf结构体的定义如下:struct pbuf {  struct pbuf *next;   //pbuf链中下一个pbuf的地址  void *payload; //指向该pbuf的数据存储区的首地址

2015-11-20 15:36:21 4510

原创 lwip内存分配方式

Lwip 的动态内存管理机制可以有三种: C 运行时库自带的内存分配策略、动态内存堆(HEAP)分配策略和动态内存池(POOL)分配策略。库自带的内存分配策略和动态内存堆(HEAP)分配策略这两种两种策略使用者只能从中选择一种。在opt.h头文件中配置宏MEM_LIBC_MALLOC来配置是使用C库自带的内存分配还是使用使用lwip内部实现的内存分配。动态内存堆分配策略原理就是在一个事

2015-11-19 22:00:38 4521

原创 LwIP在stm32上的无操作系统移植

LwIP是一个轻型IP协议,有无操作系统的支持都可以运行。这里的移植是无操作系统移植。LwIP虽然是一个轻型的IP协议,但是TCP/IP基本功能都有。而且占用的资源不多,非常适合用于嵌入式系统。移植的平台:STM32F103VE+MDK 4.7+ LWIP-1.4.1下载LwIP-1.4.1源码以及contrib-1.4.1_官网地址:http://download.s

2015-11-12 23:30:19 24453 3

转载 gcc中编译包含math.h的程序注意加-lm参数!

#include 程序中用到数学函数.原本只要在程序中加上面这一行就行了.gcc不知道犯什么毛病.不仅程序里要有include,编译的时候也要在指令后面加-lm否则就这德行了:/tmp/cc4FFwdt.o(.text+0x126): In function `main':: undefined reference to `sqrt'/tmp/cc4FFwd

2015-10-23 10:24:53 5028 1

原创 确认当前系统的大小端存储模式

大端模式:数据的高字节,保存在内存的低地址中,而数据的低字节保存在内存的高地址中。小端模式:数据的高字节,保存在内存的高地址中,而数据的低字节保存在内存的低地址中。检查当前系统的存储模式为大小端的一种方式是使用union类型数据。由于union中所有的数据成员共用一个空间,所有的数据成员都是共用一个起始地址。空间的大小为数据成员中长度最长的数据成员。具体实现如下

2015-10-22 09:31:40 656

原创 UC/OS II消息队列管理实例

实例描述:平台:MDK4.7+UCOSII+STM32F103系统移植:http://blog.csdn.net/mcu_tian/article/details/48224361UCOS II消息队列管理实例工程:http://download.csdn.net/detail/mcu_tian/9164937该工程实例除了使用消息队列的实例之外,还有在APP文

2015-10-09 09:49:16 1296

转载 UC/OS II 软件定时器

转载出处:http://www.openedv.com/posts/list/15061.htmUCOSII从V2.83版本以后,加入了软件定时器,这使得UCOSII的功能更加完善,在其上的应用程序开发与移植也更加方便。在实时操作系统中一个好的软件定时器实现要求有较高的精度、较小的处理器开销,且占用较少的存储器资源。通过前面的学习,我们知道UCOSII通过OSTimTick

2015-09-21 20:26:56 1843

原创 UC/OS II 内存管理

COSII 采用的是固定分区的方式管理内存。将连续大块的内存按分区来管理,每个系统中若干个这样的分区,每个分区中又有若干个大小相同的内存块。在进行内存分配的时候,根据需求从分区中得到几个内存块。而在释放的时候,内存块又重新返回所在的分区。1:内存管理的数据结构内存管理的数据结构包括有内存控制块(MCB),空闲内存控制块链表,内存分区等。其定义如下:typedef s

2015-09-21 16:17:07 599

原创 UC/OS II 消息队列

消息邮箱只能保存一条消息,消息队列没有这一局限,可以容纳多条信息队列,按照先进先出(FIFO)的原则发送和接受消息。消息队列的实体不是操作系统提供的,而是由用户任务提供的。操作系统提供的是对其进行管理的程序。1:消息队列的数据结构消息队列的数据结构主要包括消息队列、消息队列控制块(QCB)、消息队列控制块数组、空闲链表、事件控制块(ECB)等。消息队列的数据结构定义为一个指

2015-09-21 09:43:46 1902

原创 UC/OS II 消息邮箱

消息邮箱是uC/OS-II中的另一种通信机制,可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量。通常该指针指向一个包含了“消息”的特定数据结构。如果该指针为空,说明邮箱是为空,若该指针不为空,则该邮箱是满。消息邮箱才用的数据结构是ECB(事件控制块)。每隔消息邮箱的可以容纳的消息数目是为1。     消息邮箱的管理函数主要有7个。在os_mbox.c中定义。1:消息邮箱创建

2015-09-20 10:56:44 1657

原创 UC/OS II 事件标志组管理(二)

事件标志组管理由9个函数实现,下面的8函数加上之前的初始化函数,其代码定义在os_flag.c中。1:创建事件标志组OSFlagCreate创建事件标志组函数OSFlagCreate主要功能为从空闲链表中去一块时间标志组控制块,进行一些属性的设置。其函数原型为:OS_FLAG_GRP  *OSFlagCreate (OS_FLAGS  flags,INT8U    *perr)

2015-09-18 16:40:04 4293

原创 UC/OS II 事件标志组管理(一)

如果任务要等待多个事情的发生,或多个事情中的某一个发生,那么就应该采用事件标志组管理。1:事件标志组数据结构事件标志组的主要数据结构包括事件标志组、事件标志节点、事件标志组实体、链表等。事件标志组OS_FLAG_GRP事件标志组控制块是事件的最重要的数据结构之一,其定义如下所示。typedef struct os_flag_grp {

2015-09-14 22:20:03 2997

原创 UC/OS II事件管理之信号量管理实例

实例描述:平台:MDK4.7+UCOSII+STM32F103系统移植:http://blog.csdn.net/mcu_tian/article/details/48224361UC/OS II事件管理之信号量管理实例工程:任务A、任务B、任务C 3个任务   这3个任务都需要访问资源R,允许2个任务同时访问R,信号量设置为2。三个任务的优先级分别为 9、8、 7。

2015-09-13 12:59:56 956

原创 UC/OS II事件管理(3)之互斥信号量管理

当我们使用独占资源的时候,该资源只能提供给一个任务访问,例如说串口,USB、IO、定时器等,这个时候我们就要用到互斥信号量了。互斥信号量时信号量的一个特例,信号量的计数值只能为0和1。但是互斥信号量和信号量之间还是有区别的。互斥信号量需要解决优先级反转的问题。由于UCOSII是优先级实时系统,所以必须要保证优先级高的任务能够尽快执行。所谓优先级反转就是指低优先级占有着资

2015-09-10 23:31:18 5391

原创 UC/OS II事件管理(2)之信号量管理

信号量在资源互斥共享 任务同步与通信中有着广泛的应用。信号量也是事件中的种,信号量的函数实现在ucos的os_sem.c文件中。信号量是一个非负整数,当请求一个使用信号量来表示的资源时,进程需要先读取信号量的值来判断资源是否可用。大于0,资源可以请求,等于0,无资源可用,进程会进入睡眠状态直至资源可用。当进程不再使用一个信号量控制的共享资源时,信号量的值+1,当进程成功请求到一个信号的时候

2015-09-09 17:23:33 1641

原创 UC/OS II事件管理(1)

ucosii支持事件,事件包括信号量、消息等机制。需要配置OS_EVENT_EN、OS_MAX_EVENTS等相关的宏。事件控制块(ECB)事件控制块(ECB)是事件管理的核心数据结构。其定义如下:typedef struct os_event {    INT8U    OSEventType;                    //事件类型,具体有信号量、消息邮箱、消息队列

2015-09-08 19:10:37 1638

原创 UC/OS II 时间管理

volatile  INT32U  OSTime全局变量是时间管理最重要的数据结构。volatile:注意这个关键字,禁止优化,每次要读取OSTime都必须在内存中对改变量地址取值。时间管理的函数都在os_time.c中定义时间获取和设置函数NT32U        OSTimeGet               (void);void          OSTimeS

2015-09-07 15:25:42 955

原创 UC/OS II中断管理

如果运行任务的时候中断没有关,在中断发生的时候会停止任务的运行。转去运行中断任务。中断程序尽可能的短,越短越好。在ucosii中中断时允许嵌套的,每中断嵌套深入一层,则全局变量OSIntNesting就会加1。当系统没有中断发生,运行任务的时候,OSIntNesting = 0(之前的任务管理中,有不少源码就用到了这个全局变量来判断程序是否运行在中断环境中)。要是某个中断在运行的时候,不希望被

2015-09-05 16:28:22 817

原创 UC/OS II 任务管理(6)之多任务启动

在之前的代码中看到很多地方都用到OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()这两个函数。而且这两个函数总是成对的出现。现在解释一下。这对函数实现的就是类似于原子操作的功能,在两个函数之间的代码部分再执行期间不会被中断或者是被其他任务抢占,会一次性执行完成。如何实现这功能的,就是通过开关总中断来实现的,OS_ENTER_CRITICAL() 在关掉中断之后,任

2015-09-05 16:13:11 1252

原创 UCOSII移植笔记(UCOSII+STM32F103+LED)

编译环境使用的是MDK,先实现ucosii的最基本功能,可以实现任务的调度,什么信号量,邮箱,队列那些东西先不管。1:文件准备之前下载的是官方没有移植的源码,教程说只需要改一下os_cpu.h,os_cpu_a.asm 和os_cpu_c.c 就可以了,但是一看源码中就是少了几个文件。未移植的源码文件列表如下图所示。后来查了一些资料,原来别人用的是官方移植好的案例。

2015-09-05 13:10:28 7452

原创 UC/OS II 系统时钟

UCOS是一个实时的多任务任务基于优先级的操作系统,要运行多任务的话,在启动多任务之后,需要在每隔一段时间(一个滴答)内进行任务调度和相关数据的更新,以确保满足运行要求的最高优先级任务以便在下一次任务调度切换的时候能够得到一个及时的响应。这个时间间隔是由时间中断来实现,而且每个中断的中断函数需要对相关的数据进行一个周期性更新。在STM32中时间的中断由SysTick定时器(是cortexM

2015-09-05 12:45:44 3203

原创 UC/OS II 任务管理(5)之任务删除、阻塞和恢复

任务的删除     任务的删除就是任务创建的逆过程,需要将就绪组,就绪表、就绪组中将该任务优先级的标志清零。将对应的TCB的任务控制块从就绪链表中移除,转移到空闲链表。        和任务创建一样,任务的删除也需要进行一些检查,看任务是否符合被删除的条件。具体的删除过程看任务的删除函数。1:任务删除函数INT8U  OSTaskDel (INT8U prio) 其函数代码如下

2015-09-05 12:40:13 1098

原创 UC/OS II 任务管理(4)之任务创建

任务的创建函数ucosii之前的版本都只支持64个任务,但是V2.90版本支持的任务数量达到了256。用法和原理都差不多。我这里就只介绍任务数不大于64的情况。当任务大于64的时候,只需要配置相关的宏就可。在之前的统计任务和空闲任务的初始化函数中使用到了任务创建函数OSTaskCreate、OSTaskCreateExt。UCOSII任务创建函数有两个OSTaskCreate和OS

2015-09-05 12:33:55 2068

原创 UC/OS II 任务管理(3)之初始化

析完跟任务管理相关的数据结构之后,我们就开始了解跟任务相关的函数了,以及函数之间的关系结构了。从顶层往底层依此分析,这样可以让思路更加清晰,更加好理解。1: void  OSInit (void)  (os_core.c )在UCOS系统正式运行之前,我们需要对该系统进行初始化,包括重要的数据结构,创建空闲任务,统计任务等系统任务。这里我们只分析对于该函数里面关于任务管理的

2015-09-05 12:23:50 1010

原创 UC/OS II 任务管理(2)之就绪表和就绪组

就绪表和就绪组ucosii内核在进行任务调度的时候,必须查找就绪任务中最高优先级的任务。ucosii采用的就绪表和就绪组的位图算法。该方法无论有多少就绪任务,每次查找到就绪任务的时间是确定的。ucosii的具体方法是定义了两张位图表(以下代码都在ucosii.h中)#define OS_LOWEST_PRIO      63  (os_cfg.h)#define  OS_RDY

2015-09-04 22:56:48 1891

原创 UC/OS II任务管理(1)之任务控制块

任务状态UCOSII任务状态一共有睡眠、就绪、阻塞、运行、以及中断挂起五种状态。睡眠态(Dormant):任务已经在内存中装入,但是还没有进行任务运行的所需要的条件。就绪态(Ready):是任务已经做好运行的一切准备了,就只差调度程序调度,将CPU让给运行。阻塞态(Waiting):当任务因为需要某些资源或条件,得不到满足的时候,或者是任务需要等待一定的时间的时候,任务设置为阻塞态

2015-09-04 21:24:09 2363

AVL平衡树及插入操作的C语言实现

AVL平衡树及插入操作的C语言实现

2016-06-21

二叉查找树的查找、删除、插入等基本操作(C语言)

该源码使用C实现了最二叉查找树的基本操作,比如删除、查找,插入等。

2016-06-14

二叉树(C语言)以及构建表达式树

二叉树的C语言实现 构建表达式树,分别前序遍历、中序遍历、后序遍历表达式树 同事在main文件中,有测试代码。

2016-06-03

栈的实现(C语言)数组实现以及链表实现

栈的实现(C语言)数组实现以及链表实现源码,以及各个功能测试代码函数等 和后缀式转前缀式的用例

2016-05-25

常见的几种内排序算法以及实现(C语言)

主要的内排序包括冒泡、插入、希尔、堆排序、归并、快速、桶排序等,本源码对其用C语言实现,并且进行了简答的测试,可以准确运行,其算法源码以及测试主程序都在源码文件main.c中

2016-05-24

LwIP-1.4.1无操作系统移植实例

我的移植实例+LwIP-1.4.1+contrib-1.4.1_+ST官方lwIP移植实例+串口网络调试助手

2015-11-12

UCOSII消息队列实例工程工程文件。

UCOSII消息队列实例,平台为MDK4.7+STM32+UCOSII

2015-10-09

UCOSII信号量管理实例工程

UCOSII信号量管理实例工程工程文件。 平台为MDK4.7+STM32+UCOSII

2015-09-13

QSerialPortInfo实例

QSerialPortInfo代码实例 QT串口编程

2015-02-05

vmware 8 注册机

vmware 8 注册机 本人百试不爽 完全可以用

2013-03-21

空空如也

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

TA关注的人

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