首页 > 应用与设计 > 中国新基建  > TI机器人系统学习套件(TI-RSLK) >

人工智能

最新课程

热门课程

TI-RSLK 模块 10 - 讲座视频 - 调试实时系统 - 理论

大家好,我是 在本章中, 在讨论调试和中断。 在前两个视频中, 调试的 和中断的 在本视频中,让我们讨论 中断的具体示例。 SysTick 硬件触发的 可导致每隔固定 这里的中断服务 我们的需要。 因此,事实证明这是 我们可以在许多 在这些应用中,我们 某些软件事件。 我们将在实验中 我们将能够 ,并弥补 等待传感器激活 然后,当我们 我们要把它用于 在实验 因此,我们将 该周期性中断。 那么,让我们开始吧。 那么一般而言, 硬件触发的 我们要在这里 是定期从传感器 好的,那么我们 在实验 正如我说过的,当我们 我们将使用 然后,当我们 我们将以周期性的 以便周期性地 我们上次提到的 我获得的传感器数据,我必须 我不能把它留在 我必须把它 因此我要创建 某个永久性 它可以是公共、全局性的, 也可以是静态的 在该文件的函数内共享。 无论是哪种方法, 现在,我们可以进入 进入标志中的变量。 正如我上次提到的, 我们实际上可以 先入先出环队列中。 当我们到实验 那么让我们回顾一下 时间的章节。 SysTick 24 因此它会递减 我们具有一个 进行写入。 那么,尤其是,如果 n 那么它将对 一直到 正是这种 将触发中断。 一旦 那么,如果 这是一个模块 它连接到总线时钟。 因此,如果我们 那么该时钟将 或确切地说每 让我们更深入地 它的寄存器。 再说一次,我们上次看到过这个。 它仅有三个寄存器, 寄存器,以及一个值寄存器。 这是计数器本身。 为了使它发生, 时钟源作为 我们将启用它,以便 在先前的使用中,我们 但现在我们将使用中断。 因此我要使它为 正如我先前 标志是该 该计数标志 因此随着它 它将重新 我将 但这里的转换, 将设置计数标志。 由于我们已经 因此如果我们 那么这些是导致 首先我们必须 我们必须 我们必须 对于生成 这些是三个必要条件, 初始化 也就是说,如果我 中断一次,周期的 我要将周期减 例如,如果我希望 那么总共是 这是转换。 48,000 因此,这里的值 那么,该中断 触发一次。 7 我们曾在先前的 我们有多个中断, 在该 这是一个 顶部的 中断的优先级。 那么这是我们的例程。 这是我们的初始化。 它会执行一次。 在我们的主程序中, 都进行 我们将启用中断。 然后,第一个 它将不停地 因为计数器 计数。 那么,这是初始化。 中断服务例程 再说一次,我们曾在上一张 一个函数,并且我使用 例如 中断的中断 现在,我要 请注意,这不是 但这是一项一般任务。 这是该项任务 您应该记得计数 它使用某个值进行了设置, 标志进行了设置。 运行该中断 清除上一个 好的,现在我们 看到了作为一种性能评测 再说一次,它的功能和它的 在该例程中,我要 三次切换。 在前一个视频中, 那么我要获取 我要删掉 我将把它乘以 这样我会得到这个数字。 我要在其中添加的 因此,我要 然后我会得到一个特定的寄存器, 端口 那么,如果我向端口 但该三次切换技术的 如果我放大逻辑 那么我可以看到三次 一、二、三,等等, 运行我的 所花费的时间。 再说一次,这具有 因为如果我要 该中断,那么执行这些代码行 一微秒。 因此,调试检测 与调试检测之间的 再说一次,一微秒 因此,它具有极低的侵入性。 这意味着调试 不会修改 但是,如果我缩小, 如果我缩小,我就不再 示波器规模上分别 现在,我只能 那么,该三次 看起来像是一次切换。 因此,我将能够 中断之间的时间。 这样,利用单个 通过缩小测量 并且能够通过 时间。 这就是该调试 但再说一次, 我需要做的 然后它就会运行。 到目前为止,我在这次课中 现在,是时候 关键部分的 那么,您需要 如果您曾共享过 这个永久性 因为您应该记得 如果它们曾共享 这可能是全局性的, 例如在本例中 您可以看到这是端口 这是端口 我有两个不同的线程。 我要共享它。 如果它们中的任何一个是写入 我允许您开始 因为在微观级别, 发生了某种情况, 糟糕,是灾难性的。 那么,让我们来说明一下 那么,我将再次获取我的 现在,看起来这个 那个会设置为 那么这个会影响 您可能会说,嘿,John, 这个仅会更改 但不是这样的, 它们生成的线程 那么,让我们放大 它们由任何 生成以尝试实现 正如我们在先前的 要访问全局变量, 一个指向 因此,R2 指向端口 接下来,它将 寄存器中。 那么,该端口的值 现在,某个 思考一下刚才发生了什么。 在这里,我有一个 都位于该端口中。 但现在我有一个寄存器, 它具有该端口的值。 我在两个不同的位置 那么,我要问您, 情况变得更糟了。 让我们看看该点。 现在,我在这里具有 就在这里。 我在该寄存器中具有 这两个值是不同的。 您看到了吗? 这个值现在设置了位 那么,这时,我有 这两个值 我有存在于 信息的副本。 它们不一定 让我们在这里 让我们执行 那么我得到了值。 让我们挑选一个 让我挑选一个数字。 那么我要挑选 只是为了说明 我要挑选一个 那么,让我们假设 0、0、0、0。 好的,这很好。 这只是初始的状态。 它包含一些零, 1,2,3,4,5,6,7,8。 端口 让我们重点看看 这是我们在时间 具有的内容。 那么,在这里, 端口中 但幸运的是 在这两条指令之间, 接下来让我们 现在,这个 我刚才设置了位 它具有值 我是说,它具有值 或运算。 但我们获得了中断。 该线程 那么,要执行的 那么,现在我 再说一次,您还记得吗, 寄存器入栈, 一些新的 那么,该寄存器 那么,当我读取 我将得到 这一次,我将设置这个位。 那么,它将变为 然后,我将 现在,在这里写入了该 好的,那么这是时间 然后,我 请记住,连接 那么,它会 那么,最终,它会 这是第 但您应该记得,它所做的是, 弹出。 因此 因为我把它留在了这里。 那么,当我这么做时, 这是第 那么,现在,如果 我已经执行了 我最终 我应该最终 但我最终使一个 这是因为该共享 是一个关键部分,它具有 换句话说, 读取、修改、写入。 这是一件糟糕的事情。 因此,我们要 我们可以使这个成为端口 这样就可以 我们已经看到过 我们可通过它 我们可以 中断赋予相同的 就无法相互中断。 这样就可以解决该问题。 或者,我们可以针对 再重新启用中断。 这会导致 一旦我开始 它就会不可分割地 它会以原子方式运行。 换句话说, 那么,这些就是我可以 三种方法。 但请记住,如果您有 如果您有多线程, 共享某个永久性的 而某人采取了正确的 当一个东西使另一个 发生什么怪异的事情。 然后,使用这 来解决 好,那么我们 我们讨论了 它作为我们的第一个中断, 几行初始化代码, 中断处理例程。 然后,我们再次 它是一种用于查看 时间和中断之间的 我为您带来了有关 关键部分是当您具有 非原子意味着它可以拆分。 中断已启用。 该事件序列 非原子序列, 变量的读取、修改、写入 这种序列 还有其他序列,如写入、 但这种序列可能 然后,我们讨论了三种 方法的思想是通过使它们 我们可以通过 我们可以通过更改 我们可以通过禁用中断 优先级来实现原子性。 好吧,祝您本次实验愉快。 本次实验 但是,我认为一旦您完成它, 好的,祝您愉快。

