01
2019
06

关于AD18中Board information的位置更改

AD18出来也有将近小半个月了,论坛里也看到有人在问以前report里的board information到哪里去了?疑问emmmmmm,如果你没用过pads啥的,可能看界面会懵比了

27
2016
06

嵌入式实时操作系统UCOS原理与实践—卢友亮_第一章

第一章实时操作系统基础

1.操作系统的基本功能五个部分:cpu管理、任务管理、内存管理、文件管理、IO管理。

任务管理:任务是程序的一次执行。任务分为系统任务和用户任务。系统任务是操作系统本身的任务,如操作系统的主程序,时钟中断服务程序,后面讲到的空闲任务和统计任务。用户任务是用户应用程序的执行。

CPU管理:多任务OS对CPU的分配,哪个任务在运行,占有CPU.

内存管理:内存是任务的生存空间,内存管理用于给任务分配内存空间,相应的,在任务结束后释放内存空间。

文件管理:实现对文件的统一管理,是对文件存储器的存储空间进行组织、分配和回收,负责文件的存储、检索、共享和保护。从用户角度看,文件管理主要是实现“按名取存。

IO管理:管理系统中的各种硬件设备,如打印机、显示器、硬盘灯。用户应用程序调用I/O设备管理模块提供的API来对设备进行操作,而不是直接读/写硬件。

2.实时操作系统:Real Time Operating System. RTOS.是指当外界时间或数据发生时,能够接收并以足够快的速度予以处理,其处理的结果又能在规定的时间内来控制生产过程或对处理系统做出快速响应,并控制所有实时任务调度、一直运行的操作系统。

3.任务状态:为了管理和调度任务,必须为任务设置多个状态。任务具有5种状态:睡眠态、就绪态、运行态、阻塞态、挂起态。

睡眠态:任务已经被装入内存了,可是并没有准备好运行。在调用OSTaskCreate(任务创建函数)创建之前,处于睡眠状态。睡眠状态的任务是不会得到运行的,操作系统也不会给其设置为运行而准备的数据结构。因为没有给其配置任务控制块。

就绪态:操作系统调用OSTaskCreate创建一个任务后,任务就进入就绪态。操作系统已经为其运行配置好了任务控制块等数据结构,当没有比其优先级更高的任务,或比其优先级更高的任务处阻塞状态的时候,就能够被操作系统调度而进入运行态。操作系统是调用任务切换函数完成的。

运行态:任务因为OSTimeDly,进入阻塞态。而中断的到来会使任务进入挂起态。

阻塞态:当任务在等待某些还没有被释放的资源或等待一定的时间的时候,要阻塞起来,等到条件满足的时候再重新回到就绪态,又能被操作系统调度以进入运行态,这是实时操作系统要实现的功能之一。

挂起态:当任务在运行时,因为有中断的发生,如定时器中断每个时钟滴答中断一次,被剥夺CPU的使用权而进入挂起态。在中断返回的时候,若该任务还是最高优先级的,则恢复运行态,如果不是这样,只能回到就绪态。、

任务在各种状态之间转换,有一个非常重要的词—Context Switch.即上下文切换或者叫任务切换。

在操作系统移植的时候,任务切换代码就是必须要实现的部分之一。

 

可重入函数和不可重入函数:

同一个代码可以运行为不同的任务,不同的任务又可以调用相同的函数我们不能考虑为每个任务都写一个屏幕打印程序,却需要每个打印程序都运行正确,无论系统中有多少个任务在执行。

在实时多任务操作系统中,任务应该调用可重入函数,可重入函数是任务中的一个重要概念。

1.4基于优先级的可剥夺内核。

比较好的系统,内核占用2%-5%CPU的负担。

uC/OS使用的是一种基于优先级的可剥夺型内核。

64个任务(V2.80以上为256个任务)

不可剥夺内核是任务一旦获得了CPU的使用权,如果不将自己阻塞,将一直运行。而不管是否有更紧迫的任务(优先级更高的任务)在等待(高优先级的任务已经进入了就绪状态)。就算发生了中断,也只让中断服务程序运行,不论中断服务程序是否创建了更高优先级的任务,也要返回到原任务运行。

可剥夺型内核调度下,在中断服务程序中就绪了更高优先级的任务B,中断返回后因为优先级更高,所以获得了CPU控制权得到运行。任务B运行结束后,任务A才得到运行。可剥夺型呢黑采用的抢占式的调度策略,总是让优先级更高的任务运行,知道其阻塞或完成,任务的响应时间因此是优化的。因为操作系统总是以时钟中断服务程序作为其调度的手段,而时钟中断时间是可知的,高优先级任务的运行时间也是可知的,因此适合于实时操作系统。

1.5同步与通信

任务是独立的,但是任务之间又有着各种各样的关系,以成为一个整体,来完成某一项工作。有时候,一个任务完成的前提是需要另一个任务给出结果,任务之间的这种制约性的合作运行机制成为任务间的同步。

