DAVE SDK 4.1.2 Help content (翻译)——Signals and Connections

信号和连接

在DAVE?的代码引擎和DAVE?
SDK环境中,信号连接有着和电子上的意义不同的意义。对于“信号”这个概念,我们认为它是逻辑上的连接而不是像电平触发,边沿触发中断这样的物理信号。它们不是电气上的连接而是逻辑链接。

设想有三个信号{S1,S2,S3},S1,S2连在S3上,S1,S2可以影响到S3,但不可逆向。我们可以在帮助手册里发现这种信号之间的连接。例如下面的与门,或门。

你也可以发现被字段位影响的信号连接,如下图。

微处理器的不同构成要素用信号连接多路器和寄存器。

为了减少系统复杂度,使开发者高效工作。通过manifest来实现虚拟的信号连接时必要的。

这些信号称之为“虚拟信号”因为我们不可能知道它们准确的通道直到solver给它们分配特定的硬件单元和资源组。

下图可以让你观察到CCU4和NVIC的硬件抽象原理图。在CCU4中有两个工作组(CC4 Slices)。每一个工作组包含三个信号(A,B,C),它们通过一个多路器和多路输出选择器和中断节点连接。为了选择多路器和多路输出选择器的信号,有专门的寄存器。

设想我们想要连接CCU4上的信号A(其实我们不必关心哪一个)到中断节点D。

以前的做法是我们必须要在相应的寄存器上写入合适的数值去控制多路器。当只有一个硬件单元的年代几乎这不是什么问题,但如今的微处理器有着大量的外设和控制寄存器,因此对于一个开发者来说很难去关心所有的关于硬件模块,信号,寄存器等等的复杂连接可能性和同时考虑系统相容性。

因为上面的理由,我们开发了solver。与直接设定对应的资源组(eg.CCU4
slice0)不同,我们只需要选择声明“信号A”连接“信号D”就可以了,solver可以自动选择可被占用的资源。然后我们可以获取solver分配到的选择器的特定寄存器(SRS),把它用在template文件里用于生成代码来合理配置微处理器。

在这个例子中solver选择了CCU
slice0,但在另一种配置中它可能选择slice1
,谁知道呢!

我们限制硬件因为我们用了虚拟信号的概念。

为了向solver传递我们的需求,我们必须在manifest对资源,信号以及限制条件进行声明。

在例子中我们需要两个资源CC4和声明,申明两个虚拟信号A,D。我们可以给它们加连接的约束,亦可以让它们声明但不连接。因此用户可以在它们之间建立另一种连接(另选一个目标硬件,例如VADC)

为了申请资源你可以建立一个MVirtualResourceGroup对象,一个MVirtualSignal
来建立虚拟信号连接(‘M’来自于manifest类)。我们可以用方法
addConnectionConstraint()控制连接约束。

// Manifest code

// Begin : User APP property section

MVirtualResourceGroup
cc4_slice      // CC4 sliceof CCU4

MVirtualResourceGroup
interrupt_node// Interrupt node of NVIC

MVirtualSignal       
A      // Example of source signal (e.g. pmus_omds)

MVirtualSignal       
D      // Example of destination signal (e.g. signal_in)

// End : User APP property section

// APP Constructor

public TEST(DaveEnv
daveEnv)
{

cc4_slice     
= MVirtualResourceGroup("CC4 Slice",["peripheral","ccu4","*","cc4","*"])

interrupt_node=
MVirtualResourceGroup("INTERRUPTNode",
["peripheral","cpu","*","nvic","interrupt","*"])

A=
MVirtualSignal(cc4_slice,
"PMUS ServiceRequest",
"pmus_omds")

D=
MVirtualSignal(interrupt_node,
"ServiceRequest Input",
"signal_in")

addConnectionConstraint(A,
D)

}

在这个简单的声明后,你可以在template文件里获取solver分配的值,再下面的例子中你能看到访问分配值得一种方法,生成的程序是不能编译的。

// Template code

for(def
app
: appInstancesList)

{

out.print("""

CCU4 hardwaremodule == ${app.cc4_slice.getSolverUri()[-3]}           
//In Groovy you can index with a negative number in order to access from the end

CC4 slice ==${app.cc4_slice.getSolverUri()[-1]}

Register bitfieldSRS.POSR == 0x${app.cc4_slice.getRegValue("srs","srs_posr")}

SRS.POSR bitfieldmask ==0x${Integer.toHexString(((Integer)app.cc4_slice.getRegOwnershipMask("srs_posr")))}

NVIC interruptnode == ${app.interrupt_node.getSolverUri()[-1]}

""")

}

在DAVE? 4中加载运行这个APP,可以生成

CCU4 hardware module == 0

CC4slice == 0

Registerbitfield SRS.POSR == 0x2

SRS.POSRbitfield mask == 0x3

NVICinterrupt node == 46

你可以在DAVE?
SDK Device Explorer
发现这些硬件,资源组,寄存器,字段位。你也可以发现solver自动设置的寄存器是红的。



