【uTenux实验】信号量】的更多相关文章

信号量(semaphore)是一个用来指示可用的资源并将可用资源的数量以数值的形式表示出来的对象.当使用一组资源时,信号量用来实现互斥控制和同步.uTenux提供了信号量出来的API,可以很方便地使用信号量. uTenux中,信号量包含一个资源计数(用来指示是否存在相应的资源以及资源的数量)和一个等待信号量的任务队列. 当一个任务返回m个资源时,信号量资源计数加m.当一个任务获得n个资源时,信号量资源计数减n.如果信号量资源的数量不够(进一步减少信号量计数可能使其值变成负数),则尝试获取资源的任…
事件标志是一个用来实现同步的对象,由多个位组成,用作指示对应事件存在的标志.事件标志由用来指示对应事件存在的位模式(bitpattern)和一个等待事件标志的任务队列组成. uTenux提供了一组API用于处理事件标志:创建.删除.设置.等待.清除. 1.创建事件标志:tk_cre_flg 为建立的事件标志分配一个控制块 事件结构体: typedef struct t_cflg { VP exinf; /* 事件标志扩展信息 */ ATR flgatr; /* 事件标志的属性 */ UINT i…
1.使用的uTenux内核代码:http://www.uloong.cc/cn/download/uTenux_V1.6.00r180.zip 2.uTenux的特性: 1.微内核  2.开放源码.完全免费  3.不需要MMU,占用ROM/RAM少   4.可移植.可固化.可裁剪   5.抢占式实时多任务操作系统   6.支持所有32位ARM7/9和Cortex M系列的微控制器   7.可配置任意多个的任务.任务的优先级最多255个 3.实验软硬件环境: OS软件版本:uTexux1.60 开…
任务就是一个无限循环.uTenux提供的任务管理功能是很强大的,包括建立和删除一个任务,启动或退出任务,取消一个任务的启动请求,改变任务的优先级和査询任务状态,使任务进人睡眠状态和唤醒状态,取消唤醒请求,强制释放任务等待状态,使任务状态变成挂起状态.延迟调用任务的执行和禁止任务等待状态. 任务是一个通过ID来识别的对象,每个任务都有基础优先级和当前优先级,可用来控制任务的执行次序 任务管理的核心是调度.uTenux会根据创建任务时为任务设置的初始属性和任务运行是获得的动态属性,对任务进行调度.…
邮箱是一个通过在系统(共享)内存空间传递消息来实现同步和通信的对象.uTenux中每个邮箱都包含一个用来发送消息的消息队列和一个用于等待接收消息的任务队列,其使用邮箱功能的消息内容放置在发送方和接收方共享的内存中,因此,实际发送和接收的只有位于这片共享空间的消息起始地址.消息的内容本身并不复制. 消息邮箱的API包括创建删除发送接收删除的功能. 1.使用tk_cre_mbx创建一个消息邮箱.属性设置很简单. 2.向邮箱发送消息 ER ercd= tk_snd_mbx(ID mbxid,T_MSG…
互斥体,维基百科中交互斥锁.其定义是这样的:互斥锁(英语:英语:Mutual exclusion,缩写 Mutex)是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写的机制.该目的通过将代码切片成一个一个的临界区域(critical section)达成.临界区域指的是一块对公共资源进行访问的代码,并非一种机制或是算法.一个程序.进程.线程可以拥有多个临界区域,但是并不一定会应用互斥锁. 关于互斥体,最经典的有两个例子.一个是串口的使用,另一个是打印机的使用. 串口在…
uTenux的消息缓冲区是一个通过传递大小可变的消息来实现同步和通信的对象. 消息缓冲区由三部分组成:1.待发消息队列  2.等接收消息的任务队列  3.用来保存缓冲消息的空间. 和信号相比,消息队列能够传递更多的信息.与管道相比,消息队列提供了有格式的数据,这可以减少开发人员的工作量.但消息队列仍然有大小限制. 在uTenux中当缓冲区空时,接收消息的任务进入等待状态.当缓冲区满时,发送消息的任务进入等待状态. 每个消息只能接收一次,消息被接收接收后消息从消息缓冲区中删除. 使用tk_snd_…
这个是头一次接触的概念.比较不好理解.内核规范中的说明就要20页! 看了王总写的uTenux内核规范之后,有那么一点明白了但理解不深. 集合点端口就像每次工作前的收集情况会.首长下达收集情况指令,各个部门聆听.当给某个部门下达指令之后,这个部门开始工作.并返回信息.所有部门都会报完信息之后,首长心里就有数了:今天天气不错,昨天的机器故障排除了,原料到位.可以开工了!于是,一天的生产工作就此开始.各个部门反馈完情况,就自由活动了.没事唠嗑都行.. 这里的首长,就是创建这个集合点端口的任务.各个部门…
1.固定内存池管理实验 内存管理是操作系统的一个基础功能.uTenux的内存池管理函数提供了基于软件的内存池管理和内存块分配管理.uTenux的内存池有固定大小的内存池和大小可变的内存池之分,它们被看成是互相独立的对象,需要不同的系统调用集来进行操作. 内存池管理函数管理的内存全部包含在系统空间以内. 1.固定尺寸内存池实验 固定尺寸内存池是一个用来动态管理固定尺寸内存块的对象.每个固定尺寸内存池都有一个用作固定尺寸内存池的内存空间(简称为内存池区)和一个等待内存块分配的任务队列. uTenux…
1.系统时间管理 系统时间管理函数用来对系统时间进行操作,是OS的一个基础性的东西.个人认为,设置系统时间和获取系统时间对OS来说基本是可有可无的. uTenux提供了三个系统时间相关API.分别用于设置系统时间.获取系统时间和获取系统工作时间.其中,前两个比较蛋疼.时间的表示是从1985年1月1日0:00:00(GMT)开始以ms为单位的累加.要想获得可读的时分秒,还得手动转换.我最讨厌这个转换了,所以不想细做这个实验. tk_get_otm获取的系统工作时间也是一ms表示的,只是这个数据比较…
中断处理是一个比较有意思的东西.uTenux的中断处理包括了处理外部中断.CPU异常等.他是OS中任务无关部分.因此,当中断到来的时候OS会停止任务调度,不会发生任务切换.直到程序从中断中返回. uTenux的中断处理部分API如下: 1.定义中断处理程序 ER ercd= tk_def_int(UINT dintno,T_DINT* pk_dint); 这个函数定义一个中断定义编号为dtintno的中断处理程序,并允许中断处理程序运行. 中断定义编号是0-255的,比如Cortex-M3中NM…
[这个是汇总] 最近有点时间,参加了EEPW论坛和悠龙咨询组织的一个嵌入式操作系统uTenux试用活动.本来想借助这个活动提供的开发板做一个小项目,奈何OS使用功底太次.于是,这个活动被我降低到了学习嵌入式OS使用的档次. uTenux虽然没有uCOS那么出名,但是麻雀虽小五脏俱全.各种嵌入式操作系统的要素都有包含.可能会有些缺点,但是对于一个学习OS使用,而不是研究内核的人来说,完全是不需要关心的东西. 本文是一个汇总,是对我在学习uTenux时候做的一些实验的整理.以下是各个实验的链接: 1…
RTOS中很经典的问题.就是在使用共享资源的时候,优先级低的进程在优先级高的进程之前执行的问题.这里模拟这种情况. 下面的实验模拟了优先级反转的情况: 先定义三个线程: //优先级反转实验 rt_sem_t sem; rt_uint32_t t1_count = ,t2_count = ,worker_count = ; rt_thread_t t1,t2,worker ; void pri1_entry(void *parameter) { rt_err_t result; ) { resul…
Linux信号量同步共享内存实验. Linux信号量同步共享内存实验. 简述 程序流程 信号量和共享内存的系统函数 信号量系统函数及接口 共享内存系统函数及接口 写程序 读程序 简述 本文主要内容是自己对信号量和共享内存系统函数的整理,及简单使用,以方便以后可能再次使用的情况.也可以为比较熟悉信号量和共享内存的人方便的回忆使用方法. 实验简述. 1.本实验程序有两个进程,一个写,一个读. 2.写进程不断向创建的共享内存写数据. 3.读进程通过getchar()共享内存的最新数据. 4.读写共享内…
实验目的 掌握在 ARM 开发板实现一个简单 WEB 服务器的过程. 学习在 ARM 开发板上的 SOCKET 网络编程. 学习 Linux 下的 signal()函数的使用. 实验内容 学习使用 socket 进行通讯编程的过程,了解一个实际的网络通讯应用程序整体设计, 阅读 HTTP 协议的相关内容,学习几个重要的网络函数的使用方法. 读懂 HTTPD.C 源代码.在此基础上增加一些其他功能.在 PC 计算机上使用浏览器测试 嵌入式 WEB 服务器的功能. 连接arm开发板 将 arm 开发…
20145216 20145330 <信息安全系统设计基础> 实验五 简单嵌入式WEB 服务器实验 实验报告封面 实验步骤 1.阅读理解源码 进入/arm2410cl/exp/basic/07_httpd 目录,使用vi 编辑器或其他编辑器阅读理解源代码 2.编译应用程序 运行 make 产生可执行文件httpd 3.下载调试 使用 NFS 服务方式将HTTPD 下载到开发板上,并拷贝测试用的网页进行调试,本例中用的是index 测试网页. 4.本机测试 在台式机的浏览器中输入 http://…
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1452 姓名:(按贡献大小排名)鄢曼君 李子璇 学号:(按贡献大小排名)20145227 20145201 成绩: 指导教师:娄嘉鹏 实验日期:2016.11.3 实验密级:无 预习程度:已预习 实验时间:10:00-12:30 仪器组次: 必修/选修:必修 实验序号:05 实验名称:简单嵌入式WEB服务器实验 实验目的与要求: 1.掌握在ARM开发板实现一个简单的WEB服务器的过程. 2.看懂代码,在宿主机和实…
实验四 简单的PV操作 专业 网络工程   姓名 方俊晖 学号 201406114309 一.        实验目的 1.掌握临界区的概念及临界区的设计原则: 2.掌握信号量的概念.PV操作的含义以及应用PV操作实现进程的同步与互斥: 3.分析进程争用资源的现象,学习解决进程互斥的方法. 二.        实验内容和要求 分析进程的同步与互斥现象,编程实现经典的进程同步问题——生产者消费者问题的模拟 生产者--消费者问题表述: 有一环形缓冲池,包含n个缓冲区(0~n-1). 有两类进程:一组…
一.概述                                                    System V信号量与System V消息队列不同.它不是用来在进程间传递数据.它主要是来同步进程的动作. 1.一个信号量是一个由内核维护的整数.其值被限制为大于或等于0. 2.可以在信号量上加上或减去一个数量. 3.当一个减操作把信号量减到小于0时,内核会阻塞调用进程.直到另一操作把信号恢复,阻塞才会解除. 4.常用的信号量是二进制信号量.即操作0和1来控制临界区. 二.函数接口…
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1452 姓名:(按贡献大小排名)鄢曼君 李子璇 学号:(按贡献大小排名)20145227 20145201 成绩: 指导教师:娄嘉鹏 实验日期:2016.11.3 实验密级:无 预习程度:已预习 实验时间:10:00-12:30 仪器组次: 必修/选修:必修 实验序号:02 实验名称:固件开发 实验目的与要求: 1.学习.读懂 02_pthread 03_tty中的代码: 2.熟悉 linux 开发环境,学会基于…
实验封面 一.实验内容 1.阅读理解源码进入07_httpd所在的目录,使用vi编辑器理解源代码. 2.编译应用程序使用gcc编译器,分别对文件夹下的copy.c和httpd.c进行编译,出现copy和httpd的可执行文件.                         3.下载调试使用NFS服务方式将HPPTD下载到开发板上,并拷贝测试用的网页进行调试 4.本机测试在台式机的浏览器中输入http://192.168.0.121,观察在客户机的浏览器中的链接请求结果和在开发板服务器上的打印信…
RT,使用消息队列,信号量和命名管道实现的多人群聊系统. 本学期Linux.unix网络编程的第三个作业. 先上实验要求: 实验三  多进程服务器 [实验目的] 1.熟练掌握进程的创建与终止方法: 2.熟练掌握进程间通信方法: 2.应用套接字函数完成多进程服务器,实现服务器与客户端的信息交互. [实验学时] 4学时 [实验内容] 通过一个服务器实现最多5个客户之间的信息群发. 服务器显示客户的登录与退出: 客户连接后首先发送客户名称,之后发送群聊信息: 客户输入bye代表退出,在线客户能显示其他…
LED驱动讲解,对于一个嵌入式的工程师还是一个刚开是学习相关电子设计的朋友,对于LED的驱动问题应该不甚陌生.我所说的LED驱动并不是类似大功率LED照明的那个驱动,而是简单的控制器对LED的控制驱动. 在uTenux\AT91SAM3S4C开发板上板载了三个LED等,分别位绿色灯.蓝色灯.红色灯.其中红色灯较为特殊,他既是开发板的电源指示灯,又可以由用户控制器亮灭,具体的电路原理我就在这里不在赘述了,不懂的朋友请查阅第二节的简介或参考开发板电路图及EB-SAM3S4C_Usermanual.p…
由以上几节的学习,我们从这一节开始真正的以实例讲解uTenux\AT91SAM3S4C开发套件的应用.如其他的软件程序开发一样,uTenux\AT91SAM3S的学习我们也要从第一个程序代码-HelloWord开始. 在上一节中我们已经建立好了底层驱动和工程模板,这一节我们将要用到.首先以_Folder文件夹为模板,建立新的文件夹,命名为HelloWord.接着打开Keil-MDK,新建工程. 1. 新建工程,在先到中选择处理器为atmel公司的的AT91SAM3S4C,当提示是否添加启动文件s…
Pintos修改优先级捐赠.嵌套捐赠.锁的获得与释放.信号量及PV操作 原有的优先级更改的情况下面没有考虑到捐赠的情况,仅仅只是改变更改了当前线程的优先级,更别说恢复原本优先级了,所以不能通过任何有关捐赠的test. 原有的获得互斥锁和释放互斥锁的时候,仅仅是对信号量做一个简单的PV操作,获得互斥锁的时候应当考虑该锁当前是否被别的线程持有和优先级如何是否该被阻塞,释放互斥锁的时候也差不多同理,因此不能通过test. 原有的信号量操作仅仅是简单的加减,没有考虑信号量在不同值的情况下阻塞和唤醒的情况…
信号量分为  :声明信号量.互斥信号量 转: ucos-ii学习笔记——信号量的原理   ucos-ii学习笔记——信号量的原理及使用 #include "INCLUDES.h" #define  TASK_STK_SIZE        512 char *s1="MyTask"; char *s2="YouTask"; INT8U err;   //定义一个错误信息 INT8U y=0; OS_EVENT *Fun_Semp;    //声明…
学校实验存档//.. 以经典的生产者消费者问题作为背景. 进程同步方式接口: package method; /** * P表示通过,V表示释放 */ public interface Method { void p(); void v(); } 模拟 Swap 指令实现该接口: package method; public class Swap implements Method { private boolean lock = false; /** * 创建一个特殊的instance变量(它…
一.实验说明: 在实际应用中,任务常常需要与多个事件同步,即要根据多个信号量组合作用的结果来决定任务的运行方式.UCOSII为了实现多个信号量组合的功能定义了一种特殊的数据结构——信号量集. 二.实验截图: 三.源代码下载链接: 链接:https://pan.baidu.com/s/13USFy25QX-e3WjFGmGClfA 密码:jgmj 四.核心代码: /* * Name : main * Description : --- * Author : liu. * * History * -…
一.实验说明: 在介绍互斥信号量前,我们先简单地描述一下什么是优先级反转.使用实时内核心,优先级反转问题是实时系统中出现得最多的问题.假设任务H优先级高于任务M,任务M优先级高于任务L.任务H和任务M处于挂起状态,等待某一事件发生,任务L正在运行.此时,任务L要使用共享资源.使用共享资源之前,首先必须得到该资源的信号量.任务L得到了该信号量,并开始使用该共享资源.由于任务H的优先级高,它等待的事件到来之后剥夺了任务L的CPU使用权,任务L被挂起,任务H开始运行.运行过程中任务H也要使用那个任务L…
一.实验说明: 信号量是一个多任务内核提出的一个协议机构,上一个实验中我们介绍了信号量访问共享资源 的功能,其实信号量最初是用来控制访问共享资源的,它还可以用来同步一个中断服务函数和一个任 务,或者同步一个任务和另一个任务. 二.实验截图: 三.源代码下载链接: 链接:https://pan.baidu.com/s/1bpUaFmB 密码:dwre 四.核心代码: /* * Name : main * Description : --- * Author : liu. * * History *…