大家好,我是

在本章中,

在讨论调试和中断。

在前两个视频中,

调试的

和中断的

在本视频中,让我们讨论

中断的具体示例。

SysTick

硬件触发的

可导致每隔固定

这里的中断服务

我们的需要。

因此,事实证明这是

我们可以在许多

在这些应用中,我们

某些软件事件。

我们将在实验中

我们将能够

,并弥补

等待传感器激活

然后,当我们

我们要把它用于

在实验

因此,我们将

该周期性中断。

那么,让我们开始吧。

那么一般而言,

硬件触发的

我们要在这里

是定期从传感器

好的,那么我们

在实验

正如我说过的,当我们

我们将使用

然后,当我们

我们将以周期性的

以便周期性地

我们上次提到的

我获得的传感器数据,我必须

我不能把它留在

我必须把它

因此我要创建

某个永久性

它可以是公共、全局性的,

也可以是静态的

在该文件的函数内共享。

无论是哪种方法,

现在,我们可以进入

进入标志中的变量。

正如我上次提到的,

我们实际上可以

先入先出环队列中。

当我们到实验

那么让我们回顾一下

时间的章节。

SysTick

24

因此它会递减

我们具有一个

进行写入。

那么,尤其是,如果

n

那么它将对

一直到

正是这种

