36
niversity of Science and Technology of Chi VxWorks 及及及及及及 及及及 [email protected] http:// staff.ustc.edu.cn/~xlanchen 2006 及 7 及

VxWorks 及其应用开发

  • Upload
    maude

  • View
    197

  • Download
    0

Embed Size (px)

DESCRIPTION

VxWorks 及其应用开发. 陈香兰 [email protected] http://staff.ustc.edu.cn/~xlanchen 2006 年 7 月. 课程内容. VxWorks 和 Tornado 简介 任务和任务间通信 信号、中断处理与定时机制 调试环境与实例分析 网络编程 VxWorks 操作系统配置. 信号、中断处理与定时机制. [email protected]. 1 、信号. VxWorks 支持软件信号功能,任何任务和 ISR 都可向指定任务发信号 获得信号的任务立即挂起,并在下次调度运行时转去执行指定的信号处理程序。 - PowerPoint PPT Presentation

Citation preview

University of Science and Technology of China

VxWorks 及其应用开发

陈香兰[email protected]

http://staff.ustc.edu.cn/~xlanchen

2006 年 7 月

2University of Science and Technology of China

课程内容• VxWorks 和 Tornado 简介• 任务和任务间通信• 信号、中断处理与定时机制• 调试环境与实例分析• 网络编程• VxWorks 操作系统配置

University of Science and Technology of China

信号、中断处理与定时机制

[email protected]

4University of Science and Technology of China

1 、信号• VxWorks 支持软件信号功能,任何任务

和 ISR 都可向指定任务发信号• 获得信号的任务立即挂起,并在下次调度

运行时转去执行指定的信号处理程序。• 信号处理程序的运行使用接收者的上下文

和堆栈• 当任务被阻塞时,信号处理程序仍然可以

被唤醒

5University of Science and Technology of China

• 与任务间通信相比,信号机制适合于错误和异常处理

• 可以将信号处理程序作为 ISR 看待:• 信号与中断都是异步的• 任何可能导致阻塞的函数均不能在信号处理

程序中调用(信号处理程序能够调用的函数与 ISR 中能够安全使用的函数一样)

6University of Science and Technology of China

• Wind 内核支持两种类型的信号接口• UNIX BSD 风格的信号• POSIX 兼容的信号

• 建议:编程时不要混合使用不同的接口形式

7University of Science and Technology of China

1.1 、基本的信号接口

8University of Science and Technology of China

9University of Science and Technology of China

• sigInit()• 在调用任何信号接口之前,必须先使用 sigIni

t 初始化信号函数库。• 正常情况下,在中断允许之前,在程序 usrCo

nfig.c 的 usrInit 函数中调用

10University of Science and Technology of China

• 基本信号接口提供 31 个不同的信号,使用 sigVec() 或 sigAction() 可为信号指定一个信号处理程序

指明信号处理程序对应的信号指明信号处理程序保存对应信号原来的信息

UNIX BSD

当信号到来时,指定的信号处理程序将被运行

11University of Science and Technology of China

sigVec 中的 struct sigvec 和 sigaction 中的 struct sigaction都在 signal.h 中定义

sigaction 与 sigvec 差别不大

12University of Science and Technology of China

• kill() 将一个信号发给指定的任务

13University of Science and Technology of China

• sigsetmask() 、 sigblock() 、 sigprocmask() 用来屏蔽信号

UNIX BSD

31 个信号使用一个 int 类型的数可以表示,其中每位代表一个信号

Sigsetmask 设置任务的信号屏蔽信息为 mask ,mask 中某个位为 1 就表示对应位的信号将被屏蔽

14University of Science and Technology of China

UNIX BSD

与 sigsetmask 的区别, sigblock 在原有的基础上增加一些需要被屏蔽的信号,而 sigsetmask 是设置操作

15University of Science and Technology of China

Sigprocmask 使用 how 参数指明对信号屏蔽信息要执行的操作,包括:SIG_BLOCK, SIG_UNBLOCK, SIG_SETMASK

16University of Science and Technology of China

1.2 POSIX 信号队列• sigqueue() 提供与 kill() 类似的功能:向

任务发送信号• sigqueue() 将发送给任务的多个信号排队,

而 kill 仅仅提交一个信号

17University of Science and Technology of China

接收信号的另外一种手段( POSIX 1003.1b )• sigwaitinfo() 允许接收一个信号,而不用注册信

号处理程序• 当信号到来时, sigwaitinfo() 返回信号的值,

而不会调用信号处理程序(尽管可能已经注册了信号处理程序)

// 返回值

18University of Science and Technology of China

• sigtimedwait() 与 sigwaitinfo() 相似,但允许设置超时参数

19University of Science and Technology of China

信号使用举例

20University of Science and Technology of China

21University of Science and Technology of China

22University of Science and Technology of China

2 、中断服务程序• 硬件中断的处理是实时系统设计的最重要、最

关键的问题• 一个中断往往对应着一个外部事件,系统通过

中断与外部事件交互• 中断响应时间应该尽可能快,因此 VxWorks 的

ISR 运行在特定的上下文中(在所有任务上下文之外)

• 因此中断处理不会涉及任何任务上下文的交换• VxWorks 的库 intLib 和 intArchLib 提供中断函

23University of Science and Technology of China

24University of Science and Technology of China

25University of Science and Technology of China

2.1 设置中断处理程序• VxWorks 提供 intConnect() 函数,将指定

的 C 函数与任意指定的中断相关联

intConnect() 中指定的 C 函数 routine 与指定的中断向量 vector 相联系,当中断发生时就会调用 routine 并使用 parameter 作为 routine 的参数

26University of Science and Technology of China

• 中断处理程序 routine 在中断级以 supervisor 方式调用• 建立一个合适的 C 环境• 保存必要的寄存器• 建立堆栈

• 中断处理程序不能调用任何可能引起阻塞和执行 I/O 操作的操作系统函数

27University of Science and Technology of China

• 事实上,中断向量不是直接指向 intConnect() 指定的 C 函数

• intConnect() 将创建一小段代码• 保存必要的寄存器• 设置堆栈入口• 包含将要传递的参数

• 这段代码或者在一个特殊的堆栈或者在当前任务的堆栈中被调用

28University of Science and Technology of China

• 当中断处理函数运行结束,返回时• 这段代码先恢复寄存器和堆栈• 然后退出中断

29University of Science and Technology of China

中断处理过程

30University of Science and Technology of China

2.2 中断堆栈• 中断在特殊的上下文中运行• 有的体系结构允许所有的 ISRs 使用相同

的中断堆栈,有的不允许• 无论哪种情况,堆栈必须足够大

• 能够处理正常和最坏情况下中断的嵌套• 使用 checkStack() 可以查看一个任务堆

栈的使用情况,或整个系统堆栈的使用情况

31University of Science and Technology of China

2.3 ISR 的特殊限制• 由于 ISR 不是在规则的任务上下文中运行,

例如• 没有 TCB• 所有的中断共享一个堆栈

• 因此 ISR 不能调用可能引起阻塞的函数• 下表列出了 ISR 可以调用的函数

32University of Science and Technology of China

33University of Science and Technology of China

2.4 中断与任务的通信• VxWorks 支持运行在中断级的 ISR直接

与一般任务进行通信• 由于 ISR 能够调用的函数有限制,只能通

过如下方法通信• 共享存储区、环缓冲• 部分信号量( ISR只能释放)• 消息队列,可以发送,若队列满则丢弃• 管道,可以写,若管道满则丢弃• 信号,可以发信号

34University of Science and Technology of China

中断处理程序举例

35University of Science and Technology of China

36University of Science and Technology of China