VxWorks 6.9 内核编程指导之读书笔记 -- VxWorks Kernel application (二)
看门狗时钟的静态 2024-11-04 00:55:57 原文
#1 内核对象的静态实例化
内核对象的静态实例化
任务的静态实例化
VX_TASK宏用来在编译时声明一个任务对象。该宏带有2个参数:任务名和栈大小。不像taskSpawn函数,任务名称可以是NULL。VX_TASK的任务名称必须指定。栈大小是非零值并且是编译时常量。
VX_TASK_INSTANTIATE宏被VX_TASK用来初始化和创建任务,等价于taskSpawn函数的功能。VX_TASK_INITIALIZE宏杯VX_TASK初始化任务并让任务处于SUSPEND状态,直到稍后调用taskActivate函数来激活。
VX_TASK_INSTANTIATE返回发起的任务ID,或者错误码。VX_TASK和VX_TASK_INITIALIZE必须使用相同的任务名。
#include <vxWorks.h>
#include <taskLib.h>
VX_TASK(myTask,4096);
int myTaskId; STATUS initializeFunction (void)
{
myTaskId = VX_TASK_INSTANTIATE(myTask, 100, 0, 4096, pEntry, \
0,1,2,3,4,5,6,7,8,9);
if (myTaskId != ERROR)
return (OK); /* instantiation succeeded */
else
return (ERROR);
}
为了初始化任务并使它处于SUSPEND状态,必须使用VX_TASK_INITALIZE宏。并在稍后使用taskActivate函数来运行该任务。VX_TASK_INSTANIATE和taskActivate使用相同的参数。
#include <vxWorks.h>
#include <taskLib.h>
VX_TASK(myTask,4096);
int myTaskId;
STATUS initializeFunction (void)
{
myTaskId = VX_TASK_INITIALIZE(myTask, 100, 0, 4096, pEntry, \
0,1,2,3,4,5,6,7,8,9);
if (myTaskId != NULL)
{
taskActivate (myTaskId);
return (OK);
}
else
return (ERROR);
}
更多信息,请参阅taskLib的API手册。
信号量的静态实例化
VX_BINARY_SEMAPHORE,VX_COUNTING_SEMAPHORE,VX_MUTEX_SEMAPHORE和VX_READ_WRITE_SEMAPHORE宏分别用来在编译时定义二进制信号量、计数信号量、互斥信号量。这些必须以信号量名称作为参数。
这些信号量通过semBInitialize,semCInitialzie,semMInitialize和semRWInitialize函数来初始化定义的信号量。semXInitialize函数等价于semXCreate函数。
VX_XXX_SEMAPHORE和semXInitialize函数必须使用相同的信号量名称。semXInitialize函数返回信号量的ID。
#include <vxWorks.h>
#include <semLib.h> VX_BINARY_SEMAPHORE(mySemB); /* declare the semaphore */
SEM_ID mySemBId; /* semaphore ID for further operations */
STATUS initializeFunction (void)
{
if ((mySemBId = semBInitialize (mysemB, options, 0)) == NULL)
return (ERROR); /* initialization failed */
else
return (OK);
}
消息队列的静态实例化
VX_MSG_Q用来在编译时声明消息队列对象。带有3个参数:名称,消息队列最大数量及每个消息的最大尺寸。msgQInitialize函数在运行时初始化消息队列使之可用。宏和函数的参数必须保持一致。
#include <vxWorks.h>
#include <msgQLib.h>
VX_MSG_Q(myMsgQ,100,16); /* declare the msgQ */
MSG_Q_ID myMsgQId; /* MsgQ ID to send/receive messages */
STATUS initializeFunction (void)
{
if ((myMsgQId = msgQInitialize (myMsgQ, 100, 16, options)) == NULL)
return (ERROR); /* initialization failed */
else
return (OK);
}
看门狗时钟的静态实例化
VX_WDOG在编译时声明看门狗时钟。带有一个参数,看门狗名称。wdInitialize函数在运行时初始化看门狗时钟。
#include <vxWorks.h>
#include <wdLib.h>
VX_WDOG(myWdog); /* declare the watchdog */
WDOG_ID myWdogId; /* watchdog ID for further operations */
STATUS initializeFunction (void)
{
if ((myWdogId = wdInitialize (myWdog)) == NULL)
return (ERROR); /* initialization failed */
else
return (OK);
}
VxWorks 6.9 内核编程指导之读书笔记 -- VxWorks Kernel application (二)的更多相关文章
- VxWorks 6.9 内核编程指导之读书笔记 -- VxWorks kernel application (一)
#1 什么是内核应用程序? #2 开发内核应用程序注意事项 什么是内核应用程序? 内核应用程序不同于RTP程序,它允许在内核态,与操作系统使用相同的地址空间.因此,它与操作系统会相互干扰.它可以编译成 ...
- VxWorks 6.9 内核编程指导之读书笔记 -- VxWorks Small-Footprint Configuration
什么是Small-footprint? Small-footprint常见关键配置? 如何配置Small-footprint? 什么是Small-footprint? Small-footprint配 ...
- VxWorks 6.9 内核编程指导之读书笔记 -- ISRs和Watchdog Timer
中断服务程序 ISR 硬件中断处理是实时系统的关键,因为它是外部时间通知系统的方式. ISR亦称为中断处理函数,是对中断的正确响应.可以使用任何ISR连接到任何没有被VxWorks使用的中断上.当关联 ...
- VxWorks 6.9 内核编程指导之读书笔记 -- 多任务
概述 VxWork系统任务 任务调度 任务创建和管理 任务的错误状态 任务异常处理 共享代码和重入 概述 现代实时操作系统是基于多任务和任务间通信的概念的.多任务环境运行一个实时进程RTP可以被作为一 ...
- VxWorks 6.9 内核编程指导之读书笔记 -- POSIX
POSIX能力 VxWorks扩展了POSIX,为了移植,VxWorks提供了额外的POSIX接口作为可选组件.VxWorks实现了POSIX 1003.1(POSIX .1)一些传统接口以及POSI ...
- VxWorks 6.9 内核编程指导之读书笔记 -- Singnals
Signals 信号是操作系统用于异常处理和异步控制流的关键.在很多方面,信号相当于软件方面的硬件中的中断.操作系统产生的信号包括总线错误和浮点处理异常.信号也提供了API来管理和产生信号.在应用程序 ...
- VxWorks 6.9 内核编程指导之读书笔记 -- 多任务(二)
VxWorks的系统任务 VxWorks在引导时启动的系统任务依赖于配置,有些总是运行.任务集与VxWorks的基本配置相关,很少的任务常用于可选的组件. 注意:别挂起.删除或改变任何系统任务的优先级 ...
- VxWorks 6.9 内核编程指导之读书笔记 -- C++开发
5.1 介绍 针对C++的VxWorks配置 C++头文件 使用C++启动任务 C和C++之前调用代码 C++编译器说明 在信号处理和ISR中使用C++ 下载C++编写的内核模块 C++编译器的不同 ...
- 《Linux/Unix系统编程手册》读书笔记9(文件属性)
<Linux/Unix系统编程手册>读书笔记 目录 在Linux里,万物皆文件.所以文件系统在Linux系统占有重要的地位.本文主要介绍的是文件的属性,只是稍微提及一下文件系统,日后如果有 ...
随机推荐
- AnimImageView
https://github.com/eltld/AnimImageView
- ajax开发框架和XMLhttpRequest、responseText、responseXml和JSON的应用
1 AJAX开发框架 2 A 初始化XMLHttpRequest对象 3 B指定响应处理函数 4 C发出HTTP请求 5 D处理服务器返回的信息 6 数据格式提要 6 优点 6 缺点 7 解析 JSO ...
- 【JavaScript】AJAX总结(异步JavaScript和XML)
AJAX介绍 通过 AJAX,你可以创建更好.更快以及更友好的 WEB 应用程序. AJAX 基于 JavaScript 和 JavaScript的XMLHttpRequest对象. AJAX 应用程 ...
- [Angular 2] Controlling Rx Subscriptions with Async Pipe and BehaviorSubjects
Each time you use the Async Pipe, you create a new subscription to the stream in the template. This ...
- Perl小知识点之排序sort
脚本这种东西,就是要常用,否则一段时间不用就生疏了,因此决定时时记一些小知识点,一来回顾一下,二来需要的时候可以迅速获得提示. Sort by number You could now write a ...
- 使用phonegap + appframework2.0框架
1.页面切换动画结束时卡(禁用动画) 2.搜索或导航标签需要固定(标签选择器动态修改高度) 3.pancel容器默认生成的时候内容不放 通过动态的的$("").empty().ht ...
- Linux内存管理原理 与文件读写 图 相当详细
http://www.cnblogs.com/zhaoyl/p/3695517.html http://www.cnblogs.com/huxiao-tee/p/4657851.html#_label ...
- .NET多线程执行函数
前面几篇文章一直在写LINQ,这里为什么会出现多线程?原因是DebugLZQ在写一个LINQ综合Demo的时候遇到了多线程,便停下手来整理一下.关于多线程的文章,园子里很多很多,因此关于多线程理论性的 ...
- ios-uitableviewcell展开
#import <UIKit/UIKit.h> @interface ZSDHelpCell : UITableViewCell @property (weak, nonatomic) I ...
- 5. Android框架和工具之 ZXing(二维码)
Android进阶笔记06:Android 实现扫描二维码实现网页登录