连接器 CN50/CN51 上的引脚 |
1 |
连接到 |
CN51 pin 2 |
3 |
连接到 |
CN51 pin 4 |
5 |
连接到 |
CN50 pin 2 |
7 |
连接到 |
CN50 pin 4 |
演示应用程序包括中断驱动的 UART 测试,其中一个任务传送字符, 随后另一个任务接收此类字符。为正确操作此功能,必须将环回连接器安装到 CN 63 上的下部 9 路插头 (9 路连接器上的引脚 2 和 3 必须连接在一起)。 此外,必须使用跳线将 CN63 低压插头连接到微控制器, 如《应用板用户手册》(NEC 文档编号 EASE-UM-0019-2.1)中所述。 演示应用程序硬件设置 — 目标板(所有其他移植)演示应用程序使用直接安装在目标板上的两个 LED, 因此无需额外的硬件设置。
功能本节介绍在 V850ES/Fx3 应用板上运行的完整演示的功能。 目标板没有 完整演示所需的 IO 接口或内存,因此仅执行所述任务的子集。在启动 RTOS 调度器之前,完整演示项目会创建 32 个任务。 这些任务大多数是“标准演示”任务,目的 是演示 RTOS API 和测试 RTOS 移植。 这些任务内部并不执行任何实质性的功能。 除标准演示任务之外,演示还会创建两个“寄存器测试”任务。 这些任务用已知值填充微控制器寄存器, 然后不断检查每个寄存器是否仍包含其预期值 (每个任务使用不同的值)。 任务的优先级很低, 因此会被定期抢占。 寄存器测试任务 在其中一个寄存器中发现意外值表明抢占上下文切换机制中 存在错误。 最后, “检查”任务用于提供系统状态的可见反馈。 该任务 每三秒钟才执行一次,但由于优先级高,因此可以保证获得处理时间。 每次执行时,该任务都会检查系统中其他所有任务的状态,查看 是否有任务报告了错误。 检查任务将每三秒钟切换一次 LED 状态, 前提是其他所有任务都按预期运行。 如果任何任务发现了错误, LED 状态切换速率将更改为 500 毫秒切换一次。 正确执行时,演示设置如下:
构建演示应用程序
对微控制器进行编程和调试
配置和使用详情RTOS 移植专用配置此演示的特定配置项目位于 FreeRTOS/Demo/NEC_V850ES_IAR/FreeRTOSConfig.h。 可根据 应用程序的需要,编辑本文件中定义的常量。ConfigDATA_MODE 配置常量特定于 V850ES 移植。 如果编译器选项设置为使用小或大 内存模型,则 CONFIGDATA_MODE 必须设置为 0。 如果编译器选项设置为使用微小数据模型,则 configDATA_MODE 必须设置 为 1。 每个移植 #defines 'BaseType_t' 等于该处理器的最有效数据类型。 本移植将 BaseType_t 定义为长整型。 请注意,尚未实现 vPortEndScheduler ()。 编写中断服务程序不会引起上下文切换的中断服务程序没有特殊要求,可以按照 IAR 编译器文档中的描述编写。通常,上下文切换需要中断服务程序。例如,一个正在接收的串行端口字符可对高优先级任务解除阻塞, 因为该任务正在等待该字符的到来。如果已解除阻塞的任务的优先级高于当前任务, 则 ISR 应直接返回 至已解除阻塞的任务。由于 IAR 内联汇编器的限制,此类中断服务程序必须使用 汇编文件包装器。 本演示包含 UART 驱动程序,用于演示该机制。 接收处理程序 已复制到下方: 首先是汇编文件包装器。 ; ISR_Support.h defines the portSAVE_CONTEXT and portRESTORE_CONTEXT ; macros. #include "ISR_Support.h" PUBLIC vUARTRxISRWrapper EXTERN vUARTRxISRHandler RSEG CODE:CODE ; The wrapper is the interrupt entry point. vUARTRxISRWrapper: ; The ISR must start with a call to the portSAVE_CONTEXT() macro to save ; the context of the currently running task. portSAVE_CONTEXT ; Once the context is saved the C portion of the handler can be called. ; This is where the interrupting peripheral is actually serviced. jarl vUARTRxISRHandler, lp ; Finally the ISR must end with a call to portRESTORE_CONTEXT() to restore ; the context of which ever task is selected to run - which may be ; different to the task that was running before the interrupt started. portRESTORE_CONTEXT 用于中断处理程序的示例汇编文件包装器。
中断处理程序的 C 部分只是一个标准 C 函数。 /* This standard C function is called from the assembly wrapper above. */ void vUARTRxISRHandler( void ) { char cChar; long lHigherPriorityTaskWoken = pdFALSE; /* Send the received character to the Rx queue. */ cChar = UD0RX; xQueueSendFromISR( xRxedChars, &cChar, &lHigherPriorityTaskWoken ); /* If sending a character to the Rx queue caused a task to unblock, and the unblocked task has a priority higher than the currently running task, then lHigherPriorityTaskWoken will have been set to true and a context switch should occur now. */ portYIELD_FROM_ISR( lHigherPriorityTaskWoken ); } 示例中断处理程序的 C 部分。
RTOS 内核使用的资源RTOS 内核使用 TM0 生成 RTOS 滴答。 函数 prvSetupTimerInterrupts() 在 FreeRTOSSourceportableIARV850ESport.c 中可被更改为使用任何方便的定时器源。RTOS内核还需要独占使用 TRAP 0 指令。 编译器选项与所有的端口一样,使用正确的编译器选项至关重要。 若要确保这一点, 最佳方法是基于提供的演示应用程序文件构建您的应用程序。内存分配SourcePortableMemMangheap_2.c 包含在演示应用程序中,以提供 RTOS 内核所需的内存分配。 请参阅 API 文档的内存管理部分, 获取完整信息。Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|