0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

瑞萨RA产品家族初学者指南-第9章(1)

瑞萨嵌入式小百科 来源:未知 2022-11-15 12:15 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群


瑞萨RA产品家族初学者指南》系列文章已收录成合集,欢迎点击上方查看合集并订阅!


9. 使用实时操作系统


您将在本章中学到以下内容:

  • 什么是线程、信号量和队列,以及如何使用它们。

  • 如何在e2 studio中向程序添加线程和信号量

  • 如何在RTOS控制下通过按钮切换LED


上一章中的练习已经利用了瑞萨RA系列单片机MCU)灵活配置软件包(FSP)的很大一部分。在本章中,您将使用FreeRTOS实时操作系统创建一个小型应用程序,利用线程控制LED并利用信号量实现与按钮的同步。您将亲身体验到这实际上仅需要几个步骤。


我们将从头开始创建完整的项目,因此如果您没有进行过之前的实验,请不必担心。


本章目录

  1. 线程、信号量和队列

  2. 使用e2 studio将线程添加到FreeRTOS中


9.1 线程、信号量和队列

在我们实际深入进行此练习之前,需要定义将在本章和下一章中使用的一些术语,以确保我们能够达成共识。

首先,需要定义术语“线程”。如果您更习惯于“任务”这个表达方式,只需把线程看作是一种任务。有些人甚至互换使用这两个短语。当使用实时操作系统(RTOS)时,单片机上运行的应用程序将拆分为几个较小的半独立代码块,每个代码块通常控制程序的一个方面。这些小片段称为线程。一个应用程序中可以存在多个线程,但是在任何给定时间都只能有一个线程处于活动状态,因为RA系列单片机是单核器件。每个线程都有自己的堆栈空间,如果需要安全的上下文,则可以将其置于MCU的安全侧。每个线程还分配有优先级(相对于应用程序中的其他线程),并且可以处于不同的状态,例如运行、就绪、阻塞或暂停。在FreeRTOS中,可以通过调用eTaskGetState()API函数来查询线程的状态。线程间信号传输、同步或通信是通过信号量、队列、互斥、通知、直接任务通知或者流和消息缓冲区来实现的。

信号量是RTOS的资源,可用于传输事件和线程同步(以产生者-使用者方式)。使用信号量允许应用程序暂停线程,直到事件发生并发布信号量。如果没有RTOS,就需要不断地轮询标志变量或创建代码来执行中断服务程序(ISR)中的某个操作,这会在相当长的一段时间内阻塞其他中断。使用信号量可快速退出ISR并将操作推迟到相关线程。

FreeRTOS提供计数信号量和二进制信号量。尽管二进制信号量由于只能采用两个值(0和1)而非常适合实现任务之间或中断与任务之间的同步,但是计数信号量的计数范围可涵盖0到用户在FSP配置器中创建信号量期间指定的最大计数。默认值为256,可支持设计人员执行更复杂的同步操作。

每个信号量都有两个相关的基本操作:

xSemaphoreTake()(将使信号量递减1)和xSemaphoreGive()(将使信号量递增1)。

这两个函数有两种形式:一种是可以从中断服务程序内部调用(xSemaphoreTakeFromISR()xSemaphoreGiveFromThread())的形式,另一种则是上述可以在线程的正常上下文中调用的形式。


我们需要讨论的最后一个术语是队列,即使在本练习中不使用队列,下一章的练习中也会使用。报文队列是线程间通信的主要方法,它允许在任务之间或中断与任务之间发送消息。消息队列中可以有一条或多条消息。数据(也可以是指向更大缓冲区的指针)会复制到队列中,即,它不存储引用而是消息本身。新消息通常置于队列的末尾,但也可以直接发送到开头。接收到的消息将从前面开始删除。

允许的消息大小可在设计时通过FSP配置器指定。默认项大小为4个字节,默认队列长度(表示队列中可存储的项数)为20。所有项的大小必须相同。FreeRTOS中的队列数没有限制;惟一的限制是系统中可用的存储空间。使用xQueueSend()函数将消息放入队列中,并通过xQueueReceive()从队列中读取消息。与信号量一样,函数有两种版本:一种可以从线程的上下文调用,另一种可以从ISR内部调用。


9.2 使用e2 studio将线程添加到FreeRTOS中

接下来的练习也是基于EK-RA6M4评估板。这次,我们将使用电路板左上方的蓝色按钮S1向应用程序传输事件,应用程序将切换绿色LED2进行响应。为实现目标,我们将使用FreeRTOS,事件的处理将在线程内进行,并通过信号量进行通知。


