当前位置:三九宝宝网 → 宝宝教育 → 智力培养 → 正文

uCOSII的开发笔记

更新:02-09 整理:39baobao.com
字体:

[笔记本游戏全屏]点击左下角那个开始菜单,有个地方可以输入的“运行”,输入regedit,出来一个文件,点击,那个是注册编辑器。依次点击:HKEY_CURRENT_USER \Software 找到你要改的游戏的文件所在目录...+阅读

uC/OS-II是一个简洁、易用的基于优先级的嵌入式抢占式多任务实时内核。尽管它非常简单,但是它的确在很大程度上解放了我的嵌入式开发工作。既然是一个操作系统内核,那么一旦使用它,就会涉及到如何基于操作系统设计应用软件的问题。 void task_xxx(void *pArg) { /* 该任务的初始化工作 */ …… /* 进入该任务的死循环 */ while

(1) { …… } } 每个用户的任务都必须符合事件驱动的编程模型,即uC/OS-II的应用程序都必须是“事件驱动的编程模型”。一个任务首先等待一个事件的发生,事件可以是系统中断发出的,也可以是其它任务发出的,又可以是任务自身等待的时间片。当一个事件发生了,任务再作相应处理,处理结束后又开始等待下一个事件的发生。如此周而复始的任务处理模型就是“事件驱动的编程模型”。事件驱动模型也涵盖了中断驱动模型,uC/OS-II事件归根结底来自三个方面:

(1)中断服务函数发送的事件

(2)系统延时时间到所引起的

(3)其它任务发送的事件。 其中“中断服务函数发送的事件”就是指每当有硬件中断发生,那么中断服务程序就会以事件的形式告诉任务,而等待该事件的最高优先级任务就会马上得以运行;“系统延时时间到所引起的”事件其实也是硬件中断导致的,那就是系统定时器中断。而“其它任务发送的事件”则是由任务代码自身决定的,这是完全的“软事件”。不管“软事件”还是“硬事件”,反正引起uC/OS-II任务切换的原因就是“事件”,所以用户编写应用代码的时候一定要体现出“事件驱动的编程模型”。 互斥信号对象(Mutual Exclusion Semaphore)简称Mutex,是uC/OS-II的内核对象之一,用于管理那些需要独占访问的资源,并使其适应多任务环境。 创建每一个Mutex,都需要指定一个空闲的优先级号,这个优先级号的优先级必须比所有可能使用此Mutex的任务的优先级都高!uC/OS-II的Mutex实现原理大致如下: 当一个低优先级的任务A申请并得到了Mutex,于是它获得资源访问权。如果此后有一个高优先级的任务B开始运行(此时任务A已经被剥夺),而且也要求得到Mutex,系统就会把任务A的优先级提高到Mutex所指定的优先级。由于此优先级高于任何可能使用此Mutex的任务的优先级,所以任务A会马上获得CPU控制权。一直到任务A释放Mutex,任务A才回到它原有的优先级,这时任务B就可以拥有该Mutex了。应该注意的是:当任务A得到Mutex后,就不要再等待其它内核对象(诸如:信号量、邮箱、队列、事件标志等等)了,而应该尽量快速的完成工作,释放Mutex。否则,这样的Mutex就失去了作用,而且效果比直接使用信号量(Sem)更糟糕!虽然普通的信号量(Sem)也可以用于互斥访问某独占资源,但是它可能引起“优先级反转”的问题。假设上面的例子使用的是Sem,当任务A得到Sem后,那么任务C(假设任务C的优先级比A高,但比B低)就绪的话将获得CPU控制权,于是任务A和任务B都被剥夺CPU控制权。任务C的优先级比B低,却优先得到了CPU!而如果任务A是优先级最低的任务,那么它就要等到所有比它优先级高的任务都挂起之后才会拥有CPU,那么任务B(优先级最高的任务)跟着它一起倒霉!这就是优先级反转问题,这是违背“基于优先级的抢占式多任务实时操作系统”原则的!综上所述,uC/OS-II中多个任务访问独占资源时,最好使用Mutex,但是Mutex是比较消耗CPU时间和内存的。如果某高优先级的任务要使用独占资源,但是不在乎久等的情况下,就可以使用Sem,因为Sem是最高效最省内存的内核对象。 uC/OS-II的OSSchedLock()和OSSchedUnlock()函数允许应用程序锁定当前任务不被其它任务抢占。使用时应当注意的是:当你调用了OSSchedLock()之后,而在调用OSSchedUnlock()之前,千万不要再调用诸如OSFlagPend()、OSMboxPend()、OSMutexPend()、OSQPend()、OSSemPend()之类的事件等待函数!而且应当确保OSSchedLock()和OSSchedUnlock()函数成对出现,特别是在有些分支条件语句中,要考虑各种分支情况,不要有遗漏!需要一并提醒用户的是:当您调用开关中断函数OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()时也要确保成对出现,否则系统将可能崩溃!不过,在OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()函数之间调用OSFlagPend()、OSMboxPend()、OSMutexPend()、OSQPend()、OSSemPend()之类的事件等待函数是允许的。 首先应该阐明的是,我们这里讨论的是“驱动程序”,而不是“中断服务程序”,这两个词语往往被用户混淆。

