好像现在Android很火,真想去学android不过android也是linux内核,即在linux内核上搞一个java虚拟机,执行java程序(我的理解不一定正确),所以学习LINUX还是很好啊。。。呵呵。

转正题UC/OS-II学习。

可重入函数

上次讲到可重入函数,什么是可重入函数呢?可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误。(简单点说就是程序在调用执行一个函数时,被中断或者挂起了,在中断执行完,或者内核再次调度此任务继续执行此函数时候,其中的数据不会都不会被改变)。

void swap(int *x, int *y) //可重入函数

{

int tmp = *x;

*x= *y;

*y= tmp;

}

int tmp;

void swap(int *x, int *y) //不可重入函数(tmp可能会被改变)

{

tmp = *x;

*x = *y;

*y = tmp;

}

也需会看到最简单的编写可重入函数的方法就是使用局部变量,而在现实的工程中式很困难的,所以引入了一种锁机制,即如果想使用一个函数(该函数可以被多个任务调用)用到了一些全局变量,可以讲此全局数据锁上,在使用完成之后释放,在使用期间别的任务不能用到此全局变量。

任务的调度需要有中断,或者模拟的中断环境,所以要保护数据也可以关闭用关闭中断来实现。

实现方法:

void Fuction(void)

{

OS_ENTER_CRITICAL(); //保存当前寄存器状态,关闭中断

/*数据处理*/

OS_EXIT_CRITICAL(); //回复原来寄存器值(这里为什么不去刻意开中断呢??因为原来的函数可能已将在关中断的环境下执行,所以不应该开中断,只应该回复到原来状态)

}

在实现任务间通信时候最会涉及对共享数据的处理,要保证处理数据的唯一性,与顺序性——以避免竞争与数据破坏。

还有采用关调度来实现共享资源的保护,但一般不用比较危险

采用信号量机制保护,因为与linux上有一点点小却别所以就不说了,以免混淆了

死锁:死锁也称抱死,知两个或者多个任务互相想用别的任务占有资源,而不释放自己拥有的资源。主要的处理方法就是让任务先得到所有的资源然后执行后立即释放,或者按照同样的循序去申请资源,而后按照逆序释放资源。同样可以设置申请资源的超时时间。

以上两个小结都是理论性的(不正确之处请指正)下一次写就会分析代码了

更多相关文章

  1. 箭头函数的基础使用
  2. Python技巧匿名函数、回调函数和高阶函数
  3. 浅析android通过jni控制service服务程序的简易流程
  4. android实现字体闪烁动画的方法
  5. 在Fragment中设置控件点击方法,执行失败。
  6. Android(安卓)bluetooth介绍(四): a2dp connect流程分析
  7. Android(安卓)之 AsyncTask 异步任务
  8. Android架构分析之使用自定义硬件抽象层(HAL)模块
  9. Android出现java.lang.RuntimeException: Can't toast on a thre

随机推荐

  1. 源码分析android 系统framework(一)之Activ
  2. Android命名规范
  3. Android:关于ContentProvider的知识
  4. 手把手教Android商业项目-即时通讯-i美聊
  5. Android短信操作(通过内容提供者)
  6. Android Design Principles
  7. 《转》两分钟彻底让你明白Android中onInt
  8. sdcard无法挂载问题
  9. Android文档阅读02—解析Android程序
  10. Android编程 获取网络连接状态 及调用网