对于共享资源的访问,就要有排他性。为解决这个问题,又引出操作系统的很多基本概念,如互斥、信号量、临界区、消息等概念。多个任务没有很好地同步的情况下,操作系统很可能产生死锁。

操作共享资源的时候要进入临界区。在进入临界区访问共享资源之前,采用关中断、给调度器上锁或使用信号量的方法,达到互斥的目的。

如A任务写缓冲区,B任务读缓冲区。A任务写完缓冲区这个事件之后。操作系统是这样做的,A任务写完缓冲区后需滴啊用如OSSemPost()这样的函数,释放缓冲区资源。在该函数中,发现有任务B在排队等待缓冲区的资源,于是调用任务切换函数将CPU给B,达到了任务间的无缝同步。

事件处理的对象主要有信号量、互斥性信号量、事件标志组、邮箱、消息队列。

信号量的取值范围是16位的二进制整肃。0-65535.三种操作,建立,请求,释放。OSSemPend()函数请求信号量,信号量大于0,然后信号量--。OSSemPost()函数释放信号量,信号量++。

A、B两个任务通过信号量同步,具体过程如下:

首先创建信号量S,因为该缓冲区本质上是全局的一个数组,属于临街资源,因此设置信号量的初始值为1.另外,该信号量使用一个事件控制块。

A任务请求信号量S,做Pend操作。因为信号量S=1,所以请求得到满足,Pend操作中将S减1,s的值变为0.任务A继续执行,访问缓冲区。

任务A在执行过程中因为其他的时间而阻塞,任务B得到运行,要访问缓冲区。任务B请求信号量S,做Pend操作。因为信号量S=0,所以请求不能得到满足,任务B只能阻塞,S的值保持为0.但在信号量S所使用的事件控制中,标志了时间B在等待信号量S的信息。

任务A在条件满足时继续执行,访问缓冲区完成后,做Post操作释放缓冲区,Post操作中将S加1,S的值变为1.在Post操作中,由于事件控制块中,标记了事件B在等待信号量S的信息,且我们设置任务B有更高的优先级,操作系统调用任务切换函数,切换到任务B运行,使任务B获得信号量,访问任务A写好的缓冲区。

任务B访问完成,再释放该信号量,任务A又可以访问该缓冲区了。

1.5.6互斥信号量

互斥信号量是一种特殊的信号量,这不仅在于该信号量只有用于互斥资源的访问,还在于使用互斥信号量管理需要解决优先级反转的问题。

假设系统中有3个任务,分别是高优先级、中优先级和低优先级。当低优先级的任务在运行的时候访问互斥资源,而中优先级的任务运行时将使低优先级的任务得不到裕兴而死抱着资源不放。这时,高优先级的任务开始运行的时候,必须等到中优先级的任务运行完成,然后等低优先级的任务访问资源完成才行。如果在低优先级的任务访问资源的过程中又有中优先级的任务运行,那么高优先级的任务只有继续等到。这种情况就是优先级反转。

在uC/OS-II对互斥信号量的管理中,针对这个问题采用了优先级继承机制。优先级继承机制是一种对占用资源的任务的优先级进行升级的机制,用以优化系统的调度。例如,当前的任务的优先级是比较低的。高优先级的任务请求互斥信号量的时候因为信号量已被占有,所以阻塞。这时有中优先级的任务就绪。如果不采用优先级继承,那么高优先级的任务是竞争不过中优先级的任务的。采用优先级继承机制,将占有资源的低优先级的任务临时设置为一个很高的优先级,允许其在占有资源的时候临时获得特权,先于中优先级任务完成,在范文互斥资源结束又回到原来的优先级,这样高优先级的任务就会先于中优先级的任务运行,解决的这个问题。

1.5.7事件标志组

在信号量和互斥信号量的管理中,任务请求资源,如果资源未被占用就可继续运行,否则只能阻塞,等待资源释放的事件发生。这种事件是单一的事件。如果任务要等待多个事件的发生,或多个事件中的某一个事件的发生就可以继续运行,那么就应该采用事件标志组管理。

事件标志组管理的条件组合可以是多个事件都发生,也可以是多个事件中有任何一个事件发生。尤其特别的是,还可以是多个事件都没有发生货多多个事件有任何一个事件都没有发生。

1.5.8消息邮箱和消息队列

邮箱和信号量都保存在事件控制块中,对于他们的操作和处理也是类似的。

假设A写缓冲区,B读缓冲区,但缓冲区是A创建的,B并不知道它在哪里,但是B知道缓冲区的类型是10个字节长的数组。现在就应该采用消息而不是信号量来完成这次同步和通信。可以简单描述如下:

任务A创建缓冲区,写缓冲区,发消息。

任务B请求消息,如果邮箱里没有消息,就把自己阻塞,如果有,就读取消息。

任务B最终读取消息后,根据邮箱里的地址读取缓冲区。

消息队列(Message Queue)也用于给任务发消息。但它是由多个消息邮箱组合形成的,是消息邮箱的集合,实质上是消息邮箱的队列。一个消息邮箱只能容纳一条消息,采用消息队列,一是可以容纳多条消息,而是消息是有序的。

