diff --git a/CMakeLists.txt b/CMakeLists.txt index 15bbe0bf6..5d27a58c6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -196,6 +196,7 @@ if(NOT FREERTOS_PORT) " SOFTUNE_MB91460 - Compiler: Softune Target: MB91460\n" " SOFTUNE_MB96340 - Compiler: Softune Target: MB96340\n" " TASKING_ARM_CM4F - Compiler: Tasking Target: ARM Cortex-M4 with FPU\n" + " TEMPLATE - Compiler: HOST Target: None\n" " CDK_THEAD_CK802 - Compiler: CDK Target: T-head CK802\n" " XCC_XTENSA - Compiler: XCC Target: Xtensa\n" " WIZC_PIC18 - Compiler: WizC Target: PIC18") diff --git a/configuration/FreeRTOSConfig.h b/configuration/FreeRTOSConfig.h index f4d47a933..beb049d43 100644 --- a/configuration/FreeRTOSConfig.h +++ b/configuration/FreeRTOSConfig.h @@ -132,9 +132,9 @@ Defaults to 0 if left undefined. */ /* Sets the type used by the parameter to xTaskCreate() that specifies the stack size of the task being created. The same type is used to return information -about stack usage in various other API calls. Defaults to uint16_t if left +about stack usage in various other API calls. Defaults to size_t if left undefined. */ -#define configSTACK_DEPTH_TYPE uint16_t +#define configSTACK_DEPTH_TYPE size_t /* configMESSAGE_BUFFER_LENGTH_TYPE sets the type used to store the length of each message written to a FreeRTOS message buffer (the length is also written to @@ -266,7 +266,7 @@ build. The application writer is responsible for providing the hook function for any set to 1. See https://www.freertos.org/a00016.html */ #define configUSE_IDLE_HOOK 0 #define configUSE_TICK_HOOK 0 -#define configUSE_MALLOC_FAILED_HOOK 1 +#define configUSE_MALLOC_FAILED_HOOK 0 #define configUSE_DAEMON_TASK_STARTUP_HOOK 0 /* Set configCHECK_FOR_STACK_OVERFLOW to 1 or 2 for FreeRTOS to check for a @@ -325,7 +325,7 @@ you can call a function if an assert fails that passes the filename and line number of the failing assert (for example, "vAssertCalled( __FILE__, __LINE__ )" or it can simple disable interrupts and sit in a loop to halt all execution on the failing line for viewing in a debugger. */ -#define configASSERT( ( x ) ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); } +#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); } diff --git a/portable/CMakeLists.txt b/portable/CMakeLists.txt index a13e08820..327e9236b 100644 --- a/portable/CMakeLists.txt +++ b/portable/CMakeLists.txt @@ -8,7 +8,11 @@ endif() # FreeRTOS internal cmake file. Do not use it in user top-level project add_library(freertos_kernel_port STATIC - # 16-Bit DOS ports for BCC + # TEMPLATE Port + $<$: + template/port.c> + + # 16-Bit DOS ports for BCC $<$: BCC/16BitDOS/common/portcomn.c BCC/16BitDOS/Flsh186/port.c> @@ -708,7 +712,10 @@ if( FREERTOS_PORT MATCHES "GCC_ARM_CM(3|4)_MPU" OR endif() target_include_directories(freertos_kernel_port PUBLIC - # 16-Bit DOS ports for BCC + # TEMPLATE Port + $<$:${CMAKE_CURRENT_LIST_DIR}/template> + + # 16-Bit DOS ports for BCC $<$: ${CMAKE_CURRENT_LIST_DIR}/BCC/16BitDOS/common ${CMAKE_CURRENT_LIST_DIR}/BCC/16BitDOS/Flsh186> diff --git a/portable/template/port.c b/portable/template/port.c new file mode 100644 index 000000000..f44d7e2b8 --- /dev/null +++ b/portable/template/port.c @@ -0,0 +1,79 @@ + +/* TODO: Replace the copyright and license with YOUR copyright and license */ +/* + * FreeRTOS Kernel + * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * https://www.FreeRTOS.org + * https://github.com/FreeRTOS + * + */ + +#include "FreeRTOS.h" +#include "task.h" + +/* Constant used for context switch macro when we require the interrupt + * enable state to be unchanged when the interrupted task is switched back in. */ +#define portINTERRUPTS_UNCHANGED 0x00 + +BaseType_t xPortStartScheduler( void ) +{ + return pdTRUE; +} + +StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack, + TaskFunction_t pxCode, + void * pvParameters ) +{ + return NULL; +} + +void vPortEndScheduler( void ) +{ + /* It is unlikely that the scheduler for the PIC port will get stopped + * once running. If required disable the tick interrupt here, then return + * to xPortStartScheduler(). */ +} + +void vPortYield( void ) +{ + + /* Save the current Context */ + /* Switch to the highest priority task that is ready to run. */ + vTaskSwitchContext(); + /* Start executing the task we have just switched to. */ +} + +static void prvTickISR( void ) +{ + /* Interrupts must have been enabled for the ISR to fire, so we have to + * save the context with interrupts enabled. */ + + /* Maintain the tick count. */ + if( xTaskIncrementTick() != pdFALSE ) + { + /* Switch to the highest priority task that is ready to run. */ + vTaskSwitchContext(); + } + + /* start executing the new task */ +} diff --git a/portable/template/portmacro.h b/portable/template/portmacro.h new file mode 100644 index 000000000..1a986f6a0 --- /dev/null +++ b/portable/template/portmacro.h @@ -0,0 +1,75 @@ +#ifndef PORTMACRO_H +#define PORTMACRO_H + +/*----------------------------------------------------------- + * Port specific definitions. + * + * The settings in this file configure FreeRTOS correctly for the + * given hardware and compiler. + * + * These settings should not be altered. + *----------------------------------------------------------- + */ + +/* Type definitions. */ +#define portCHAR char +#define portFLOAT float +#define portDOUBLE double +#define portLONG long +#define portSHORT int +#define portSTACK_TYPE uint8_t +#define portBASE_TYPE char + +#define portSTACK_GROWTH ( -1 ) +#define portBYTE_ALIGNMENT 4 +#define portPOINTER_SIZE_TYPE size_t +typedef portSTACK_TYPE StackType_t; +typedef signed char BaseType_t; +typedef unsigned char UBaseType_t; + +#if ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_16_BITS ) + typedef uint16_t TickType_t; + #define portMAX_DELAY ( TickType_t ) 0xffff +#elif ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_32_BITS ) + typedef uint32_t TickType_t; + #define portMAX_DELAY ( TickType_t ) 0xffffffffUL +#else + #error configTICK_TYPE_WIDTH_IN_BITS set to unsupported tick type width. +#endif + +/* Architecture specific optimisations. */ +#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION + #define configUSE_PORT_OPTIMISED_TASK_SELECTION 1 +#endif + +#if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1 + +/* Check the configuration. */ + #if ( configMAX_PRIORITIES > 32 ) + #error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32. It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice. + #endif + +/* Store/clear the ready priorities in a bit map. */ + #define portRECORD_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) |= ( 1UL << ( uxPriority ) ) + #define portRESET_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) &= ~( 1UL << ( uxPriority ) ) + +/*-----------------------------------------------------------*/ + + #define portGET_HIGHEST_PRIORITY( uxTopPriority, uxReadyPriorities ) + +#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */ + +#define portDISABLE_INTERRUPTS() { /* Disable the interrupts */ } +#define portENABLE_INTERRUPTS() { /* Enable the interrupts */ } + +#define portENTER_CRITICAL() { /* preserve current interrupt state and then disable interrupts */ } +#define portEXIT_CRITICAL() { /* restore previously preserved interrupt state */ } + +extern void vPortYield( void ); +#define portYIELD() vPortYield() + +/* Task function macros as described on the FreeRTOS.org WEB site. */ +#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void * pvParameters ) +#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void * pvParameters ) + +#endif /* PORTMACRO_H */ \ No newline at end of file