VxWorks初学者全面学习资料包

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:VxWorks是一个高性能的实时操作系统,广泛应用于嵌入式系统。本套学习资料为初学者量身定做,内容包含基础知识、编程指南、操作系统指南、实例解析和程序员手册等,帮助新开发者快速掌握VxWorks的基本概念和编程技巧,以及了解其内部工作原理。 vxWorks学习资料,适合初学者

1. VxWorks实时操作系统的概念与架构

1.1 实时操作系统简介

VxWorks是一种流行的实时操作系统(RTOS),广泛应用于需要高可靠性和高性能的嵌入式系统。与通用操作系统相比,RTOS强调时间上的确定性以及对并发任务的高效管理。

1.2 VxWorks的核心特性

VxWorks提供了多任务处理、中断管理、设备驱动支持和网络通信等核心功能,支持多任务环境下资源的合理分配和任务的高效调度,是设计嵌入式系统时的理想选择。

1.3 VxWorks的架构概述

VxWorks的架构以微内核为核心,通过模块化设计,实现了可裁剪性,使得开发者可以根据具体需求添加或删除特定的系统功能。其微内核架构保证了系统的高稳定性和可扩展性,使得VxWorks能够适应多种不同的应用场景。

2. C/C++编程语言在VxWorks中的应用

2.1 C/C++语言基础与VxWorks的集成

2.1.1 C/C++语言的核心特性

C/C++语言是编程领域广泛使用的语言,具有高度的可移植性和强大的抽象能力,适用于从系统级编程到应用级开发的多个层面。C语言提供了一套丰富的操作符,使得程序员能够进行底层硬件操作和内存管理,这在实时操作系统(RTOS)如VxWorks中非常关键。C++语言在C的基础上引入了面向对象编程(OOP)的特性,如类、继承、多态和封装,这使得代码的组织和复用性更强。在VxWorks这样的实时操作系统中,这些特性可以用来实现模块化和可扩展的系统架构,同时利用C++的高效率和C语言的底层控制,构建稳定和性能优化的实时应用。

2.1.2 VxWorks环境下的C/C++编译器设置

VxWorks环境中,针对C/C++编译器的设置对于性能优化至关重要。开发者需要根据具体需求配置编译器选项,比如优化等级、目标架构和内存模型等。例如,在编译器优化设置中,可以选择不同的优化级别(-O0, -O1, -O2, -O3, -Os等),以平衡编译时间和运行时性能。针对VxWorks的特定硬件,编译器需要知道目标处理器的架构和指令集,以便生成适合特定硬件的高效代码。此外,内存模型的选择也很重要,因为不同的模型影响程序如何处理内存访问和共享。开发者应该根据应用的实时性要求和系统资源,合理选择合适的编译器选项,以满足VxWorks项目的需求。

2.2 面向对象编程在VxWorks中的实现

2.2.1 类和对象的概念

在C++中,类是定义对象属性和行为的蓝图或模板。类可以包含数据成员(变量)和函数成员(方法),用以表达对象的状态和能够执行的操作。对象是类的实例,每个对象都拥有自己的数据成员副本,但共享类中定义的方法。在VxWorks这样的实时操作系统中,面向对象编程的使用允许开发者设计出结构化的代码,通过类和对象的封装,使得系统的各个模块更加独立,便于维护和扩展。例如,可以创建一个设备驱动类,将设备的数据和操作封装在一起,让其他部分的代码通过统一的接口与设备交互,提高代码的复用性。

2.2.2 继承、封装和多态性的运用

