`
猫耳呀
  • 浏览: 172644 次
社区版块
存档分类
最新评论

AliOS Things SMP系统及其在esp32上实现示例

 
阅读更多

摘要: AliOS Things实现了基本的SMP调度框架,支持多CPU体系的系统运行和调度机制。任务可以动态在多核间进行切换或者绑定运行;高优先级任务可以最大化利用空闲资源核运行。基于此框架,可以快速实现AliOS Things在各种不同多核CPU架构下的移植。

AliOS Things实现了基本的SMP调度框架,支持多CPU体系的系统运行和调度机制。多CPU之间对用户系统运行无区别,能平等访问共享内存、外设等共享资源;任务可以动态在多核间进行切换或者绑定运行;高优先级任务可以最大化利用空闲资源核运行。


基于此框架,可以快速实现AliOS Things在各种不同多核CPU架构下的移植;对于上层应用,可以不需要关注任务的运行核以及底层实现,也可以指定某任务在特定核运行。此实现框架,最大化地提高SMP功能在不同CPU上的移植效率,并保证上层应用使用SMP系统的简洁性。
 

1、 AliOS Things SMP基础特性


特性1:多CPU公平的任务切换机制,平等访问共享资源
特性2:高优先级任务合理利用空闲CPU资源
特性3:支持任务绑定核运行
特性4:支持不同CPU下快速移植
特性5:兼容单核接口并提供SMP内核扩展接口

2、 AliOS Things SMP特性移植框架


使用AliOS Things的SMP框架,可以快速在不同CPU体系下移植,以快速实现SMP功能。以下列出移植需要实现项,即可完成对应CPU的SMP功能:
2.1 核启动加载
目前的启动顺序是,系统默认开始启动0核,在0核的主任务入口内启动其他核的加载,使其都进入任务调度,并完成多核启动阶段的同步工作:核进入idle任务作为核启动完成的标志。
2.2 核间中断
主要作用:触发其他核进行调度。在任务加入ready任务队列或者任务超时到期后,如果此任务绑定到其他核,或者比其他核正在执行的任务优先级高,则会触发对应核进行任务切换。
2.3 核间锁
由于多核之间的同步互斥问题,需要实现核间锁功能,用于访问共享资源,如任务队列、内存等资源时,核内的资源互斥采用开关中断来实现。目前任务相关的资源调度和内存管理分别采用两把核间锁,该锁的实现必须支持核内的可重入性,而能达到核间互斥的目的。
以上功能需要在不同CPU/MCU架构下进行移植实现,即可完成SMP需要的底层接口支持。OS已经提供了标准的实现接口,参考下面esp32的SMP移植示例。

3、 Esp32上支持SMP移植示例


目前AliOS Things在esp32上完成了SMP的实现,后续将继续支持其他多核CPU比如cortex-A9等系列的多核CPU。参考下面的移植描述点进行移植:
3.1 SMP编译宏
对于某多核CPU,OS通过单版本不同编译宏来同时支持单核和多核的框架。在Makefile中指定-DRHINO_CONFIG_CPU_NUM=X(核数目),或者修改k_config.h内RHINO_CONFIG_CPU_NUM宏来指定核数目。推荐第一种方式。
3.2 多核加载接口
按照2.1章节描述,系统的启动顺序为默认先启动0核,在0核主任务内启动其他从核并实现同步。
需要实现加载其他核接口:void os_load_slavecpu(void);
内部实现需要完成剩余核的复位启动、必要硬件的初始化,并在从属核初始化完后,同样进入cpu_first_task_start开始进入调度;此阶段,0核需要执行os_wait_allcore接口来等待所有核的启动完成,以所有核都能进入idle任务为启动完成标志。os_wait_allcore为通用实现接口,cpu_first_task_start同单核实现。
3.3 核间中断接口
此部分需要完成三个接口的适配:
3.3.1初始化:void os_crosscore_int_init();
完成核间中断的硬件初始化,此接口需要在多核初始化时调用。
3.3.2触发接口:void cpu_signal(uint8_t cpu_num)
触发目标核对应的中断,需要完成内部实现。
3.3.3 核间中断处理:void os_crosscore_isr(void *arg)
接口内部需要调用krhino_intrpt_exit接口,其通过cpu_intrpt_switch来实现当前核的任务调度;如果需要清中断源,则清中断源。
3.4核间锁接口
此部分需要完成三个必要接口的适配,:
3.4.1 初始化:void cpu_spin_lock_init(kspinlock_t *lock);
对锁结构体赋初值;用户可以按照自身需求实现,也可参考esp32实现代码。
3.4.2 加解锁:基本原则是支持核内嵌套,核间互斥
void cpu_spin_lock(kspinlock_t *lock);
int32_t cpu_spin_unlock(kspinlock_t *lock);
锁实现可以参考在esp32上对应实现。

3.5 SMP目录结构
参考esp32,在platform/mcu/esp32下新建smp目录。smp_port.h列出上述描述的需要移植的接口,smp_load.c为核加载实现,smp_int.c为核间中断实现,smp_sync.c为核间同步接口实现。

将上述接口对接后,对应文件加入编译体系内,即可完成SMP移植适配。
3.6 其他注意事项
在实现任务和中断切换汇编portXX.S时,需要考虑到兼容单核和多核,主要是对于g_current_task等多核数组的访问,可以参考esp32中portasm.S实现。

4、SMP相关内核接口
多核SMP机制下,kernel兼容所有单核的对外接口,并提供必要的SMP扩展接口供用户使用。

上述接口将任务和核绑定,使其固定在某核运行。如果使用非绑定接口,则任务运行的核是随机的。

5、esp32上SMP运行示例
下图为Alios Things在esp32上实现SMP的任务状态图:


Cpu_binded列表示任务是否绑定核,cpu_num表示任务当前运行核,cur_exc表示当前任务运行状态。
Smp特性移植完成后,同样需要通过内核用例的测试认证。kernel测试认证请参考:https://github.com/alibaba/AliOS-Things/wiki/Manual-API

原文链接

分享到:
评论

相关推荐

    AliOS-Things实现图片显示及文字跳动显示

    在这个特定的场景中,“AliOS-Things实现图片显示及文字跳动显示”意味着它支持在设备的用户界面上进行图像和动态文字的展示。这通常涉及到图形库的使用,以及对硬件GPU或显示屏驱动的支持。 在AliOS Things中,...

    AliOS Things Developer Kit开发板v1.2原理图

    这是AliOS Things Developer Kit开发板v1.2原理图 注意:这个原理图使v1.2版本的,官方一共出了两个版本,v1.2和v1.3,1.3的版本没有流出原理图,因为这个板卡官方早就停止维护了。1.3版本的板卡,j801接口,v1.2原理...

    AliOS Things Starter Kit技术文档资料.zip

    基本操作说明-》AliOS Things Starter Kit用户操作指导_V1.0-20180606 简介-》AliOS Things Starter Kit Brief.pdf 生产软件bin文件-》Starter Kit-20180606.bin 应用指导说明-》AliOS Things Starter Kit ...

    AliOS-Things2.1.0-helloworld.zip

    本项目“AliOS-Things2.1.0-helloworld.zip”是基于该操作系统的一个示例工程,用于帮助初学者理解如何在MDK(Keil uVision)开发环境中集成并运行AliOS Things。下面我们将深入探讨这个项目中的关键知识点。 首先...

    1_3_AliOS Things操作系统简介.pdf

    在智能生活领域,AliOS Things让家庭、办公室等环境中的设备智能化,实现了人与设备、设备与设备间的智慧互动。在智慧工农业方面,AliOS Things让传统家电及机器视觉感知节点得到智能化升级,工农业的数据采集和处理...

    ESP32连接阿里云MQTT物联网平台的Arduino支持库及示例代码。

    ESP32连接阿里云MQTT物联网平台的Arduino支持库及示例代码。包括PubSubClient.h;SHA256.h;ArduinoJson.h及Arduino演示代码.ino文件,资源全面,不用到处东拼西凑。代码经过本人修改,亲测可用,比官网的那个库好理解...

    3_3_AliOS Things系统架构.pdf

    系统提供兼容 Unix/Linux 的 API 支持,使得应用能够轻松移植到 AliOS Things 上,并降低 Flash 和 RAM 需求,缩短启动时间。同时,这些 API 已经通过国际标准组织定义,具有良好的文档支持和高度的易用性。 ### 端...

    AliOS Things物联网操作系统,采用弹性内核,支持Python和JavaScript轻应用

    AliOS Things物联网操作系统,采用弹性内核,支持Python和JavaScript轻应用,主打“易上手”。AliOS Things 支持多种CPU架构,包括:ARM,C-Sky,MIPS,RISCV等。AliOS Things 适配了分层架构和组件架构。所有的模块...

    AliOS Things集成开发环境介绍.pptx

    AliOS Things集成开发环境介绍.pptx

    3_1_AliOS Things源码结构及编译系统.pdf

    在AliOS Things的课程中,构建系统涉及到对系统源码的管理,确保正确的文件被编译成需要的格式,并且管理各种编译选项和依赖关系,确保整个系统能够有效构建。 最后,课程还提到了如何在AliOS Things中添加新的组件...

    Alios Things Developer Kit 开发板usb串口示例代码

    代码基于stm32cubemx核心stm32L496。 Alios Things Developer Kit 开发板测试通过。

    3_2_AliOS Things命令行.pdf

    在物联网应用开发领域...通过本课程的学习,开发者可以掌握如何在AliOS Things平台上通过CLI进行系统管理,以及如何通过添加自定义命令来扩展系统的功能。这对于开发和维护基于AliOS Things的物联网产品具有重要意义。

    AliOS Things 快速开发指南1

    AliOS Things 是一个由阿里云推出的物联网操作系统,旨在为 IoT(物联网)领域提供高可伸缩性的解决方案。该系统首次发布于2017年杭州云栖大会,作为 AliOS 家族的一员,其主要目标是建立云端一体化的基础设施。...

    基于esp32与alios things配网连接阿里云物联网平台

    本菜鸡在这里卡了好久,参考之前网上的教程,但是由于之前一些操作失误,导致前面可能成功烧录了四元组和wifi信息,但是却没有配网成功。这就导致你后面操作正确过后,即使修改了四元组,然后重新烧录仍然无法更新...

    4_1_AliOS Things网络篇之netmgr.pdf

    标题《4_1_AliOS Things网络篇之netmgr.pdf》和描述《HaaS物联网应用开发课程》揭示了文档的主要内容是关于AliOS Things操作系统中的Netmgr网络管理模块的详细介绍。Netmgr是AliOS Things操作系统里,提供Wi-Fi网络...

    necleo-f401re板子跑AIios-things系统实现点亮LD2

    【描述】"necleo-f401re板子跑AIios-things系统实现点亮LD2"是一个实践项目,它展示了如何在Nucleo-F401RE开发板上运行ALiOS Things,这是一种专为物联网设备设计的轻量级操作系统。项目的主要目标是控制板载的LED灯...

    3_4_AliOS Things基础AOS API及HAL API介绍.pdf

    AliOS Things 是阿里云官方推出的物联网嵌入式操作系统,旨在为开发者提供丰富的应用编程接口(API),实现设备端软件快速开发。本文档将从AliOS Things的基础出发,介绍其高级操作系统(AOS)API及硬件抽象层(HAL...

    4_2_AliOS Things网络篇之lwIP.pdf

    综上所述,lwIP作为AliOS Things操作系统中的一个重要组件,不仅为物联网设备提供了轻量级、高效的网络连接能力,而且其丰富的API接口和协议支持,使其在开发物联网应用时成为了一个非常实用的工具。开发者可以通过...

Global site tag (gtag.js) - Google Analytics