将触发中断。

一旦

那么,如果

这是一个模块

它连接到总线时钟。

因此,如果我们

那么该时钟将

或确切地说每

让我们更深入地

它的寄存器。

再说一次,我们上次看到过这个。

它仅有三个寄存器,

寄存器,以及一个值寄存器。

这是计数器本身。

为了使它发生,

时钟源作为

我们将启用它,以便

在先前的使用中,我们

但现在我们将使用中断。

因此我要使它为

正如我先前

标志是该

该计数标志

因此随着它

它将重新

我将

但这里的转换,

将设置计数标志。

由于我们已经

因此如果我们

那么这些是导致

首先我们必须

我们必须

我们必须

对于生成

这些是三个必要条件,

初始化

也就是说,如果我

中断一次,周期的

我要将周期减

例如,如果我希望

那么总共是

这是转换。

48,000

因此,这里的值

那么,该中断

触发一次。

7

我们曾在先前的

我们有多个中断,

在该

这是一个

顶部的

中断的优先级。

那么这是我们的例程。

这是我们的初始化。

它会执行一次。

在我们的主程序中,

都进行

我们将启用中断。

然后,第一个

它将不停地

因为计数器

计数。

那么,这是初始化。

中断服务例程

再说一次,我们曾在上一张

一个函数,并且我使用

例如

中断的中断

现在,我要

请注意,这不是

但这是一项一般任务。

这是该项任务

您应该记得计数

它使用某个值进行了设置,

标志进行了设置。

运行该中断

清除上一个

好的,现在我们

看到了作为一种性能评测

再说一次,它的功能和它的

在该例程中,我要

三次切换。

在前一个视频中,

那么我要获取

我要删掉

我将把它乘以

这样我会得到这个数字。

我要在其中添加的

因此,我要

然后我会得到一个特定的寄存器,

端口

那么,如果我向端口

但该三次切换技术的

如果我放大逻辑

那么我可以看到三次

一、二、三,等等,

运行我的

所花费的时间。

再说一次,这具有

因为如果我要

该中断,那么执行这些代码行

一微秒。

因此,调试检测

与调试检测之间的

再说一次,一微秒

因此,它具有极低的侵入性。

这意味着调试

不会修改

但是,如果我缩小,

如果我缩小,我就不再

示波器规模上分别

现在,我只能

那么,该三次

看起来像是一次切换。

因此,我将能够

中断之间的时间。

这样,利用单个

通过缩小测量

并且能够通过

时间。

这就是该调试

但再说一次,

我需要做的

然后它就会运行。

到目前为止,我在这次课中

现在,是时候

关键部分的

那么,您需要

如果您曾共享过

这个永久性

因为您应该记得

如果它们曾共享

这可能是全局性的,

例如在本例中

您可以看到这是端口