(1)中断服务程序指那种硬件中断一旦发生,就会立即被硬件中断控制器调用的一小段程序,它的操作追求简单明了,越快速越精简就越好。

(2)驱动程序是指封装了某种硬件操作细节的函数集,它提供给应用程序的是统

一、标准、清晰、易用的API。对于中断服务程序的编写,往往与驱动程序的设计相关联。比如驱动程序提供异步操作的功能,那么就需要中断服务程序为它准备缓冲区和一个结构体,并且中断服务程序会依照这个结构体的成员参数自动完...

本文地址:https://www.39baobao.com/show/32_59556.html

以上内容来自互联网,请自行判断内容的正确性。若本站收录的信息无意侵犯了贵司版权,请联系我们,我们会及时处理和回复,谢谢.

以下为关联文档:

笔记本在玩游戏时不能全屏怎么办Nvidia显卡(N卡用户) 有方案解决N卡在Windows7下(xp也一样的)游戏全屏的问题,具体步骤如下: 1、选择“NVIDIA控制面板” 2、在左侧选择“显示”——“更改平板显示器缩放” 3、选...

电子地图GIS开发有什么核心技术主要是基于已经开发的gis基础平台,一些公司都有类似的地理信息系统平台sitemapIMS,arcgis ,gismap等这些都是市场上主流的开发平台。在这类平台上针对性的电子地图项目的二次...

室内地图开发和室内GIS应用指的是什么上海为卓信息科技室内GIS平台底层架构基于传统GIS平台,根据室内地图和室内定位的特点,在坐标体系和功能定义方面进行有针对性的扩展开发,形成专业的室内地理信息系统引擎。该平...

开发制作魔兽rpg地图需要掌握哪些方面的知识YDWE 最大众的编辑器很多人性化功能和更准确的翻译。 JASSCraft 这个我也很久没用了大概用途是关于自定义代码方面也就是jass方面需要…… 3ds Max 如果想要制作模型就需要...

导航软件开发是做什么的GPS要实现导航,除了硬件外,还需要软件地图的支持。俗称GPS导航软件 每一种GPS导航软件,都是针对不同的操作系统开发的,或者说它会发布几个版本,针对不同的操作系统,比如PC版(针对wi...

怎么利用地图api开发地图1)下载地图移动版API(Android)开发包 要在Android应用中使用地图API,就需要在工程中引用地图API开发包,这个开发包包含两个文件:baidumapapi.jar和libBMapApiEngine.so。 2)申请A...

游戏开发中的地图资源使用tiled有什么好处tiled的全称是tiled地图编辑器,为了快速开发游戏,这个工具为开发者提供了一种快捷的解决方法,地图编辑器。 存储方式为:TMX文件+图片素材PNG(支持透明格式的图片) 适用语言: Flash(...

怎么进行开发一款游戏都需要准备什么1、一款游戏的开发需要一个总的游戏策划人,为游戏编写背景故事,制定游戏规则,设计游戏交互环节,计算游戏公式,以及整个游戏世界的一切细节等。 2、需要游戏程序员。游戏程序员根...

androi开发中如何避免内存泄露为了避免内存泄露,要注意一下事项 1.及时释放不再使用对象的引用 ,eg:obj=null; 2.Bitmap对象不在使用时调用recycle()释放内存 3. 查询数据库后关闭游标 4.在onPause中Remove...