UCOS II 系统
南方的小清湖
这个作者很懒,什么都没留下…
展开
-
UC/OS-II的函数------OSTimeDly
功能:调用该函数的任务将自己延时一段时间并执行一次任务调度,一旦规定的延时时间完成或有其它的任务通过调用OSTimeDlyResume()取消了延时,调用OSTimeDly()函数的任务马上进入就绪状态(前提是先将任务调度后执行的任务执行到程序尾,且调用OSTimeDly的任务此时优先级最高)。//将一个任务延时若干个时钟节拍//描述:将一个任务延时若干个时钟节拍。如果延时转载 2016-05-14 11:32:48 · 1625 阅读 · 0 评论 -
EMC之SDRAM
EMC作为一个外部存储接口,使其为MCU追求大容量、高速度成为可能。作为比较常用的外部存储芯片SDRAM,其相对复杂的数据传输时序,在拥有EMC之后,又会出现那些问题,今天就谈一下它们之间的那些事。 恩智浦(NXP)公司生产的这款LPC1788芯片带有控制外部存储的控制器,它是一个多端口存储外设,它支持异步静态存储设备,如RAM、ROM和Flash,也支持单数据速率传输的S原创 2016-07-19 21:40:43 · 2083 阅读 · 0 评论 -
LPC17XX 学习之系统时钟与功率控制
系统时钟与功率控制一、系统时钟 LPC17XX有三个独立的时钟振荡器,分别是主振荡器(MIAN_OSC)、内部RC振荡器(IRC_OSC)、实时时钟振荡器(RTC_OSC)。LPC17XX时钟框图如下:LPC17XX 时钟框图如上图所示,三个振荡器通过 system clock select 三选一 后经过(或不经过)MAIN PLL 最后经 CPU CL原创 2016-11-29 20:22:51 · 1931 阅读 · 0 评论 -
LPC17XX 学习之 systick
LPC1768在代码里用到使用systick时,是以如下形式出现 if (SysTick_Config(SystemCoreClock /1000))/1ms进入一次中断/ { while (1); /* 错误情况下就停在这里 }这个函数的原型是__STATIC_INLINE原创 2016-11-29 21:32:31 · 1033 阅读 · 0 评论 -
Modbus协议简介与FreeMODBUS移植
1:Modbus协议简介 Modbus协议主要描述的是应用层的信息封装格式,处于OSI模式的第七层(应用层)。Modbus的物理层可以是RS-485、Ethernet II /802.3。Modbus协议栈的层次图: 本文主要介绍Modbus使用物理层是EIA/TIA-485的情况。Modbus主要内容为应用层协议,所以在现实使用中可原创 2016-12-11 19:57:40 · 9712 阅读 · 0 评论 -
LWIP使用经验
LWIP使用经验一 LWIP内存管理LWIP的内存管理使用了2种方式:内存池memp和内存堆mem,如图1所示。内存池的特点是预先开辟多组固定大小的内存块组织成链表,实现简单,分配和回收速度快,不会产生内存碎片,但是大小固定,并且需要预估算准确。内存堆的本质是对一个事先定义好的内存块进行合理有效的组织和管理,主要用于任意大小的内存分配,实现较复杂,分配需要查原创 2016-12-12 21:45:41 · 867 阅读 · 0 评论 -
μC/OS-II学习之:任务,信号量、邮箱、队列及其区别
一:UCOS是一种抢占式的多任务操作系统,如果最高优先级的任务不主动放弃CPU的使用的话,其他任务是无法运行的,通常情况下,高优先级的任务在使用完CPU或其他资源后都要主动放弃,可以通过延时函数或者时等待一些信号量之类的让自己挂起。但是如果最高优先级任务一直使用CPU,那就跟单任务没有什么区别了。二:可以通过等待信号量,消息等是当前任务挂起,或者通过通过延时函数将任务挂起,从而让其他优先级原创 2016-12-04 21:23:32 · 749 阅读 · 0 评论 -
LPC17XX 学习之 uCOS-II 移植实例
1. 知识准备要想对ucos-ii的移植有较深的理解,需要两方面知识:(1)目标芯片,这里是lpc17xx系列芯片,它们都是基于ARMv7 Cortex-M3内核,所以这一类芯片的ucos-ii移植几乎都是一样的,要想了解Cortex-M3内核,推荐《ARM Cortex-M3权威指南》(宋岩译);(2)ucos-ii内核原理,推荐《嵌入式实时操作系统uC/OS-II(第2原创 2016-12-05 21:13:27 · 2769 阅读 · 0 评论 -
Keil MDK 下 uC/OS-II 在LPC11C14上的移植
uCOS-II 在 ARM上的移植很常见,而在 KEIL MDK 下的移植却不是很多,根据 ARM 下的移植范例,结合自己最近使用 KEIL MDK 的稍许心得,记录一下 uCOS-II 在 KEIL MDK 下的移植过程。在移植过程中也参考了他人的资料如有部分雷同请谅解,本文仅也供个人参考,共同学习。uCOS II是一个源码公开、可移植、可固化、可剪裁和抢占式的实时多任务操作系统。转载 2016-12-05 21:23:11 · 916 阅读 · 0 评论 -
ARM Cortex-M3的startup.s文件详解
以LM3S9B90为例。Startup.s文件是系统的启动文件,主要包括堆和栈的初始化配置、中断向量表的配置以及将程序引导到main( )函数等。Startup.s主要完成三个工作:栈和堆的初始化、定位中断向量表、调用Reset Handler。a)堆和栈的初始化Startup.s中的代码如下图所示: 1.程序分别对堆和栈进行了大小的规定以及空间转载 2017-02-28 22:06:12 · 7526 阅读 · 0 评论 -
FatFs源码剖析
一、介绍:本文以网上开源文件系统FatFs 0.01为研究对象,剖析FatFs文件系统的核心操作。FatFs目前最新版本已更新到0.10a版本,而我之所以选择0.01版本,是因为这是最早的发布版本,与最新的版本相比,去掉了很多高级应用,且代码量相对较小,宏开关也少了许多,易于阅读和理解,用来研究它的雏形再合适不过了,所以笔者选择0.01版本进行剖析。当大家了解了0.01的核心思想后,再转载 2016-06-16 14:08:03 · 1404 阅读 · 0 评论 -
uart,spi,i2c总线的区别
uart,spi,i2c总线的区别 I2C的数据输入输出用的是一根线,SPI则分为dataIN和 dataOUT。由于这个原因,采用I2C时CPU的端口占用少,SPI多一根。但是由于I2C的数据线是双向的,所以隔离比较复杂,SPI则比较容易。 所以系统内部通信可用I2C,若要与外部通信则最好用SPI带隔离(可以提高抗干扰能力)。但是I2C和SPI都不适合长距离传输。长距离时就要用485 了转载 2016-06-14 22:50:32 · 744 阅读 · 0 评论 -
LPC1768 IAP升级
1、IAP介绍IAP即“in applicatin programming”在应用编程的缩写,指MCU可以在系统中获取新代码并对自己重新编程,即改变应用程序。它与我们所熟悉的ISP编程不同, LPC1768 的ISP编程接口为串口1,如果使用其他的串口或其他总线则不能对其进行编程。而我们这里所说的IAP通过下载一段引导程序Bootloader程序,如果我们想原创 2016-06-14 21:14:45 · 2942 阅读 · 0 评论 -
ucos II 系统学习之------任务延时函数
Ucos II 任务延时函数 编写过单片机程序的都知道,延时函数是经常被用到的。 在ucos II 里,系统也提供了这样的延时函数。一个是大众版的OSTimeDly(),一个是精致版的OSTimeDlyHMSM()。 萝卜青菜,各有所爱,随你怎么选。 这两者的区别是,OSTimeDly()的延时时间是以节拍数来衡量的,OSTimeDlyHMSM()的延时时间则转载 2016-05-14 13:26:07 · 1722 阅读 · 0 评论 -
ucos II 系统学习之------时间管理函数OSTimeGet()
时间管理函数OSTimeGet()在μCOS-II系统中,无论时钟节拍何时发生,μC/OS-Ⅱ都会将一个32位的计数器加1,这个计数器在用户调用OSStart()初始化多任务和4,294,967,295个节拍执行完一遍的时候从0开始计数。 用户可以通过调用OSTimeGet()来获得该计数器的当前值,OSTimeGet()的详细信息见下表。转载 2016-05-14 15:04:08 · 3183 阅读 · 0 评论 -
ucos II 系统学习之------任务的调度和多任务的启动
uC/OS-II操作系统是实时操作系统,而且是基于优先级调度的实时操作系统,因此在启动多任务以后,每个时钟中断都要执行任务的调度。至于如何实现时钟中断,对于不同硬件环境是不同的。如果时间片是20ms,那么每20ms执行一次任务调度。这个任务调度的函数就是OSTimeTick。OSTimeTick是与硬件无关的,代码如下所示: 从操作系统的初始化函数OSInit来看,转载 2016-05-14 15:24:02 · 2783 阅读 · 1 评论 -
uCOS-II中的任务切换-图解多种任务调度时机与问题
【@.1 任务调度时机】之前的一篇文章分析了具体的uCOS-II中的任务切换机制,是从函数调用的角度上分析的。这次我具体从整个程序运行的时间上来看,分析多种任务调度发生的时机。以下所有图片均可点击放大观察。所有图中红色箭头表示中断级的任务切换,蓝色箭头表示任务级的中断切换。1.仅有一个任务,这种情况最简单。假设时钟节拍是1000次每秒,由定时中断产生,当节拍的时钟服转载 2016-05-14 16:18:19 · 4059 阅读 · 2 评论 -
ucos II 系统学习之------堆栈理解
第一,当任务运行时,它用来保存一些局部变量;第二,当任务挂起时,它负责保存任务的运行现场,也就是CPU寄存器的值。uCOS任务堆栈的深入分析(转)堆栈作用的就是用来保存局部变量,从本质上讲也就是将CPU寄存器的值保存到RAM中。在uCOS中,每一个任务都有一个独立的任务堆栈。为了深入理解任务堆栈的作用,不妨分析任务从“出生”到“消亡”的整个过程,具体就是分析任务的建立,运行,挂转载 2016-05-17 13:45:44 · 1841 阅读 · 0 评论 -
ucos II 系统学习之------任务堆栈检测
不少屌丝同学都有类似经历吧,在使用ucosii创建任务时,关于任务堆栈大小设为多大合适搞的不清不楚,郁闷之下就随便整个数,比如就1024吧,呵呵,反正也没见得出问题,那就不多想了。我想大多数同学都是这样做的吧。这样只是因为在一般情况下,1024确实已经足够大了,堆栈溢出的可能性很小而已。那么,如果你任务实际使用率只有很小的百分之几,一旦被你知道了,你会痛心不?我想你不痛心,μ转载 2016-05-17 13:51:09 · 2118 阅读 · 0 评论 -
LPC1788系统时钟的设置
LPC1788系统时钟的设置 LPC1788有3个独立的振荡器。他们是主振荡器,内部RC振荡器,RTC振荡器。复位后,LPC1788将用内部的RC振荡器运行,直到被软件切换。这样就能在没有任何外部晶振的情况下运行。LPC1788的时钟控制如图1所示(英文手册P35): 使用12M的晶振作为主振荡器,它通过锁相环PLL0来提高频率提供CPU。由于芯片总是从内部的RC原创 2016-06-29 21:28:32 · 3421 阅读 · 0 评论 -
lpc1788的地址空间分配
lpc1788的地址空间分配 图 1 图2 参考 LPC177x_178x_UM_SimpCHN原创 2016-06-29 21:33:22 · 1008 阅读 · 0 评论 -
LPC1788启动代码分析
在Keil uVision4中新建一个基于NXP1788的工程后,会提示添加启动汇编代码startup_LPC177x_8x.S。该文件进行从汇编到C语言运行环境的初始化工作。;/*****************************************************************************; * @file: startup_LPC17原创 2016-06-29 21:35:38 · 1087 阅读 · 0 评论 -
UCOSII软件定时器
UCOSII从V2.83版本以后,加入了软件定时器,这使得UCOSII的功能更加完善,在其上的应用程序开发与移植也更加方便。在实时操作系统中一个好的软件定时器实现要求有较高的精度、较小的处理器开销,且占用较少的存储器资源。 ucosII关于定时器的内容在os_tmr.c文件内,需使能os_cfg.h中的OS_CFG_TMR_EN来启动定时器服务。 定时器服务为在协议栈处理,IO定时轮询的设原创 2017-09-21 20:19:32 · 3301 阅读 · 0 评论