时间: 2024-08-12 05:33:19

DAVE SDK 4.1.2 Help content (翻译)——Signals and Connections的相关文章

DAVE SDK 4.1.2 Help content (翻译)——Sharability

 Sharability DAVE? APPs 根据manifest中的sharability属性能被设置为可被共享或不可共享.Sharable的概念被用在当APP被需要在多个APP需要时. 如果一个APP可被共享: 1.多个APP可申请同一个已被共享的APP. 2.可被共享的APP自动成为non-free MVariables 所以它们的属性不能被"父"APP所更改. 3.可以通过"父"APP的manifest 设置RNOTSHARABLE参数把一个可被共享的

DAVE SDK 4.1.2 Help content —— 如何在父APP中建立多个APP

 如何在父APP中建立多个APP 在这个demo APP中,我们需要2-5个DIGITAL_IO APP 根据微处理器的型号(XMC4500两个XMC1200五个).最简单的方法是写下建立一个APP的语句复制2遍然后用if判断是不是1200来决定是否有接下来的3遍定义. 然而,我们可以用循环,Groovy来使它更为紧凑. 首先,我们以最大可能用的数目来定义"MRequiredApp" 82 83 84 85 86 87 88 // Begin : User APP property

Dave SDK help-content-------Resource Group

 ResourceGroup 从单片机软件的角度,寄存器的位字段是最小的功能单元.HW resource group是一系列能被URI(统一资源标识符)识别的位字段的集合.此外,这个寄存器位字段的实现的功能和组成的硬件功能块,E.g. CCU8中的一片CC8单元包含多个寄存器位字段,它相应的URI是"peripheral/ccu8/*/cc8/*","*"表示"any"单元或者slice.这一命名方法非常有用,它可以包含所有的硬件单元(与FP

发送语音+讯飞翻译 项目案例

数据结构 public LongSparseArray<RecordBean> recordList=new LongSparseArray<>(); 封装所有相关数据的Bean public class RecordBean { public static final String VOICE_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "vo

[翻译]opengl扩展教程1

[翻译]opengl扩展教程1 原文地址https://www.opengl.org/sdk/docs/tutorials/ClockworkCoders/extensions.php [翻译]opengl扩展教程1 简介 检测扩展 使用扩展 GLEW入门 入门简介 初始化GLEW 检测OpenGL版本 检测扩展 平台特定扩展 练习 简介 OpenGL扩展是为了使用3D图形硬件的新功能.硬件厂商定义新的函数到OpenGL来支持新的或增强已有的特性. 由单个厂商创建的扩展是"vendor-spec

基于百度翻译API开发属于自己的翻译工具

你是否每天使用着网页翻译工具?你是否遇到过这种情况,上网过程中遇到一个很长的单词但是又不能复制,要开两个浏览器,一个打开百度翻译,照着另一个网页输入单词?你安装了各种翻译软件后,又删除,只因忍受不了那每次弹出来的广告?其实我们想要的就是简单的翻译一个单词.今天就来使用百度翻译开放API,做一个属于自己的翻译工具,只有简单的翻译功能,至于外观自己根据自己的爱好,想做成什么样就做成什么样,终于可以任性一回了~~ 下面先来看一下词典效果:  一.百度翻译API简介 百度翻译可以通过HTTP访问,返回J

《ArcGIS Runtime SDK for Android开发笔记》

开发笔记之基础教程 ArcGIS Runtime SDK for Android 各版本下载地址 <ArcGIS Runtime SDK for Android开发笔记>——(1).Android Studio下载与安装 <ArcGIS Runtime SDK for Android开发笔记>——(2).Android Studio基本配置与使用 <ArcGIS Runtime SDK for Android开发笔记>——(3).ArcGIS Runtime SDK概述

公众号对接百度翻译API

有时候在公众号中需要对接一些翻译的功能或者其他.最常见的翻译API就是中英互译,程序员用的最多的也就是中译英. 1.到百度翻译官网申请账号 http://api.fanyi.baidu.com/api/trans/product/desktop 登录之后就选择需要开通的服务.到http://api.fanyi.baidu.com/api/trans/product/apichoose 页面可以选择开通的服务.比如我已开通的服务: 开通的时候可以选择版本,对于我个人用户来说开通一个标准版就可以了,

物理引擎Havok教程

物理引擎Havok教程(一) 搭建开发环境 网上关于Havok的教程实在不多,而且Havok学习起来还是有一定难度的,所以这里写了一个系列教程,希望能够帮到读者.这是第一期. 一.Havok物理引擎简介       Havok引擎,全称为Havok游戏动力开发工具包(Havok Game Dynamics SDK),一般称为Havok,是一个用于物理系统方面的游戏引擎,为电子游戏所设计,注重在游戏中对于真实世界的模拟.使用碰撞功能的Havok引擎可以让更多真实世界的情况以最大的拟真度反映在游戏中