继承、封装和多态是面向对象编程的三大特性,它们在VxWorks中可以被充分利用以实现高效和模块化的实时系统。

  • 继承 允许类从另一个类继承属性和方法,为创建具有相似行为但具有特定差异的类提供了一种便捷的方式。在VxWorks中,开发者可以利用继承创建一系列相关的设备驱动或任务类,通过继承共享通用代码,同时扩展特定功能。

  • 封装 通过隐藏对象的内部实现细节,只暴露一个公共接口,提高代码的安全性和可维护性。在VxWorks项目中,封装确保系统模块之间的接口清晰明确,避免了直接操作内部实现,从而减少出错的可能性。

  • 多态 允许通过基类指针或引用来操作派生类对象,提供了一种编写通用代码的方法。多态在VxWorks中的运用可以支持同一接口不同实现的多种操作,比如,一个设备管理类可以设计为使用统一接口处理不同类型的设备,每种设备都可以有自己的实现方式。

2.3 高级编程技术与最佳实践

2.3.1 内存管理与优化

在实时操作系统中,内存管理是一个关键因素,它直接影响系统的性能和稳定性。VxWorks支持多种内存管理策略,包括静态和动态内存分配,内存池的使用等。合理地使用这些策略对于提高性能和减少内存碎片至关重要。

静态内存分配通常用于实时系统中的固定大小对象。它避免了动态内存分配的开销和碎片问题,但需要在系统设计时预知内存需求。代码示例如下:

char buffer[1024]; // 静态分配1KB的缓冲区

动态内存分配则提供了更大的灵活性,允许程序根据需要在运行时分配和释放内存。在VxWorks中,可以使用标准C库的 malloc free 函数,或者利用VxWorks提供的内存管理API,如 memPartAlloc memPartFree ,这些API允许创建内存分区(memory partition),能够更有效地管理内存资源。动态内存分配需要注意内存泄漏和碎片问题,适当的内存管理技术可以用来优化内存使用。

2.3.2 错误处理和调试技巧

在实时操作系统中,错误处理至关重要,错误可能导致系统不稳定或崩溃。C/C++语言提供了多种机制来处理错误,如返回值检查、异常抛出和处理、断言(assert)等。在VxWorks环境下,推荐使用 errno 来表示错误类型,并结合 sysErrGet() 函数来获取系统错误代码。例如:

int result = someOperation();
if (result < 0) {
    printf("Operation failed, error code: %d\n", sysErrGet());
}

调试技巧方面,VxWorks提供了多种调试工具,如WindSh(WindRiver Shell)、trace工具和core dump分析等。开发者应熟练使用这些工具来跟踪程序的执行流程,监视系统状态,以及在必要时进行内存和性能分析。调试过程中的日志记录(logging)也很重要,它可以帮助开发者记录关键的运行信息,便于在后期分析和定位问题。合理运用这些调试技巧和工具,可以显著提高开发效率,并保证系统的可靠性和稳定性。

3. 微内核结构和多任务处理的深入理解

3.1 微内核架构的基础

3.1.1 微内核与宏内核的比较

微内核(microkernel)架构与宏内核(monolithic kernel)架构在设计理念上有明显的差异。在微内核架构中,核心系统只包括最基本的服务,如进程和内存管理,而其他服务,如文件系统和网络通信,则在用户空间以服务器的形式运行。这种分离的设计使得系统更加安全、稳定和灵活。

相比之下,宏内核将大部分服务和驱动程序集成到单一的内核空间中。虽然这在性能上可能有优势,但缺点是任何一个服务的失败都有可能影响到整个系统的稳定性。此外,宏内核的维护和扩展也相对更加困难。

3.1.2 VxWorks微内核的关键组件

VxWorks作为一款实时操作系统,其微内核架构的关键组件包括任务管理器、内存管理器、文件系统和网络堆栈等。任务管理器负责调度任务并管理它们的状态和优先级,而内存管理器则负责动态分配和回收内存资源。VxWorks通过内核扩展的形式来提供如文件系统和网络支持等其他服务。

这些组件的设计和实现都是围绕实时性和可靠性展开的,以确保在多任务处理环境下,系统能够满足严格的时序要求并维持高效的运行。

3.2 多任务环境下的任务创建与调度

