原创 VxWorks编程方法(2)

2006-10-25 12:32 4475 9 6 分类: MCU/ 嵌入式

VxWorks编程方法(2)


任务间的同步和进程间协调
信号量作为任务间同步和互斥的机制。在 wind 核中有几种类型的信号量,它们分别针对不同的应用需求:二进制信号量、计数信号量、互斥信号量和 POSIX 信号量。所有的这些信号量是快速和高效的,它们除了被应用在开发设计过程中外,还被广泛地应用在VxWorks 高层应用系统中。对于进程间通信,wind 核也提供了诸如消息队列、管道、套接字和信号等机制。
任务间的同步和进程间协调的几种方式:
内存共享(Shared Memory),对简单的数据共享而言.
信号量(Semaphore),基本的互斥和同步.
消息队列(Message queues)和管道(Pipe),单个CPU中,任务间的信息传递.
套结字(Socket)和远程调用(Remote procedure calls),相对于网络任务间的通信.
信号(Signals),出错处理(Exception handling).
互斥(Mutual Exclusion)
互斥是用来控制多任务对共享数据进行串行访问的同步机制。在多任务应用中,当两个或多个任务同时访问共享数据时,可能会造成数据破坏。互斥使它们串行地访问数据,从而达到保护数据的目的.
解决互斥的几种方法:
1. 关闭中断的方法(intLock): 能解决任务和中断ISR之间产生的互斥.
funcA ()
{ int lock = intLock();
. . critical region that cannot be interrupted .
intUnlock (lock); }
但在实时系统中采取这个办法会影响系统对外部中断及时响应和处理的能力.
2. 关闭系统优先级(taskLock): 关闭系统优先级,这样在当前任务执行时,除了中断外,不会有其他优先级高的任务来抢占CPU,影响当前程序运行.
funcA ()
{ taskLock ();
. . critical region that cannot be interrupted .
taskUnlock (); }
这种方法阻止了高优先级的任务抢先运行,在实时系统中也是不适合的,除非关闭优先级的时间特别短.

文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /2 下一条