热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NucleusPLUS的启动、执行线程和中断处理

nucleus系统是实时嵌入式操作系统,具有实时、任务抢先、多任务内核,当中95%的代码由C语言写成,极易移植。开放的源代码使得配置和裁剪

nucleus系统是实时嵌入式操作系统,具有实时、任务抢先、多任务内核,当中95%的代码由C语言写成,极易移植。开放的源代码使得配置和裁剪方便,再加上体积小(所有二进制映像可仅20K)、响应高速等特性,使得Nucleus PLUS得到广泛应用。另外,所谓的实时指的是对外部或者内部的事件在正确的时间内必须得到正确的响应,而不只指的是“马上可以响应”。

(一)Nucleus PLUS启动流程

INT.[S, ASM或SRC]是与详细的处理器架构相关程序,提供最低层次的初始化和訪问处理器中断向量表的服务。如ARM架构中将INT_Initialize置于INT_Reset中断向量中引导系统启动。

INT_Initialize 子程序在Nucleus PLUS 系统中是最先执行的,负责全部与目标硬件板相关的初始化。即使具有同样的处理器的硬件板之间的INT_Initialize 子程序依旧是不一样的,由于不同的硬件板具有不同的外围总线和时钟中断等。INT_Initialize 完毕后将控制权转移到高级Nucleus PLUS 初始化子程序INC_Initialize上并不再返回。INC_Initialize调用全部的Nucleus plus组件初始化函数、调用Application_Initialize创建用户任务等对象,最后将控制权交给调度函数TCT_schedule,系统启动完毕。

嵌入式实时操作系统内核Nucleus PLUS的启动过程如图1所看到的。当中

1,板级初始化INT_INITIALIZE() 

在设置中,当系统reset后跳至运行地址0x0000 0000处開始运行,因此将函数INT_INITIALIZE()入口置于该地址(INT_Reset_Addr DCD  INT_Initialize)引导系统的运行。该函数一般在INT.S或者是INT_PID.S中。

INT_Initialize须要依据详细的硬件环境做出改动,其主要运行功能:

1)将编译出来的已经初始化的数据从ROM中拷贝到RAM中,同一时候在RAM中建立ZI数据段,未初始化的数据;

2)初始化异常中断向量表。

3)设置处理器各执行模式的数据堆栈。计算出可用的存储器的首地址(first_available_memory);

4)时钟中断和一些硬件中断的设置;

5)将控制权转移到INC_INITIALIZE;

2,操作系统初始化(INC_Initialize(first_available_memory))

主要是完毕邮箱、队列、管道、信号量、事件集等Nucleus PLUS软件组件的初始化;

3,应用程序初始化(Application_Initialize (first_available_memory))

主要是完毕用户定义的应用程序初始化,如创建内存池,创建任务、创建信号量、创建中断、编写用户应用程序等。

用户任务可事先定义好存于一个表中,Application_Initialize 依据该表创建全部的任务。

4。任务调度TCT_schedule

会依照任务优先级顺序调度全部的任务去完毕各个任务主要的初始化,然后进入就绪或挂起状态。最后TCT_schedule会将控制权交给优先级最高的任务,系统任务開始执行。

 


图1 Nucleus PLUS 初始化流程

(二)Nucleus PLUS执行线程

一个Nucleus PLUS 系统组件或者应用程序总是八个可能执行线程中的一个。他们是:

1) 初始化(Initialization)线程

初始化线程是系统执行的第一个线程。

初始化线程的起始是为INT_Initialize,在Application_Initialize 函数返回后中止。控制权转移至调度循环(Scheduling Loop)线程。

2) 系统错误(Ssytem Error)线程

这个线程在函数ERC_System 被调用时执行。系统启动、执行过程中有可能发生系统错误,它们中大多数在初始化期间被跟踪,堆栈溢出则在任务和HISR 执行过程中产生。默认情况。系统错误是致命的,因此该线程会暂停系统执行,具体的系统错误代码见Nucleus PLUS Reference。

3) 调度循环(Scheduling Loop)线程

调度循环线程的入口是TCT_Schedule。这个线程将CPU控制权转移给最高优先级的HISR 或

就绪状态的任务。

当没有任务或HISRs 就绪时,就是TCT_Schedule 无限的循环。project中为了省电,通常会创建一个优先级最低的Idle任务。当没有其它不论什么任务或者HISR要运行时。idle任务就会被调度使得系统进入睡眠状态。

4) 任务(Task)线程

每一个任务有它自己的堆栈核控制结构。其入口在任务创建时指定。任务线程对訪问Nucleus PLUS 服务没有不论什么限制。

5) 信号处理(Signal Handler)线程

信号处理线程执行在相关任务线程的顶端。

信号处理器线程对Nucleus PLUS 服务訪问有限制,主要限制就是信号处理线程不同意自挂起。

6) 用户中断处理子程序(User ISR)线程

此线程负责保存和恢复全部使用的寄存器。用户中断服务子程序线程是典型的少量汇编语言子程序,入口可直接挂在中断向量上。对此类型线程,Nucleus PLUS 服务全然不受限。

7) LISR线程

低级中断服务子程序同意Nucleus PLUS 在中断处理中保存和恢复全部有须要的寄存器。

LISR 线程最重要的任务就是active_HISR 服务。其对Nulceus PLUS 服务訪问受限。比如,假设某中断的处理须要切换任务就仅仅能去激活HISR并在HISR中实现。下列服务从 LISRs 訪问有效:

NU_Activate_HISR

NU_Local_Control_Interrupts

NU_Current_HISR_Pointer

NU_Current_Task_Pointer

NU_License_Information

NU_Retrieve_Clock

8) HISR线程

高级中断服务子程序是Nucleus PLUS 中断处理的第二部分。HISR 线程像任务线程一样被调度,能够訪问大多数Nucleus PLUS 服务,不同意自挂起请求。

HISR 线程程序入口点在HISR 创建期间确定。

(三)Nucleus中断处理

Nucleus PLUS 既支持可控(managed)也支持不可控(unmanaged)ISRs。

可控的ISR 就是用户不须要存储和释放上下文信息,不可控ISRs 指的是用户要对保存和恢复全部使用寄存器负全责。可控ISRs 能够用C 或汇编编写,不可控ISRs 一般都用汇编。

对中断可以高速响应是RTOS系统的基础,Nucleus PLUS通过将ISR分成低级和高级两个部分来保证系统对中断的高速响应的同一时候保护系统服务的数据结构不受破坏。所以Nucleus PLUS的中断处理类似于Linux的两个半部中断处理机制。

低级中断处理执行在LISR线程,可由C语言编写或者被其它C函数调用。Nucleus PLUS调用/退出LISR之前会保存/恢复上下文。LISR支持中断嵌套。任务就是高速响应中断,然后激活HISR服务。

HISR完毕中断的大部分处理任务。必须预先创建,其优先级分为3级,支持抢占。每一个HISR都有独立的堆栈和控制块。




推荐阅读
  • 利用ZFS和Gluster实现分布式存储系统的高效迁移与应用
    本文探讨了在Ubuntu 18.04系统中利用ZFS和Gluster文件系统实现分布式存储系统的高效迁移与应用。通过详细的技术分析和实践案例,展示了这两种文件系统在数据迁移、高可用性和性能优化方面的优势,为分布式存储系统的部署和管理提供了宝贵的参考。 ... [详细]
  • 线程能否先以安全方式获取对象,再进行非安全发布? ... [详细]
  • 性能测试中的关键监控指标与深入分析
    在软件性能测试中,关键监控指标的选取至关重要。主要目的包括:1. 评估系统的当前性能,确保其符合预期的性能标准;2. 发现软件性能瓶颈,定位潜在问题;3. 优化系统性能,提高用户体验。通过综合分析这些指标,可以全面了解系统的运行状态,为后续的性能改进提供科学依据。 ... [详细]
  • 本文探讨了如何通过编程手段在Linux系统中禁用硬件预取功能。基于Intel® Core™微架构的应用性能优化需求,文章详细介绍了相关配置方法和代码实现,旨在帮助开发人员有效控制硬件预取行为,提升应用程序的运行效率。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • Python多线程编程技巧与实战应用详解 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • 深入解析CAS机制:全面替代传统锁的底层原理与应用
    本文深入探讨了CAS(Compare-and-Swap)机制,分析了其作为传统锁的替代方案在并发控制中的优势与原理。CAS通过原子操作确保数据的一致性,避免了传统锁带来的性能瓶颈和死锁问题。文章详细解析了CAS的工作机制,并结合实际应用场景,展示了其在高并发环境下的高效性和可靠性。 ... [详细]
  • Parallels Desktop for Mac 是一款功能强大的虚拟化软件,能够在不重启的情况下实现在同一台电脑上无缝切换和使用 Windows 和 macOS 系统中的各种应用程序。该软件不仅提供了高效稳定的性能,还支持多种高级功能,如拖放文件、共享剪贴板等,极大地提升了用户的生产力和使用体验。 ... [详细]
  • 如何撰写适应变化的高效代码:策略与实践
    编写高质量且适应变化的代码是每位程序员的追求。优质代码的关键在于其可维护性和可扩展性。本文将从面向对象编程的角度出发,探讨实现这一目标的具体策略与实践方法,帮助开发者提升代码效率和灵活性。 ... [详细]
  • 本文详细介绍了批处理技术的基本概念及其在实际应用中的重要性。首先,对简单的批处理内部命令进行了概述,重点讲解了Echo命令的功能,包括如何打开或关闭回显功能以及显示消息。如果没有指定任何参数,Echo命令会显示当前的回显设置。此外,文章还探讨了批处理技术在自动化任务执行、系统管理等领域的广泛应用,为读者提供了丰富的实践案例和技术指导。 ... [详细]
  • 【系统架构师精讲】(16):操作系统核心概念——寄存器、内存与缓存机制详解
    在计算机系统架构中,中央处理器(CPU)内部集成了多种高速存储组件,用于临时存储指令、数据和地址。这些组件包括指令寄存器(IR)、程序计数器(PC)和累加器(ACC)。寄存器作为集成电路中的关键存储单元,由触发器构成,具备极高的读写速度,使得数据传输非常迅速。根据功能不同,寄存器可分为基本寄存器和移位寄存器,各自在数据处理中发挥重要作用。此外,寄存器与内存和缓存机制的协同工作,确保了系统的高效运行。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 本文详细介绍了在 Android 7.1 系统中调整屏幕分辨率和默认音量设置的方法。针对系统默认音量过大的问题,提供了具体的步骤来降低系统、铃声、媒体和闹钟的默认音量,以提升用户体验。此外,还涵盖了如何通过系统设置或使用第三方工具来优化屏幕分辨率,确保设备显示效果更加清晰和流畅。 ... [详细]
author-avatar
od扒着井沿的牛蛙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有