这是端口

我有两个不同的线程。

我要共享它。

如果它们中的任何一个是写入

我允许您开始

因为在微观级别,

发生了某种情况,

糟糕,是灾难性的。

那么,让我们来说明一下

那么,我将再次获取我的

现在,看起来这个

那个会设置为

那么这个会影响

您可能会说,嘿,John,

这个仅会更改

但不是这样的,

它们生成的线程

那么,让我们放大

它们由任何

生成以尝试实现

正如我们在先前的

要访问全局变量,

一个指向

因此,R2

指向端口

接下来,它将

寄存器中。

那么,该端口的值

现在,某个

思考一下刚才发生了什么。

在这里,我有一个

都位于该端口中。

但现在我有一个寄存器,

它具有该端口的值。

我在两个不同的位置

那么,我要问您,

情况变得更糟了。

让我们看看该点。

现在,我在这里具有

就在这里。

我在该寄存器中具有

这两个值是不同的。

您看到了吗?

这个值现在设置了位

那么,这时,我有

这两个值

我有存在于

信息的副本。

它们不一定

让我们在这里

让我们执行

那么我得到了值。

让我们挑选一个

让我挑选一个数字。

那么我要挑选

只是为了说明

我要挑选一个

那么,让我们假设

0、0、0、0。

好的,这很好。

这只是初始的状态。

它包含一些零,

1,2,3,4,5,6,7,8。

端口

让我们重点看看

这是我们在时间

具有的内容。

那么,在这里,

端口中

但幸运的是

在这两条指令之间,

接下来让我们

现在,这个

我刚才设置了位

它具有值

我是说,它具有值

或运算。

但我们获得了中断。

该线程

那么,要执行的

那么,现在我

再说一次,您还记得吗,

寄存器入栈,

一些新的

那么,该寄存器

那么,当我读取

我将得到

这一次,我将设置这个位。

那么,它将变为

然后,我将

现在,在这里写入了该

好的,那么这是时间

然后,我

请记住,连接

那么,它会

那么,最终,它会

这是第

但您应该记得,它所做的是,

弹出。

因此

因为我把它留在了这里。

那么,当我这么做时,

这是第

那么,现在,如果

我已经执行了

我最终

我应该最终

但我最终使一个

这是因为该共享

是一个关键部分,它具有

换句话说,

读取、修改、写入。

这是一件糟糕的事情。

因此,我们要

我们可以使这个成为端口

这样就可以

我们已经看到过

我们可通过它

我们可以

中断赋予相同的

就无法相互中断。

这样就可以解决该问题。

或者,我们可以针对

再重新启用中断。

这会导致

一旦我开始

它就会不可分割地

它会以原子方式运行。

换句话说,

那么,这些就是我可以

三种方法。

但请记住,如果您有

如果您有多线程,

共享某个永久性的

而某人采取了正确的

当一个东西使另一个

发生什么怪异的事情。

然后,使用这

来解决

好,那么我们

我们讨论了

它作为我们的第一个中断,

几行初始化代码,

中断处理例程。

然后,我们再次

它是一种用于查看

时间和中断之间的

我为您带来了有关

关键部分是当您具有

非原子意味着它可以拆分。

中断已启用。

该事件序列

非原子序列,

变量的读取、修改、写入

这种序列

还有其他序列,如写入、

但这种序列可能

然后,我们讨论了三种

方法的思想是通过使它们

我们可以通过

我们可以通过更改

我们可以通过禁用中断

优先级来实现原子性。

好吧,祝您本次实验愉快。

本次实验

但是,我认为一旦您完成它,

好的,祝您愉快。

视频报错
手机看
扫码用手机观看
收藏本课程

视频简介

TI-RSLK 模块 10 - 讲座视频 - 调试实时系统 - 理论

所属课程:TI机器人系统学习套件(TI-RSLK) 发布时间:2018.08.27 视频集数:69 本节视频时长:00:20:23

在该实验中,你将学习如何利用SysTick产生周期性中断。

TI培训小程序