1;/* 2; * FreeRTOS Kernel V11.1.0 3; * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. 4; * 5; * SPDX-License-Identifier: MIT 6; * 7; * Permission is hereby granted, free of charge, to any person obtaining a copy of 8; * this software and associated documentation files (the "Software"), to deal in 9; * the Software without restriction, including without limitation the rights to 10; * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11; * the Software, and to permit persons to whom the Software is furnished to do so, 12; * subject to the following conditions: 13; * 14; * The above copyright notice and this permission notice shall be included in all 15; * copies or substantial portions of the Software. 16; * 17; * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18; * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19; * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20; * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21; * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22; * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23; * 24; * https://www.FreeRTOS.org 25; * https://github.com/FreeRTOS 26; * 27; */ 28 29#include "portmacro.h" 30 31 EXTERN _vTaskSwitchContext 32 EXTERN _xTaskIncrementTick 33 34 EXTERN _interrupt_vector_table 35 36 PUBLIC _vPortYield 37 PUBLIC _vPortStartFirstTask 38 PUBLIC _vPortTickISR 39 40#if !defined(__IASMRL78__) || (__VER__ < 310) 41 #error "This port requires the IAR Assembler for RL78 version 3.10 or later." 42#endif 43 44;------------------------------------------------------------------------------- 45; FreeRTOS yield handler. This is installed as the BRK software interrupt 46; handler. 47;------------------------------------------------------------------------------- 48 SECTION `.text`:CODE:ROOT(1) 49_vPortYield: 50 portSAVE_CONTEXT ; Save the context of the current task. 51 RCALL (_vTaskSwitchContext) ; Call the scheduler to select the next task. 52 portRESTORE_CONTEXT ; Restore the context of the next task to run. 53 RETB 54;------------------------------------------------------------------------------- 55 56 57;------------------------------------------------------------------------------- 58; Starts the scheduler by restoring the context of the task that will execute 59; first. 60;------------------------------------------------------------------------------- 61 SECTION `.text`:CODE:ROOT(1) 62_vPortStartFirstTask: 63 portRESTORE_CONTEXT ; Restore the context of whichever task the ... 64 RETI ; An interrupt stack frame is used so the 65 ; task is started using a RETI instruction. 66;------------------------------------------------------------------------------- 67 68 69;------------------------------------------------------------------------------- 70; FreeRTOS Timer Tick handler. 71; This is installed as the interval timer interrupt handler. 72;------------------------------------------------------------------------------- 73 SECTION `.text`:CODE:ROOT(1) 74_vPortTickISR: 75 portSAVE_CONTEXT ; Save the context of the current task. 76 RCALL (_xTaskIncrementTick) ; Call the timer tick function. 77 CMPW AX, #0x00 78 SKZ 79 RCALL (_vTaskSwitchContext) ; Call the scheduler to select the next task. 80 portRESTORE_CONTEXT ; Restore the context of the next task to run. 81 RETI 82;------------------------------------------------------------------------------- 83 84 END 85