]> begriffs open source - freertos/blob - portable/GCC/RL78/portasm.S
Add SPDX-License-Identifier: MIT to MIT licensed files.
[freertos] / portable / GCC / RL78 / portasm.S
1 /*\r
2  * FreeRTOS Kernel <DEVELOPMENT BRANCH>\r
3  * Copyright (C) 2021 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
4  *\r
5  * SPDX-License-Identifier: MIT
6  *
7  * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
8  * this software and associated documentation files (the "Software"), to deal in\r
9  * the Software without restriction, including without limitation the rights to\r
10  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r
11  * the Software, and to permit persons to whom the Software is furnished to do so,\r
12  * subject to the following conditions:\r
13  *\r
14  * The above copyright notice and this permission notice shall be included in all\r
15  * copies or substantial portions of the Software.\r
16  *\r
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
18  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
19  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
20  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
21  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
22  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
23  *\r
24  * https://www.FreeRTOS.org\r
25  * https://github.com/FreeRTOS\r
26  *\r
27  */\r
28 \r
29 #include "FreeRTOSConfig.h"\r
30 #include "ISR_Support.h"\r
31 \r
32         .global    _vPortYield\r
33         .global    _vPortStartFirstTask\r
34         .global    _vPortTickISR\r
35 \r
36         .extern    _vTaskSwitchContext\r
37         .extern    _xTaskIncrementTick\r
38 \r
39         .text\r
40         .align 2\r
41 \r
42 /* FreeRTOS yield handler.  This is installed as the BRK software interrupt\r
43 handler. */\r
44 _vPortYield:\r
45         /* Save the context of the current task. */\r
46         portSAVE_CONTEXT\r
47         /* Call the scheduler to select the next task. */\r
48         call      !!_vTaskSwitchContext\r
49         /* Restore the context of the next task to run. */\r
50         portRESTORE_CONTEXT\r
51         retb\r
52 \r
53 \r
54 /* Starts the scheduler by restoring the context of the task that will execute\r
55 first. */\r
56         .align 2\r
57 _vPortStartFirstTask:\r
58         /* Restore the context of whichever task will execute first. */\r
59         portRESTORE_CONTEXT\r
60         /* An interrupt stack frame is used so the task is started using RETI. */\r
61         reti\r
62 \r
63 /* FreeRTOS tick handler.  This is installed as the interval timer interrupt\r
64 handler. */\r
65         .align 2\r
66 _vPortTickISR:\r
67 \r
68         /* Save the context of the currently executing task. */\r
69         portSAVE_CONTEXT\r
70         /* Call the RTOS tick function. */\r
71         call      !!_xTaskIncrementTick\r
72 #if configUSE_PREEMPTION == 1\r
73         /* Select the next task to run. */\r
74         call      !!_vTaskSwitchContext\r
75 #endif\r
76         /* Retore the context of whichever task will run next. */\r
77         portRESTORE_CONTEXT\r
78         reti\r
79 \r
80         .end\r
81 \r