消息对垒由于存储多条消息,因此其设计比信号量和消息略为复杂,但也同样是采用事件控制快呢来只是消息的位置和标记等待消息的任务。不同的是,消息队列自身有消息控制块这样的数据结构,事件控制块中指示的不再是消息的地址,而是消息控制块的地址,使用消息控制块可以采用先进先出的方式管理多条消息。

1.6 中断和时钟

当任务A在运行的时候,由于中断的到来,操作系统先保存任务A当前的运行环境,接着进入中断服务程序,在中断服务程序后,由于采用可剥夺型内核,如果A仍是优先级最高的人任务,就恢复A运行的环境,继续运行A,否则将运行一个更高优先级的任务。

在uC/OS中,通过对硬件的设置,实在10-200ms的时间间隔内产生一次时钟中断,在该时钟中断服务程序中,对岩石的任务进行延时技术,检查系统中是否有高优先级的任务就绪而没有得到运行,响应进行任务调度。因为,如果没有时钟中断服务,就没有多任务操作系统的任务调度,也谈不上实时。我们把这种周期性中断成为时钟节拍,对应的中断服务程序成为时钟中断服务程序。

1.7内存管理

嵌入式系统中,内存资源是十分宝贵的。在uC/OS-II中,采用分区的方式管理内存,即将连续的大块内存按分区来管理,每个系统中有数个这样的分区,每个分区又包含数个内存块,每个内存块大小相同。块,每个内存块大小相同。块,每个内存块大小相同。

采用内存控制块来管理内存。内存控制块记录了内存分区的地址、分区中内存块的大小和数量,以及空闲块的数量等消息内存管理包含了内存分区的创建、分配、释放、使用和等待系统调用。

 


15
2016
02

uC/OS-II多任务切换原理

     uC/OS-II首先完成操作系统的初始化和所有任务的初始化。TCB(任务控制块),ECB(事件控制块),内存。

     uC/OS-II凭借着独特的延时(其实此时会去多任务切换,然后运行就绪的任务)和滴答中断(对每个等待的任务真延时并判断是否到了延时,如果到了为就绪切换运行)来完成多任务的运行。空闲任务始终处于就绪状态并且优先级最低。

     多任务运行实现了CPU的高效利用,CPU不用真正的去傻呵呵用来无用延时了,而是滴答中断服务在心跳时每个任务一块延时,同时还判断哪个已经就绪。

24
2015
09

工业控制板_单片机应用的方向

‍    向PLC功能看齐,向变频器、伺服控制器看齐,向HMI看齐。

    开关量输入:PNP NPN 两种类型,用来接收机械开关,限位开关,光电开关,接近开关,磁性开

关,按钮,按键的输入。

    开关量输出:用来连接各种LED指示灯,继电器,电磁阀,以及下级设备的输入开关。

    高速信号输入:用来连接编码器,光栅尺,或者中断输入,快速响应某些高速信号。

    高速信号输出:用来连接夏季信号的高速输入,如伺服电机定位,步进电机定位。

    AD输入:用来连接各种模拟量输入,如传感器信号,各种模拟量传感器,同时注意凉城和输入类型。

比如4-20mA. 0-10V.
    DA输出:用来驱动下级要求的模拟量输入类型。比如连接变频器调速。同时注意输出量程和输出类

型4-20mA 0-10V。
    工业控制板的类型要注意实际的偏重类型。如实际偏重显示HMI,要注重HMI的要求。如实际偏重控

制PLC。则注重PLC的要求。控制与显示可采用分开CPU,也可以采用一体CPU。如变频器采用双CPU,

显示调参数为小CPU,控制为大CPU。人机界面HMI为注重显示,显示为大CPU,同时集成串口,以太网

通讯,CAN,DP等
    CPU芯片与模块芯片组合在一起,PCB,硬件,之上软件系统。从而嵌入式硬件软件系统。

      

05
2015
06

miui v6删除下拉通知栏音乐图标

 用RE文件管理器进入 /data/data/com.android.systemui/files文件夹,找到statusbar_music.maml删除或者改名就可以了。

17
2013
10

液晶电视拆机图片

十一假期有天没事,把电视机拆开看了看。 

以下是地址:http://www.mcudx.com/zb_users/plugin/windsphoto/album.asp?typeid=3

28
2013
08

中国银行电子口令卡拆解

 IMG_20130828_092433.jpg

IMG_20130828_092644.jpg

28
2013
08

工商银行网盾和手机电子口令卡拆解

IMG_20130828_085820.jpg 

IMG_20130828_085834.jpg

25
2013
04

手机充电器芯片

手机充电器芯片   起开关作用的芯片CR6850T、VIPER22A。

给你个参数表,自己看一下吧,

25
2013
04

Altium Designer 10 卸载问题

   在windows XP系统的控制面板的卸载程序里还卸载不了Altium Designer10.命令提示符窗口一山就过。

后来网上找到了答案,原来是需要到安装程序的光盘里面去找,里面有个卸载工具。