这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » ucos中如何定义可重入函数?

共3条 1/1 1 跳转至

ucos中如何定义可重入函数?

菜鸟
2007-06-01 00:18:40     打赏
谢谢!



关键词: 如何     定义     重入     函数    

菜鸟
2007-06-01 17:54:00     打赏
2楼
可重入的代码指的是一段代码(如一个函数)可以被多个任务同时调用,而不必担心会破坏数据。也就是说,可重入型函数在任何时候都可以被中断执行,过一段时间以后又可以继续运行,而不会因为在函数中断的时候被其他的任务重新调用,影响函数中的数据。
下面的两个例子可以比较可重入型函数和非可重入型函数:
  程序1:可重入型函数
      void swap(int *x,int *y)
      {int temp;
       temp=*x;
       *x=*y;
       *y=temp;
      }
  程序2:非可重入型函数
      int temp;
      void swap(int *x,int *y)
      {
       temp=*x;
       *x=*y;
       *y=temp; }

菜鸟
2007-06-04 21:01:00     打赏
3楼

函数可重入是多线程(多任务)系统的代码安全的一个重要组成部分。楼上的hrman兄弟给出了可重入的很好的解释和例程。要做到重入安全和多线程安全。可如下考虑:

1. 函数引用的数据或对象全部位于栈(局部变量,对象),因为每一个线程(任务)都有独立的栈。

2. 一定要使用公共数据的情况下,使用操作系统原语调用进行保护(比如两个任务使用同一个函数操作公共缓冲区,则使用信号量进行保护,保证其“顺序执行”,不至于使得数据不完整)。


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]