TI SimpleLink CC3220 RTOS 演示
使用面向 Code Composer (CCS) 的 FreeRTOS Cortex-M 移植
[RTOS 移植]
SimpleLink CC3220 LaunchPad 开发套件
简介
此页面记录的 Code Composer Studio (CCS) 演示应用程序面向
Texas Instruments SimpleLink CC3220 WiFi MCU。 CC3220SF 部件具有一个 ARM Cortex-M4
核心、1 MB 闪存、256 KB RAM 和增强的安全功能。
注意:即使 CC3220 具有 ARM Cortex-M4 核心,也不使用
浮点单元 (FPU) ,因此它使用 FreeRTOS Cortex-M3 移植。
此演示项目已预配置为在 SimpleLink Wi-Fi CC3220SF
无线微控制器 LaunchPad 开发套件上运行,也可以配置为
创建简单的 blinky 演示或全面的测试和演示应用程序。
blinky 演示使用 FreeRTOS 的无滴答空闲模式来降低功耗。
通过停止 RTOS 滴答中断,微控制器可以维持在节能状态,
直到中断发生,或者到了 RTOS 内核
将任务转换为“就绪”状态的时间。 请注意,本文仅演示了通用
ARM Cortex-M 无滴答实现。 通过定制无滴答实现,
使用特定于 CC3220 的时钟和低功率模式将显著提升节能成效
。
请参阅低功耗支持
和适用于 ARM Cortex-M MCU 的低功耗 RTOS
页面。
重要提示!使用 TI CC3220 SimpleLink ARM Cortex-M4F 演示的注意事项
使用此 RTOS 移植之前,请阅读以下所有要点。
- 源代码组织
- 演示应用程序
- RTOS 配置和使用详情
另请参阅常见问题我的应用程序
未运行,问题可能出在哪里?
源代码组织
FreeRTOS 下载包含每个 FreeRTOS 移植的源代码和
所有演示应用程序,因此包含的文件数量远多于 CC3220 SimpleLink
演示的要求。 请参阅本网站源代码组织部分,
了解有关下载文件的描述。
CCS 使用 Ecliplse IDE,
因此 CCS 项目采用常用的 Eclipse 项目名称 .project。 该
项目位于
/FreeRTOS/Demo/CORTEX_M4_SimpleLink_CC3220SF_CCS 目录。
构建和运行 CCS3220 SimpleLink RTOS 应用程序
RTOS 演示项目可以被配置为构建
一个简单的 blinky 项目,同时演示 FreeRTOS 的通用 ARM Cortex-M 无滴答低功耗模式,
或者一个全面的测试和演示应用。 常量
configCREATE_SIMPLE_TICKLESS_DEMO 位于
项目的 FreeRTOSConfig.h 文件顶部,
用于在二者之间进行切换。
-
如果 configCREATE_SIMPLE_TICKLESS_DEMO
设置为 1,则创建简单的无滴答演示。
-
如果 configCREATE_SIMPLE_TICKLESS_DEMO
设置为 0,则创建全面演示。
请注意本页顶部的注释,
了解使用所演示的通用
无滴答实现与使用特定于 CC3220
的无滴答实现时的节能效果区别。
此演示使用了在 Launchpad 开发套件上构建的 LED,
因此无需进行硬件设置。
注意:CCS 项目引用了使用相对路径的文件。 如果目录路径已更改或文件已移动,
则无法构建项目。 Eclipse
的 'export' 功能可用于将项目转换为独立项目,
此项目只能使用 .project 文件所在目录下的目录。
-
使用硬件的 USB 连接器将 Launchpad 开发套件直接连接到主机
(运行 CCS 的计算机),无需其他调试
接口。
-
启动 CCS Eclipse IDE,然后按照提示创建一个新的或选择一个现有的
工作区。
-
在 IDE 的 "File" 菜单中选择 "Import"。 系统将显示
如下对话框。 选择 "Code Composer Studio->CCS Projects"(如下所示)。
首次点击 "Import" 时显示的对话框
-
在下一个对话框中,选择 /FreeRTOS/Demo/CORTEX_M4_SimpleLink_CC3220SF_CCS
作为根目录。 确保 RTOSDemo 项目在 "Projects" 区域中已勾选,
并确保 “Copy Projects Into Workspace”
未勾选,然后单击
"Finish" 按钮(请参阅下图查看正确的复选框状态)。
确保 RTOSDemo 已勾选且 "Copy projects into workspace" 未勾选
-
从 CCS Eclipse 的 "Project" 菜单中选择 "Build All",以构建
演示项目。
-
从 Eclipse 的 "Run" 菜单中选择 "Debug",
对微控制器闪存进行编程并启动调试
会话。
演示应用程序功能
使用无滴答操作的简单 blinky 示例
当 configCREATE_SIMPLE_TICKLESS_DEMO 设置为
1 时,创建简单的无滴答示例。 FreeRTOSConfig.h 的顶部定义了 configCREATE_SIMPLE_TICKLESS_DEMO。
FreeRTOS 无滴答闲置模式在闲置期间(没有可执行的应用程序任务的期间)停止周期性 RTOS 滴答中断
。
此 blinky 示例创建了两个任务,它们每秒只取消阻塞一次,
因此在大部分执行时间内都会停止滴答中断。
通过停止 RTOS 滴答中断,微控制器可以维持在节能状态,
直到中断发生,或者到了 RTOS 内核
将任务转换为“就绪”状态的时间。
请注意本页顶部的注释,
了解使用所演示的通用
无滴答实现与使用特定于 CC3220
的无滴答实现时的节能效果区别。 通用无滴答闲置
模式使用 SysTick 时钟,该 24 位系统时钟速度较快,因此
会在演示任务进入和随后退出阻塞状态之间发生多次溢出,
每次溢出都会产生一个中断。
将 configCREATE_SIMPLE_TICKLESS_DEMO 设置为 1 会导致 main() 调用
main_blinky():
全面测试和演示应用
当 configCREATE_SIMPLE_TICKLESS_DEMO 设置为
0 时,创建全面示例。 FreeRTOSConfig.h 中定义了 configCREATE_SIMPLE_TICKLESS_DEMO。
将 configCREATE_SIMPLE_TICKLESS_DEMO 设置为 0 会导致 main() 调用
main_full():
中断服务程序
优先级分配
请注意!:请参阅说明如何在 ARM Cortex-M 设备上设置中断优先级的页面。 请记住,ARM Cortex-M 核心中,
数字越小表示中断优先级越高。 这一点
可能有悖直觉,容易混淆! 如果要将
中断设置为低优先级,请不要将其优先级指定为 0(或其他低数值),
因为这会导致该中断在系统中具有
最高优先级,并且如果这个优先级
高于 configMAX_SYSCALL_INTERRUPT_PRIORITY,可能会导致系统崩溃。 另外,请勿忘记
分配中断优先级,因为默认情况下,中断优先级为 0,
这可能导致其处于最高优先级。
ARM Cortex-M 核心上的最低优先级实际上是 255,但不同
ARM Cortex-M 微控制器制造商会实现不同数量的优先级位,
并提供优先级指定方式不同的库函数。 例如,
TI CC3220 ARM Cortex-M4 SimpleLink MCU 实现了 3 优先级位,
允许使用最多 8 个不同的优先级(0 到 7,含 0 和 7)。 最低优先级对应
最大数字。 某些库函数会使用数值 7 作为
最低优先级,而其它函数则会使用数值 224 作为最低优先级(
即 7 << 5,这样 ARM Cortex-M 才能在中断控制器中看到该值)。
这两个数字分别由
FreeRTOSConfig.h 中的 configLIBRARY_LOWEST_INTERRUPT_PRIORITY 和 configKERNEL_INTERRUPT_PRIORITY 定义。 可指定的最高优先级
始终为零。
我们还建议确保将所有优先级位指定为
抢占式优先级位,不要将任何优先级位指定为子优先级位。
实施中断服务程序
导致上下文切换的中断服务程序
无特殊要求。 参见以下示例:
void Dummy_IRQHandler(void)
{
long lHigherPriorityTaskWoken = pdFALSE;
/* Clear the interrupt if necessary. */
Dummy_ClearITPendingBit();
/* This interrupt does nothing more than demonstrate how to synchronise a
task with an interrupt. A task notification is used for this purpose. Note
lHigherPriorityTaskWoken is initialised to zero. Only FreeRTOS API functions
that end in "FromISR" can be called from an ISR! */
vTaskNotifyGiveFromISR( xTaskToNotify, &lHigherPriorityTaskWoken );
/* If the task with handle xTaskToNotify was blocked waiting for a notification,
and giving the notification caused the task to unblock, and the unblocked
task has a priority higher than the current Running state task (the task that
this interrupt interrupted), then lHigherPriorityTaskWoken will have been set
to pdTRUE internally within vTaskNotifyGiveFromISR(). Passing pdTRUE into
the portYIELD_FROM_ISR() macro will result in a context switch being pended
to ensure this interrupt returns directly to the unblocked, higher priority,
task. Passing pdFALSE into portYIELD_FROM_ISR() has no effect. */
portYIELD_FROM_ISR( lHigherPriorityTaskWoken );
}
RTOS 移植特定配置
这些演示的特定配置项目位于 FreeRTOSConfig.h
文件中,该文件位于项目文件所在的目录。 您可以
编辑 FreeRTOSConfig.h 中定义的常量,使其适合您的应用程序。 尤其是以下常量:
每个移植都将 "BaseType_t" 定义为
。 所有 ARM Cortex-M4F 移植都将 BaseType_t 的类型定义为 long。
请注意 vPortEndScheduler() 尚未实现。
内存分配
Source/Portable/MemMang/heap_4.c 包含在 ARM CORTEX-M4F 演示应用程序项目中,用以提供
RTOS 内核所需的内存分配。
请参阅 API 文档的内存管理部分,
获取完整信息。
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.