像往常一样,第一步是使用项目配置器创建一个新项目,这已在第4章第8章中做过练习。首先,转到“File → New → C/C++ Project”(文件 → 新建 → C/C++项目)。在所出现窗口的侧边栏中选择Renesas RA,并突出显示“Renesas RA C/C++ Project”(瑞萨RA C/C++项目)条目。单击“Next”(下一步)并在出现的屏幕上输入项目名称,例如MyRtosProject。再次单击“Next”(下一步)。此操作将转到“Device and Tools Selection”(器件和工具选择)窗口。首先,选择一个电路板。选择EK-RA6M4并将相应的器件设置为R7FA6M4AF3CFB(如果尚未列出)。查看工具链:它应显示为GCC Arm Embedded。单击“Next”(下一步)继续操作。


在当前出现的屏幕中,可以在非TrustZone与安全和非安全TrustZone项目之间进行选择。保持“Flat(NonTrustZone)Project”(扁平化(非TrustZone)项目)处于选中状态,然后单击“Next”(下一步)。随即出现“Build Artifact andRTOSSelection”(构建工件和RTOS选择)窗口。保持设置不变,即在“Build Artifact Selection”(构建工件选择)下选择“Executable”(可执行文件),在“RTOS Selection”(RTOS选择)下选择FreeRTOS。单击“Next”(下一步),转到下一个名为“Project Template Selection”(项目模板选择)的屏幕。在此,选择“FreeRTOS – Minimal – Static Allocation”(FreeRTOS – 最小化 – 静态分配)。


最后,单击“Finish”(完成),在配置器生成项目后,e2 studio将询问您是否切换到“FSP Configuration”(FSP配置)透视图。透视图出现后,直接转到“Stacks”(堆)选项卡。该选项卡将在“Threads”(线程)窗格中显示“HAL/Common”(HAL/通用)线程的单个条目,其中包含I/O端口的驱动程序。单击窗格顶部的“New Thread”(新线程)图标(请参见图9-1添加新线程)。


图9-1:在FSP配置器出现之后,将仅显示一个线程。选择“New Thread”(新线程)按钮,添加另一个线程


现在,在“Properties”(属性)视图中更改新线程的属性:将“Symbol”(符号)重命名为led_thread,将“Name”(名称)重命名为LED Thread。其他属性保持默认值。在“LED Thread Stack”(LED线程堆)窗格中,单击“New Stack”(新线程)按钮图标,选择“Driver → Input → External IRQ Driver on r_icu”(驱动程序 → 输入 → r_icu 上的外部IRQ驱动程序)(请参见图9-2)。


图9-2:添加新驱动程序只需单击几下鼠标


此操作将为外部中断添加驱动程序。查看新驱动程序的“Properties”(属性)并进行一些更改:首先,将“Channel”(通道)从0更改为10,因为S1所连引脚连接到IRQ10。出于相同的原因,将名称更改为g_external_irq10或您喜欢的任何名称。

为中断分配优先级12,启动期间FSP将不会允许该中断。也可以选择任何其他优先级,但开始时最好选择优先级12,因为即使在较大的系统中,也很少会遇到中断优先级冲突。请注意,优先级15是为系统时钟节拍定时器(systick)保留的,因此不应被其他中断使用。


图9-3:堆元素的灰色条表示此驱动程序是模块实例,只能由另一个FSP模块实例引用。


“Trigger”(触发器)从“Rising”(上升)更改为“Falling”(下降)以捕捉按钮激活操作,并将“Digital Filtering”(数字滤波)从“Disabled”(禁用)更改为“Enabled”(启用)。始终将“Digital Filtering Sample Clock”(数字滤波采样时钟)设置为PCLK/64。这将有助于对按钮去抖。最后,用external_irq10_callback替换Callback行中的NULL。每次按下S1都会调用此函数。在稍后创建应用程序时,我们将为回调函数本身添加代码。图9-4给出了必要设置的摘要。


图9-4:应用程序所需的IRQ驱动程序的属性


接下来,只需要执行几个步骤,即可编译和下载程序。


第9章未完待续


往期推荐

1

瑞萨RA产品家族初学者指南-第8章(1)

2

瑞萨RA产品家族初学者指南-第8章(2)

3

瑞萨RA产品家族初学者指南-第7章

瑞萨电子 (TSE: 6723)

科技让生活更轻松,致力于打造更安全、更智能、可持续发展的未来。作为全球微控制器供应商,瑞萨电子融合了在嵌入式处理、模拟电源及连接方面的专业知识,提供完整的半导体解决方案。成功产品组合加速汽车、工业、基础设施及物联网应用上市,赋能数十亿联网智能设备改善人们的工作和生活方式。

更多信息,敬请访问renesas.com



原文标题:瑞萨RA产品家族初学者指南-第9章(1)

