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系统占有重要的地位.本文主要介绍的是文件的属性,只是稍微提及一下文件系统,日后如果有 ...
随机推荐
- C++ Code_StatusBar
主题 1. 创建状态栏 并显示 2. 在状态栏中显示进度条 3. MDI文档显示和隐藏状态栏 4. 5. 代码::创建状态栏 并显示 //手动添加3个ICON //////////////// ...
- RMI、RPC、SOAP通讯技术介绍及比对 - XML/SOAP
RMI.RPC.SOAP通信技术介绍及比对 1.RMI 使用java的程序员,对于RMI(RemoteMethod Invoke,远程方法调用)一定不陌生,在java中,为了在分布式应用开发时,能够方 ...
- php与mysql的链接到底用mysql 还是mysqli,pdo
参考:http://php.net/manual/en/mysqlinfo.api.choosing.php
- GNU-ARM汇编
GNU ARM 汇编指令(2008-10-29 00:16:10) 标签:linux gnu arm 汇编指令 it 分类:技术文摘 第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C+ ...
- 向linux内核版本号添加字符/为何有时会自动添加“+”号
转载:http://blog.csdn.net/adaptiver/article/details/7225980 1. 引子 编译2.6.35.7 kernel版本的时候发现,“2.6.35.7 ...
- 关于删除7z历史解压路径
目前7zip尚无此功能,只能从注册表入手了,7zip历史记录保存在注册表 HKEY_CURRENT_USER\Software\7-Zip\FM 下的CopyHistory和FolderHistory ...
- 关于解决[INSTALL_FAILED_UPDATE_INCOMPATIBLE]
通过adb install安装apk,报错Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]. 说明没有正常卸载原apk,基本都是直接通过rm XXX.apk所造 ...
- Tika
1.解析图片 @Test public void test1Image() throws IOException, SAXException, TikaException{ String filePa ...
- AsyncTask的介绍
android AsyncTask介绍 AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接 ...
- Debian 8 在虚拟环境中安装kivy
mkvirtualenv kivy 或者按官方教程所说: virtualenv --no-site-packages kivyinstall (kivy)~/pythonvenv ᐅ pip list ...