3.2.1 任务的状态和优先级

在VxWorks多任务处理环境下,每个任务都具有自己的状态,一般包括就绪、运行、挂起和完成等。任务的状态变化取决于其优先级和内核调度算法。

任务优先级是VxWorks实时调度策略的核心,系统通过优先级决定哪个任务应获得CPU时间。系统允许动态调整任务优先级,从而使实时系统能响应各种外部事件并及时执行高优先级的任务。

3.2.2 上下文切换和任务切换算法

上下文切换是操作系统中为了实现多任务处理,将CPU资源从一个任务切换到另一个任务的过程。上下文切换涉及到保存当前任务的状态信息,包括寄存器的值和程序计数器,并加载下一个任务的状态信息。

VxWorks通过优化的调度器来最小化上下文切换的开销。任务切换算法必须保证公平性和效率,防止低优先级任务被饿死,并确保高优先级任务能快速响应。

3.3 同步机制与内存管理

3.3.1 信号量、互斥锁和消息队列的使用

为了在多任务环境中有效地管理共享资源和协调任务,VxWorks提供了一系列同步机制,包括信号量、互斥锁和消息队列。

信号量用于控制对共享资源的访问,防止资源冲突。互斥锁是信号量的一种特殊形式,提供了互斥访问。消息队列则允许任务之间通过消息传递进行非阻塞通信。

正确使用这些同步机制对保证实时系统的稳定性和实时性至关重要。以下是VxWorks中互斥锁使用的示例代码:

#include <taskLib.h>
#include <semLib.h>
#include <taskVarLib.h>
#include <stdio.h>

SEM_ID mutualExclusion; // 互斥锁标识符

void task1(void) {
    semTake(mutualExclusion, WAIT_FOREVER); // 请求互斥锁
    // 执行临界区代码...
    semGive(mutualExclusion); // 释放互斥锁
}

void task2(void) {
    semTake(mutualExclusion, WAIT_FOREVER); // 请求互斥锁
    // 执行临界区代码...
    semGive(mutualExclusion); // 释放互斥锁
}

