Nucleus PLUS应用系统示例

2024-02-11 22:58

本文主要是介绍Nucleus PLUS应用系统示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这个Nucleus PLUS系统应用示例包括application_initialization和六个任务,任务在application_initialization中创建。这个示例系统体现了Nucleus PLUS的任务调度和执行过程、任务间通信和同步(信号量、事件组)。

Application_Initialize位于29-70行。示例系统的所有系统对象(任务、队列、信号量、事件组)都在该函数中创建。在板级初始化程序(INT_ Initialize)结束后,系统开始调用操作系统初始化程序(INC_Initialize),这时需要设置可供用户使用的存储器首地址first_available_memory。本文的示例系统中first_available_memory指向一个20000 bytes的内存池,用来分配任务堆栈和队列所用的内存空间,由NU_Create_Memory_Pool创建。Nucleus PLUS的启动过程见:Nucleus PLUS的启动、运行线程和中断处理。

任务定义和任务优先级:

所有的任务的基本架构都是--完成一些基本的初始化后开始执行一个无限循环,这个无限循环会等待和处理一些信号、事件或消息,没有任何一个发生时则会挂起。

Application_Initialize创建所有的任务后,INC_Initialize会调用TCT_schedule开始调度。TCT_schedule会按照任务优先级顺序调度所有的任务去完成各个任务基本的初始化,然后进入就绪或挂起状态。最后TCT_schedule会将控制权交给优先级最高的任务,本示例系统中任务0将是第一个执行的任务。

Nucleus PLUS的任务优先级从0-255,其中0优先级最高。高优先级的任务能够抢占低优先级的任务,同等优先级的任务按照创建和进入就绪状态的顺序调度执行。

示例系统中的六个任务中task0优先级最高,为优先级1,所以系统开始运行时第一个被执行。任务3、4的优先级是5。任务0挂起后,任务3会运行,任务3挂起则任务4开始运行。之所以任务3先于任务4运行是因为任务3先被创建和调度。Nucleus plus的调度算法是时间片和robin算法,同一优先级的任务按照其进入就绪状态的顺序进行。任务5的优先级是7,任务4挂起后运行。任务1和2的优先级是10,任务5挂起后运行任务1,任务1因为队列满而挂起时任务2运行。

任务0(行71-91):任务0的死循环里会连续的调用函数NU_Sleep和NU_Set_Events。由于NU_Sleep的调用,任务0每18个时钟节拍才能够运行1次。NU_Set_Events设定的event flag在任务5中使用,每一次NU_Set_Events的调用都会使任务5进入就绪状态

任务1(行92-119):任务1会持续的向队列0发送单个32-bit的message,知道队列0满就会挂起。队列有空间时就被唤醒。由于任务1、2具有相同的优先级,任务1先被创建,所以任务1挂起后任务2才能恢复执行。恢复执行指的是进入就绪状态等待CPU调度,当然高优先级的任务会抢占CPU,迫使低优先级的任务挂起。

这篇关于Nucleus PLUS应用系统示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/701026

相关文章

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

CSS will-change 属性示例详解

《CSSwill-change属性示例详解》will-change是一个CSS属性,用于告诉浏览器某个元素在未来可能会发生哪些变化,本文给大家介绍CSSwill-change属性详解,感... will-change 是一个 css 属性,用于告诉浏览器某个元素在未来可能会发生哪些变化。这可以帮助浏览器优化

C++中std::distance使用方法示例

《C++中std::distance使用方法示例》std::distance是C++标准库中的一个函数,用于计算两个迭代器之间的距离,本文主要介绍了C++中std::distance使用方法示例,具... 目录语法使用方式解释示例输出:其他说明:总结std::distance&n编程bsp;是 C++ 标准

前端高级CSS用法示例详解

《前端高级CSS用法示例详解》在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一,随着前端技术的不断发展,CSS的用法也日益丰富和高级,本文将深... 前端高级css用法在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1