Atmel AVR (MegaAVR) / WinAVR 移植
[RTOS 移植]
ATmega323/ATmega32 和 ATmega128 目前有两种移植:一种使用 AVR 的 IAR 嵌入式工作台 TM,另一种使用 WinAVR (GCC)。 此页面仅提供 WinAVR 移植的相关信息。
此外还有一些移植可用于 ATmega320x/480x 和 AVR Dx 以及 WINAVR (AVR GCC)、MPLAB XC8 和 AVR IAR 嵌入式工作台。
AVR WinAVR 演示应用程序配置针对在 Atmel
STK500 原型板上运行的场景,
使用运行频率为 8MHz 的 AVR ATMega323 嵌入式处理器(如需使用其他开发板,请参阅相关说明)。 如果
使用 ATMega32,频率可以提高到 16 MHz。 此移植还与 ATMega128 处理器一起使用。
ATMega323 的 2 KBytes RAM 容量足够运行 10 个实时任务,包括空闲任务。
从 V4.1.0 开始,AVR 演示应用程序演示了协程的使用。
重要提示!使用 AVR/WinAVR RTOS 移植的注意事项:
使用此移植之前,请阅读以下所有要点。
- 源代码组织
- 演示应用程序
- 配置和使用详情
另请参阅常见问题:我的应用程序未运行,问题可能出在哪里?
源代码组织
FreeRTOS 下载文件包含所有 FreeRTOS 移植的源代码。
请参阅源代码组织部分,
下载文件的描述和有关创建新项目的信息。
AVR WinAVR 演示应用程序 makefile 位于 Demo/AVR_ATMega323_WinAVR 目录下。
演示应用程序
FreeRTOS 源代码下载包括用于 Mega AVR GCC RTOS 移植的完全抢占式多任务演示应用程序。
演示应用程序硬件设置
演示应用程序包括通过串行端口发送和接收字符的任务。 一个任务发送的字符
需要另一个任务来接收,如果任何字符被遗漏或接收顺序错误,则标记错误情况。 串行端口上
需要一个环回连接器才能让此机制正常运行(只需在串行端口连接器上将引脚 2 和 3
连接在一起)。
为了达到最佳效果, LED 应连接到标准 PC 并行端口上的八条数据线。
忽略这些 LED 不会导致 RTOS 演示应用程序
失败,但会删除一些视觉反馈,表明一切都按预期运行。
STK500 原型板上必须提供以下链接才能确保演示应用程序能够运行,
如上图所示:
- PORTB 到 LEDS 的链接
- PORTD 第 0 位和第 1 位到 RS 的链接
- SPROG3 到 ISP6PIN 的链接(对 AVR ATMega323 进行编程的正确链接)
演示应用程序包含通过串行端口发送和接收字符的任务。 一个任务发送的字符
需要另一个任务来接收,如果任何字符被遗漏或接收顺序错误,则标记错误情况。 串行端口上
需要一个环回连接器才能让此机制正常运行(只需在串行端口连接器上将引脚 2 和 3
连接在一起)。
构建 RTOS 演示应用程序
FreeRTOS V3.0.0 已将以前用于构建演示应用程序的批处理文件替换为单个 makefile。 这
得益于 WinAVR 后期版本中 ELF 和 COFF 格式支持得到了改进。
要生成演示应用程序:
- 确保 WinAVR 已正确安装,并可从您的 PATH 环境访问。
- 打开命令提示符并导航至 Demo/AVR_ATMega323_WinAVR 目录。
- 键入 "make" 以构建项目。 项目的构建应该不会报错或出现警告。
- 要强制完全重建,请键入 "make clean"。
- 可在 makefile 中调整优化级别 (option -O) 和调试级别 (option -g)
以满足您的应用程序要求。
构建过程将生成一个名为 RTOSDemo.elf 的文件,适合在
免费的 Atmel AVR Studio IDE 中执行和调试,以及一个名为 RTOSDemo.hex 的文件,适合烧录到处理器中。
生成用于调试和模拟的文件时,确保在 makefile 中使用 -g 选项。
功能
RTOS 演示应用程序创建 10 个标准演示任务。
- LED 0-2 由标准的 ‘flash’ 协程控制,以固定的频率闪烁。
每个 LED 都由单独的任务控制闪烁。
- LED 4 和 5 由标准的 'comtest' 任务控制。 每次传输 RS232 字符时,
LED 4 都会切换。 每次收到并验证 RS232 字符时,
LED 5 都会切换。
- 并非所有任务都会更新 LED 的状态,所以没有可见的指示表明它们运行正常。
因此系统创建了一个 ‘Check’ 任务,用于确保在任何其他任务中
均未检测到错误。
LED 7 由 'check' 任务控制。 如果任何其他实时任务中都没有检测到错误,
LED 7 将每隔几秒钟闪烁一次。 如果在任何其他任务中检测到错误,则 LED 7 将
停止闪烁。
请参阅标准演示应用程序章节,了解
演示应用程序任务的全部详情。
RTOS 移植特定配置
此移植的特定配置项位于 Demo/AVR_ATMega323_WinAVR/FreeRTOSConfig.h 中。
您可以编辑此文件中定义的常量,使其适合您的应用程序。 特别是
用于设置 RTOS tick 的频率的 configTICK_RATE_HZ 定义。 提供的数值 1000 Hz 可用于
测试 RTOS 内核功能,但这超过了大部分应用程序的频率要求。 降低此值将有助于提高效率。
每个移植都会将 "BaseType_t" 定义为该处理器的最有效数据类型。 此移植将
BaseType_t 定义为 char 类型。
使用 AVR ATMega323 以外的微控制器
- 更改 makefile 顶部的 MCU 定义。
- 在 Demo/AVR_ATMega323_WinAVR/FreeRTOSConfig.h 中设置正确的时钟频率。
- 确保设置后的 configTOTAL_HEAP_SIZE 定义能够匹配可用的 RAM。
- 滴答 ISR 由计时器 1 上的比较匹配生成。 并非所有 AVR 设备上的计时器配置
都相同。 检查 Source/portable/GCC/ATMega323/port.c 中的函数 prvSetupTimerInterrupt(),以查看
您选择的设备是否需要任何修改。
无论使用哪个零件,确保熔断 MCU 保险丝以提供正确的时钟频率(这可以从
AVR Studio 开发工具完成)。
在抢占式和协同式 RTOS 内核之间切换
将 Demo/AVR_ATMega323_WinAVR/FreeRTOSConfig.h 内的 configUSE_PREEMPTION 定义设置为 1 即可
使用抢占式机制,设置为 0 即可使用合作式。
内存管理
MegaAVR 演示应用程序 makefile 中包含 Source/Portable/MemMang/heap_1.c,用于提供
RTOS内核所需的内存分配。
请参阅 API 文档的内存管理部分,
获取完整信息。
开发工具选项
与所有移植一样,使用正确的编译器选项至关重要。 要确保这一点,最佳方法是
提供的演示应用程序 makefile。
RTOS 演示应用程序串行端口驱动程序
演示应用程序中包含的串行端口驱动程序使用 AVR ATMega323 手册中详细说明的计算来设置
波特率寄存器。在某些波特率下,我发现有必要稍微调整已计算的设置。我怀疑这是因为
安装在原型板中安装的 8MHz 晶体不准确,以及波特计算中的四舍五入误差。
此外还应注意,编写串行驱动程序是为了测试部分 RTOS 内核功能,并不是
一个优化的解决方案。
Linux 用户注意事项:
我只测试了 Win2K 主机的 makefile,但希望该文件也能与 GCC 的 Linux 版本兼容。
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.