int main() {
    mutualExclusion = semMCreate(SEM_Q_PRIORITY); // 创建互斥锁
    taskSpawn("t1", 100, 0, 4096, (FUNCPTR)task1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    taskSpawn("t2", 100, 0, 4096, (FUNCPTR)task2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    return 0;
}

3.3.2 动态内存分配和内存池管理策略

在实时系统中,由于内存碎片和实时性要求,动态内存分配需要特别设计的内存管理策略。VxWorks提供内存池管理机制,允许系统预先分配固定大小的内存块,供实时任务使用。

内存池的管理减少了内存分配的开销和碎片化问题,提高了内存使用的可靠性和效率。内存池通常通过如下方式创建:

#include <stdlib.h>
#include <memLib.h>

void* memoryPool;

void createMemoryPool() {
    // 分配一个拥有100个整型大小的内存池
    memoryPool = memPartCreate("MyMemoryPool", sizeof(int) * 100, 4, 0);
}

void destroyMemoryPool() {
    // 销毁内存池
    memPartDelete(memoryPool);
}

系统提供内存池控制函数 memPartCreate memPartDelete 来创建和销毁内存池。通过内存池,实时应用可以保证内存分配的确定性和实时性。

本章节深入探讨了VxWorks的微内核架构以及多任务环境下的任务处理和同步机制。下一章将继续深入系统调度策略与内存管理的高级应用,探索如何进一步优化实时操作系统的性能。

4. 系统调度策略与内存管理的高级应用

4.1 系统调度策略的深入分析

4.1.1 实时调度算法

实时调度算法是保证系统在严格时间限制下完成任务的关键。在VxWorks中,常见的实时调度策略包括速率单调调度(RM),最早截止时间优先(EDF),以及固定优先级调度(FP)。每种策略都有其适用场景和优缺点。

  • 速率单调调度(RM)
  • RM调度是一种静态优先级调度算法,适用于周期性任务。任务的优先级与其执行频率成正比,频率越高的任务优先级越高。
  • 在VxWorks的实现中,任务初始化时需指定期望的执行频率,系统按照频率自动计算优先级。
  • 此策略简单高效,但对任务的执行周期有严格要求。

  • 最早截止时间优先(EDF)

  • EDF是一种动态优先级调度算法,适用于非周期性任务或周期性任务的动态变化。
  • 任务的优先级根据其截止时间动态调整,截止时间越早,优先级越高。
  • EDF更灵活,适用于复杂实时系统,但增加了系统调度的复杂性和计算开销。

  • 固定优先级调度(FP)

  • FP是一种静态优先级调度算法,适合可以预先确定任务优先级的场景。
  • 每个任务被分配一个固定的优先级,并且在任务创建时设置。系统按照优先级顺序进行任务调度。
  • FP适合确定性环境,但不能处理任务动态到达的情况。

4.1.2 调度策略的选择和实现

选择合适的调度策略对实时系统的性能至关重要。开发者需要根据系统的实时性能要求和任务特点,权衡不同的调度策略。

  • 实时性能要求
  • 根据系统的实时性能要求,选择满足最坏情况响应时间要求的调度算法。
  • 如果系统中任务周期性较强,RM是好的选择。而任务动态变化较多,则应考虑EDF。

  • 任务特点

  • 任务的可预测性和一致性决定了调度策略的选择。固定周期的任务适合静态优先级调度;动态任务适合动态优先级调度。

  • 实现步骤

  • 确定系统中任务的数量和特性。
  • 根据实时性能要求和任务特点,选择合适的调度策略。
  • 在VxWorks中,配置调度器参数,包括任务优先级和调度策略。
  • 编写任务代码,并使用所选的调度策略进行测试。

代码块示例:

#include <vxWorks.h>
#include <taskLib.h>

#define TASK_PRIORITY 100 // 定义任务优先级
#define STACK_SIZE 8192   // 定义任务堆栈大小

STATUS taskExample (void) {
    /* 任务代码实现 */
    while (1) {
        /* 执行任务操作 */
    }
}

void main() {
    /* 创建任务并指定调度策略 */
    int id = taskSpawn("tExample", TASK_PRIORITY, 0, STACK_SIZE,
                       (FUNCPTR)taskExample, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    /* 其他系统初始化代码 */
    taskInit(); // 启动调度器
}

在这段代码中,我们定义了任务的优先级和堆栈大小,创建了一个任务并指定其为周期性任务。在 taskExample 函数中实现具体的任务逻辑。这是在VxWorks中实现任务调度的基础代码。

4.2 内存管理策略的详细探讨

4.2.1 内存分页和分段机制

内存分页和分段是两种基本的内存管理方式,它们在操作系统的内存管理中扮演着重要角色,尤其在VxWorks这样的实时操作系统中。

  • 内存分页
  • 分页机制将物理内存分割为固定大小的页(page),而逻辑内存被划分为同样大小的页框(page frame)。
  • VxWorks中的页大小通常是4KB,每一页由一个页表项(page table entry)表示,页表则记录了虚拟地址到物理地址的映射。
  • 分页机制的优点在于它支持虚拟内存,可以有效管理内存碎片问题,并提供保护机制防止进程间相互干扰。

  • 内存分段

  • 分段机制将程序的地址空间划分为若干段,每个段是一个逻辑上连续的地址空间。
  • 段可以有不同的长度,并且段的大小由程序实际需要决定。
  • 分段机制支持模块化编程,并且可以为不同的段提供不同的保护级别。

4.2.2 堆栈管理与内存泄漏检测

在任何操作系统中,堆栈管理都是内存管理的重要组成部分,特别是在实时操作系统中,有效的堆栈管理能够保证任务的正常运行,并避免内存泄漏。

  • 堆栈管理
  • 堆栈负责存储函数调用时的局部变量、返回地址等信息。在任务创建时需要为每个任务分配堆栈空间。
  • 在VxWorks中,可以通过API函数 taskSpawn 设置堆栈大小参数。
  • 有效的堆栈管理还包括堆栈溢出的检测,防止由于堆栈溢出导致的系统崩溃。

  • 内存泄漏检测

  • 内存泄漏是导致系统性能下降和不稳定的主要原因之一。在实时操作系统中,内存泄漏可能导致任务无法完成,甚至系统崩溃。
  • VxWorks提供内存泄漏检测工具,如 memPartShow ,用于监控和检测内存使用情况,及时发现内存泄漏。
  • 开发者可以通过定期检查内存使用情况,以及使用静态代码分析工具来预防内存泄漏的发生。

4.3 性能调优与故障排除

4.3.1 性能指标和监控工具

性能调优是确保实时操作系统高效运行的关键步骤。在VxWorks中,有许多性能指标和监控工具可以帮助开发者优化系统性能。

  • 性能指标
  • 包括任务切换时间、中断响应时间、CPU使用率、内存使用率等。
  • 这些指标反映了系统的实时性能和资源使用情况,是性能调优的依据。

  • 监控工具

  • VxWorks提供多种内建的监控工具,如 WindView Task Manager System Profiler
  • 这些工具可以实时监控任务状态、CPU调度、内存使用等信息,并提供可视化界面。

4.3.2 常见问题的诊断和解决方法

在实时系统中,性能问题可能来源于多种原因,如任务设计不当、资源竞争、内存泄漏等。诊断和解决这些问题需要系统的方法。

  • 任务设计不当
  • 任务优先级设置不合理,可能导致某些高优先级任务饥饿或低优先级任务得不到执行。
  • 解决方法包括调整任务优先级、使用优先级继承机制以避免优先级反转问题。

  • 资源竞争

  • 如果多个任务需要访问共享资源,竞争可能导致死锁或性能下降。
  • 通过使用互斥锁、信号量等同步机制,可以有效管理资源访问,预防竞争问题。

  • 内存泄漏

  • 内存泄漏会导致可用内存逐渐减少,影响系统性能和稳定性。
  • 定期使用内存检测工具检查内存使用情况,并通过代码审查等手段预防内存泄漏的发生。

以上为第四章中系统调度策略与内存管理的高级应用章节内容。通过本章节的深入分析与探讨,我们不仅理解了实时系统中调度策略与内存管理的重要性,还掌握了实用的故障诊断和性能优化方法。

5. 文件系统、API函数与网络功能的综合应用

在现代操作系统中,文件系统管理着数据的存储和检索,API函数提供了一个标准的接口来执行常见的操作任务,而网络功能则是实现系统间通信的关键。本章将探讨这些主题如何在VxWorks实时操作系统中得到应用和集成。

5.1 文件系统的操作与管理

5.1.1 文件系统的类型和结构

VxWorks提供了不同的文件系统类型,每种类型都有其特定的应用场景和优化目标。例如,dosFs文件系统是专门为小型嵌入式系统设计的,而ramDisk则为数据缓存提供了快速的读写访问。文件系统的结构设计需要考虑存储介质、性能和可靠性等因素。

// 示例:在VxWorks中挂载文件系统
STATUS vxWorksMount(char *specialFile, char *specialName);

代码解释: vxWorksMount 函数是VxWorks中用于挂载文件系统的标准函数,其中 specialFile 是物理存储介质的标识符, specialName 是文件系统的挂载点名称。

5.1.2 文件操作API的使用

文件操作API是与文件系统交互的基础。例如,在VxWorks中,可以使用 open read write close 等标准POSIX文件操作函数。

// 示例:打开、读取、写入和关闭文件
int fd = open("/fs/myfile.txt", O_RDWR | O_CREAT);
write(fd, "Hello VxWorks!", 15);
lseek(fd, 0, SEEK_SET);
char buffer[16];
read(fd, buffer, 15);
close(fd);

以上代码展示了在VxWorks系统中进行基本的文件操作。文件首先被打开,随后数据被写入,接着文件指针被重置到开始位置,之后读取数据并关闭文件。

5.2 设备驱动开发与系统调用

5.2.1 驱动程序的设计原则和开发流程

在VxWorks中,设备驱动是操作系统与硬件通信的桥梁。驱动程序需要根据硬件的特性来设计,以确保高效、稳定地控制硬件资源。

// 驱动程序示例代码片段
STATUS myDriverInit()
{
    // 初始化代码
    return OK;
}

// 驱动程序的读操作入口点
int myDriverRead(int minor)
{
    // 实现读取操作的逻辑
    return ERROR;
}

代码解释:驱动程序的初始化函数 myDriverInit 和读取操作的入口点 myDriverRead 是驱动开发中常见的函数。在VxWorks中,驱动程序的开发需要遵循特定的结构和标准。

5.2.2 系统调用接口的封装和应用

系统调用是用户程序与操作系统内核进行通信的机制。在VxWorks中,API函数封装了这些系统调用,为开发者提供了简洁的接口。

// 示例:调用系统调用接口来读取文件
int bytesRead;
FILE_ID fid = fileOpen("/fs/myfile.txt", O_RDONLY, 0666);
if (fid != NULL)
{
    bytesRead = fileRead(fid, buffer, sizeof(buffer));
    fileClose(fid);
}

以上代码使用了VxWorks提供的API函数 fileOpen , fileRead , fileClose 来完成文件的读取操作。系统调用接口在背后处理底层的细节,使得开发者能够更加专注于业务逻辑。

5.3 网络功能的实现与TCP/IP协议栈的集成

5.3.1 网络编程接口的介绍

VxWorks提供了丰富的网络编程接口,使得开发者可以轻松构建网络相关的应用程序。这些接口支持多种网络协议,如TCP、UDP和IP。

// 示例:创建一个TCP套接字并连接到服务器
SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(12345);
serverAddr.sin_addr.s_addr = inet_addr("192.168.1.100");
connect(sock, (struct sockaddr*)&serverAddr, sizeof(serverAddr));

以上代码创建了一个TCP套接字,并尝试连接到指定的服务器IP地址和端口号。这是网络通信中最基本的步骤之一。

5.3.2 TCP/IP协议栈的配置和使用技巧

VxWorks的TCP/IP协议栈是可配置的,允许开发者根据需要启用或禁用特定的协议和服务。配置TCP/IP协议栈涉及到网络接口的初始化和参数设置。

// 示例:配置网络接口
struct ifreq ifr;
char *netifName = "eth0";
int sock = socket(AF_INET, SOCK_DGRAM, 0);
ioctl(sock, SIOCGIFCONF, (char*)&ifr);
ioctl(sock, SIOCSIFADDR, (char*)&ifr);

以上代码使用了 ioctl 函数来获取网络接口配置,并为名为"eth0"的网络接口设置了地址。这是在VxWorks中配置网络接口的常见方法。

为了实现高效的网络通信,开发者需要理解TCP/IP协议栈的工作原理,以及如何优化其性能。例如,合理设置TCP窗口大小、使用缓冲机制、避免网络阻塞和延迟等,都是需要考虑的问题。在实际应用中,还需要考虑安全问题,如使用加密通信和数据验证机制。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:VxWorks是一个高性能的实时操作系统,广泛应用于嵌入式系统。本套学习资料为初学者量身定做,内容包含基础知识、编程指南、操作系统指南、实例解析和程序员手册等,帮助新开发者快速掌握VxWorks的基本概念和编程技巧,以及了解其内部工作原理。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

个人前几年学习Vxworks时,整理的笔记,总给大家了。 1 基于硬盘启动的Vxworks环境搭建 3 2 Vxworks引导盘制作 6 2.1 通过DOS加载VxWorks方法 6 2.2 Bootrom三种类型 7 2.3 VxWorks映象 7 2.4 Bootrom.sys最快制作方法 8 2.5 从网络引导 8 2.6 从本地硬盘引导 9 2.7 制作bootrom文件 9 2.8 Bootrom编译步骤 11 2.9 用BSP生成Bootable工程(即我们的程序文件) 12 2.10 FTP Server下载VxWorks 14 3 Tornado调试环境的建立 17 3.1.1 配置文件config.h 17 3.1.2 网络连接 18 6 从主机搭接(attach)到目标机 21 7.1.3 串口连接 21 4 4.Config.h文件注释说明 22 4.1 启动行说明 #define DEFAULT_BOOT_LINE \: 22 4.2 Config.h 文件说明 23 4.3 启动参数结构体 BOOT_PARAMS 35 4.4 booting过程介绍,比较详细 38 5 sysClkRateGet();返回系统时钟每秒的tick数量, tick详解 43 6 中断应用设计要点 44 7 驱动程序设计 49 8 缩短vxworks的启动时间 51 9 调试篇 54 10 驱动编程步骤 54 10.1 将驱动程序增加到“系统驱动程序列表”中 54 10.2 将设备增加到“系统设备列表”中 55 10.3 打开设备,得到文件描述符 55 10.4 SELECT机制的使用 55 10.4.1 select( )函数翻译 57 11 VxWorks系统的网络驱动(END) 60 12 VXworks操作系统中信号量用于多任务同步与互斥的讨论 62 12.1 二进制信号量实现互斥和同步 64 12.1.1 互斥的实现: 64 12.1.2 同步的实现: 65 12.2 互斥信号量 67 13 Tornado的文件目说明录 68 14 Shell 内置命令说明 72 14.1 任务管理 72 14.2 任务状态信息 72 14.3 系统修改和调试 73 14.4 对象命令( WindSh Commands for Object Display ) 73 14.5 WindShell and Browser, Shell 命令 74 15 驱动篇 81 16 中断篇 83 16.1 中断服务程序ISR编写注意事项 83 16.2 中断号与中断向量的转换 83 16.3 安装中断服务程序 intConnect() 83 16.4 调试中断服务程序方法 84 17 mkboot批处理命令详细解释 84 18 MakeFile 说明 85 19 VxWorks5.4中的输入输出重定向 89 19.1 vxworks屏幕输出, 一般来说用printf都是串口/shell输出,串口输出就可以到屏幕上了? 89 19.2 20.2 VxWorks中针对X86开发时标准输入输出的重定向? 90 20 怎样加入外部.o文件? 92 21 如何在Vxworks中使用 cd ,pwd , ls 命令:启用File System and Disk Utilities组件(INCLUDE_DISK_UTIL),可在shell下用pwd/cd/ls等命令 93 22 Error: image is larger than 524288 bytes 94 23 proxyArpDefaultOn()未定义解决方法? 94 24 如何将VxWorks的系统定时间隔或系统Ticks设置为1ms????? 95 25 read/write、fread/fwrite、fopen/open有什么区别 96 26 快速启动??????????????? 100 27 启动时报ATA0a和硬盘启动相关问题 100 28 如何安装USB2.2新版本及编译USB驱动? 101 29 WindML、图形界面相关问题 102 29.1 WindML,ugldemo出错? 102 29.2 5101 VxWorks黑屏问题? 102 29.3 添加ugldemo.c后,编译报undefined reference to “ugltextdraw” 错误一大堆? 102 29.4 WindML 中文字库显示? 103 30 VxWork6.8相关问题 105 30.1 ELF和bin文件的区别? 105 30.2 diab和GNU的区别? 106 31 No such file or directory错误? 107
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值