文章出处:【微信公众号:瑞萨MCU小百科】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    147

    文章

    18604

    浏览量

    386851
  • 瑞萨
    +关注

    关注

    36

    文章

    22429

    浏览量

    89739
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    解读电子RA4C1 MCU的核心特性

    近日电子推出了一款新的RA产品——RA4C1,作为新一代的RA4
    的头像 发表于 08-27 09:34 2138次阅读
    解读<b class='flag-5'>瑞</b><b class='flag-5'>萨</b>电子<b class='flag-5'>RA4C1</b> MCU的核心特性

    RA家族RA4C1低功耗MCU发布

    RA家族在2025年8月推出RA4C1低功耗MCU,基于Arm Cortex-M33(CM33)内核,提供低功耗/低电压操作、LCD段码
    的头像 发表于 08-22 15:00 1982次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b><b class='flag-5'>家族</b><b class='flag-5'>RA4C1</b>低功耗MCU发布

    RA8系列教程 | RA8 开发环境搭建,并点亮一个LED

    今天就给大家讲讲基于Cortex-M85内核RA8单片机快速上手指南
    的头像 发表于 06-04 17:32 1462次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b>8系列教程 | <b class='flag-5'>瑞</b><b class='flag-5'>萨</b> <b class='flag-5'>RA</b>8 开发环境搭建,并点亮一个LED

    RA8D1单片机IO中断配置实现方法

    本文为结合e2 studio工具,以及CPKCOR_RA8D1B评估板,给大家讲述RA8D1
    的头像 发表于 04-09 15:05 1515次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA8D1</b>单片机IO中断配置实现方法

    RA系列MCU的命名方法与选型

    初学者来说,要理解RA产品家族产品型号中的不同数字和字母并不容易。我们首先以RA系列MCU中的
    的头像 发表于 03-27 14:32 2267次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b>系列MCU的命名方法与选型

    RA8快速上手指南:Cortex-M85内核RA8开发环境搭建 并点亮一个LED

    因为Cortex-M内核,RA8系列单片机支持多种市面上常见的开发环境,像Keil MDK、IAR EWARM等,而本文讲述的是自家
    的头像 发表于 03-17 14:35 1560次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b>8快速上手<b class='flag-5'>指南</b>:Cortex-M85内核<b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b>8开发环境搭建 并点亮一个LED

    RA2L1入门学习】+开箱评测

    R7FA2L1AB2DFL。RA2L1 产品组采用优化的制程和电子的低功耗工艺技术,是业界一流水平的超低功耗微控制器。 本次收到的开发板
    发表于 03-09 07:40

    RA4L1产品特色功能及应用场景

    近日电子推出了一款最新的RA产品RA4L1,它有哪些特性以及适用于什么样的应用场景呢?本篇文章给大家带来详细介绍。
    的头像 发表于 03-04 15:51 1038次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA4L1</b><b class='flag-5'>产品</b>特色功能及应用场景

    电子RA4L1 MCU的基本特性和应用场景

    近日电子推出了一款最新的RA产品RA4L1,它有哪些特性以及适用于什么样的应用场景呢?本篇文章给大家带来详细介绍。
    的头像 发表于 02-28 16:53 1885次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b>电子<b class='flag-5'>RA4L1</b> MCU的基本特性和应用场景

    新品上市 | RA4L1低功耗MCU--USB,CANFD,段码LCD,适用低功耗电池应用

    RA家族RA4L1低功耗MCU产品系列于2025年2月推出。
    的头像 发表于 02-27 12:11 1719次阅读
    新品上市 | <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA4L1</b>低功耗MCU--USB,CANFD,段码LCD,适用低功耗电池应用

    RA家族RA4L1低功耗MCU量产上市

      RA家族RA4L1低功耗MCU产品系列于2025年2月推出。
    的头像 发表于 02-20 13:39 1263次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b><b class='flag-5'>家族</b><b class='flag-5'>RA4L1</b>低功耗MCU量产上市

    EE-269:以太网802.3初学者指南

    电子发烧友网站提供《EE-269:以太网802.3初学者指南.pdf》资料免费下载
    发表于 01-05 09:48 1次下载
    EE-269:以太网802.3<b class='flag-5'>初学者</b><b class='flag-5'>指南</b>

    RA家族精品RA2L1产品介绍

    RA2L1MCU是RA家族RA2系列广受欢迎的一款产品
    的头像 发表于 12-27 18:07 1128次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b><b class='flag-5'>家族</b>精品<b class='flag-5'>RA2L1</b><b class='flag-5'>产品</b>介绍

    电子RZ MPU家族精品RZ/N2L产品介绍

    生态合作伙伴RT-Thread推出了一款高性能、多功能以太网MPU开发板EtherKit,搭载电子RZ/N2L,并携手
    的头像 发表于 12-23 14:10 1363次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b>电子RZ MPU<b class='flag-5'>家族</b>精品RZ/N2L<b class='flag-5'>产品</b>介绍

    电子RA2L1 MCU产品介绍

    RA2L1 MCU是RA家族RA2系列广受欢迎的一款产品
    的头像 发表于 12-10 10:51 1541次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b>电子<b class='flag-5'>RA2L1</b> MCU<b class='flag-5'>产品</b>介绍