mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-19 21:11:57 -04:00
Kernel changes:
+ Support tickless idle when configUSE_PREEMPTION is 0 (previously tickless idle was only supported when the pre-emptive scheduler was being used). + If a stack was statically allocated, then don't try freeing it if the TCB cannot be allocated. + Remove use of INCLUDE_xEventGroupsSetBitsFromISR() pre-processor macro, as it was not tested anyway. Demo app changes: + Updated SAM4L Atmel Studio project to use Atmel Studio 7.
This commit is contained in:
parent
5e9787978c
commit
e9561c946c
|
@ -165,7 +165,7 @@ extern int uiInEventGroupSetBitsFromISR;
|
||||||
#include "trcUser.h"
|
#include "trcUser.h"
|
||||||
|
|
||||||
#if (INCLUDE_NEW_TIME_EVENTS == 1 && configUSE_TICKLESS_IDLE != 0)
|
#if (INCLUDE_NEW_TIME_EVENTS == 1 && configUSE_TICKLESS_IDLE != 0)
|
||||||
#error "NewTime events can not be used in combination with tickless idle!"
|
#error "NewTime events can not be used in combination with tickless idle!"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Initialization of the object property table */
|
/* Initialization of the object property table */
|
||||||
|
|
|
@ -124,7 +124,7 @@ to exclude the API function. */
|
||||||
#define INCLUDE_vTaskDelayUntil 1
|
#define INCLUDE_vTaskDelayUntil 1
|
||||||
#define INCLUDE_vTaskDelay 1
|
#define INCLUDE_vTaskDelay 1
|
||||||
#define INCLUDE_eTaskGetState 1
|
#define INCLUDE_eTaskGetState 1
|
||||||
#define INCLUDE_xEventGroupSetBitFromISR 1
|
#define INCLUDE_xEventGroupSetBitsFromISR 1
|
||||||
#define INCLUDE_xTimerPendFunctionCall 1
|
#define INCLUDE_xTimerPendFunctionCall 1
|
||||||
|
|
||||||
/* This demo makes use of one or more example stats formatting functions. These
|
/* This demo makes use of one or more example stats formatting functions. These
|
||||||
|
|
|
@ -124,7 +124,7 @@ to exclude the API function. */
|
||||||
#define INCLUDE_vTaskDelayUntil 1
|
#define INCLUDE_vTaskDelayUntil 1
|
||||||
#define INCLUDE_vTaskDelay 1
|
#define INCLUDE_vTaskDelay 1
|
||||||
#define INCLUDE_eTaskGetState 1
|
#define INCLUDE_eTaskGetState 1
|
||||||
#define INCLUDE_xEventGroupSetBitFromISR 1
|
#define INCLUDE_xEventGroupSetBitsFromISR 1
|
||||||
#define INCLUDE_xTimerPendFunctionCall 1
|
#define INCLUDE_xTimerPendFunctionCall 1
|
||||||
|
|
||||||
/* This demo makes use of one or more example stats formatting functions. These
|
/* This demo makes use of one or more example stats formatting functions. These
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<SchemaVersion>2.0</SchemaVersion>
|
<SchemaVersion>2.0</SchemaVersion>
|
||||||
<ProjectVersion>6.2</ProjectVersion>
|
<ProjectVersion>7.0</ProjectVersion>
|
||||||
<ToolchainName>com.Atmel.ARMGCC.C</ToolchainName>
|
<ToolchainName>com.Atmel.ARMGCC.C</ToolchainName>
|
||||||
<ProjectGuid>{dfc77570-bc67-4ee7-8143-c34e75167169}</ProjectGuid>
|
<ProjectGuid>{dfc77570-bc67-4ee7-8143-c34e75167169}</ProjectGuid>
|
||||||
<avrdevice>ATSAM4LC4C</avrdevice>
|
<avrdevice>ATSAM4LC4C</avrdevice>
|
||||||
|
@ -130,9 +130,9 @@
|
||||||
<documentation help="" />
|
<documentation help="" />
|
||||||
<offline-documentation help="" />
|
<offline-documentation help="" />
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.6.0" />
|
<content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.18.1" />
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</framework-data>
|
</framework-data>
|
||||||
</AsfFrameworkConfig>
|
</AsfFrameworkConfig>
|
||||||
<avrtoolinterface>SWD</avrtoolinterface>
|
<avrtoolinterface>SWD</avrtoolinterface>
|
||||||
<avrtool>com.atmel.avrdbg.tool.samice</avrtool>
|
<avrtool>com.atmel.avrdbg.tool.samice</avrtool>
|
||||||
|
@ -166,6 +166,8 @@
|
||||||
<RamSnippetAddress>0x20000000</RamSnippetAddress>
|
<RamSnippetAddress>0x20000000</RamSnippetAddress>
|
||||||
<UncachedRange />
|
<UncachedRange />
|
||||||
<BootSegment>2</BootSegment>
|
<BootSegment>2</BootSegment>
|
||||||
|
<preserveEEPROM>true</preserveEEPROM>
|
||||||
|
<ExternalProgrammingToolCommand />
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||||
<ToolchainSettings>
|
<ToolchainSettings>
|
||||||
|
@ -228,11 +230,6 @@
|
||||||
<armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>
|
<armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>
|
||||||
<armgcc.linker.miscellaneous.LinkerFlags>-T../src/asf/sam/utils/linker_scripts/sam4l/sam4l4/gcc/flash.ld -Wl,--cref -Wl,--entry=Reset_Handler -mthumb</armgcc.linker.miscellaneous.LinkerFlags>
|
<armgcc.linker.miscellaneous.LinkerFlags>-T../src/asf/sam/utils/linker_scripts/sam4l/sam4l4/gcc/flash.ld -Wl,--cref -Wl,--entry=Reset_Handler -mthumb</armgcc.linker.miscellaneous.LinkerFlags>
|
||||||
<armgcc.assembler.general.AssemblerFlags>-D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.assembler.general.AssemblerFlags>
|
<armgcc.assembler.general.AssemblerFlags>-D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.assembler.general.AssemblerFlags>
|
||||||
<armgcc.assembler.general.IncludePaths>
|
|
||||||
<ListValues>
|
|
||||||
<Value>../src/ASF/sam/drivers/eic</Value>
|
|
||||||
</ListValues>
|
|
||||||
</armgcc.assembler.general.IncludePaths>
|
|
||||||
<armgcc.preprocessingassembler.general.AssemblerFlags>-DARM_MATH_CM4=true -DBOARD=SAM4L_EK -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.preprocessingassembler.general.AssemblerFlags>
|
<armgcc.preprocessingassembler.general.AssemblerFlags>-DARM_MATH_CM4=true -DBOARD=SAM4L_EK -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.preprocessingassembler.general.AssemblerFlags>
|
||||||
<armgcc.preprocessingassembler.general.IncludePaths>
|
<armgcc.preprocessingassembler.general.IncludePaths>
|
||||||
<ListValues>
|
<ListValues>
|
||||||
|
@ -315,7 +312,7 @@
|
||||||
<armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
|
<armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
|
||||||
<armgcc.compiler.optimization.DebugLevel>Maximum (-g3)</armgcc.compiler.optimization.DebugLevel>
|
<armgcc.compiler.optimization.DebugLevel>Maximum (-g3)</armgcc.compiler.optimization.DebugLevel>
|
||||||
<armgcc.compiler.warnings.AllWarnings>True</armgcc.compiler.warnings.AllWarnings>
|
<armgcc.compiler.warnings.AllWarnings>True</armgcc.compiler.warnings.AllWarnings>
|
||||||
<armgcc.compiler.miscellaneous.OtherFlags>-std=gnu99 -Wmissing-field-initializers -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.compiler.miscellaneous.OtherFlags>
|
<armgcc.compiler.miscellaneous.OtherFlags>-std=gnu99 -Wmissing-field-initializers -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -Wno-attributes</armgcc.compiler.miscellaneous.OtherFlags>
|
||||||
<armgcc.linker.libraries.Libraries>
|
<armgcc.linker.libraries.Libraries>
|
||||||
<ListValues>
|
<ListValues>
|
||||||
<Value>libm</Value>
|
<Value>libm</Value>
|
||||||
|
@ -328,13 +325,9 @@
|
||||||
</ListValues>
|
</ListValues>
|
||||||
</armgcc.linker.libraries.LibrarySearchPaths>
|
</armgcc.linker.libraries.LibrarySearchPaths>
|
||||||
<armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>
|
<armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>
|
||||||
|
<armgcc.linker.memorysettings.ExternalRAM />
|
||||||
<armgcc.linker.miscellaneous.LinkerFlags>-T../src/asf/sam/utils/linker_scripts/sam4l/sam4l4/gcc/flash.ld -Wl,--cref -Wl,--entry=Reset_Handler -mthumb</armgcc.linker.miscellaneous.LinkerFlags>
|
<armgcc.linker.miscellaneous.LinkerFlags>-T../src/asf/sam/utils/linker_scripts/sam4l/sam4l4/gcc/flash.ld -Wl,--cref -Wl,--entry=Reset_Handler -mthumb</armgcc.linker.miscellaneous.LinkerFlags>
|
||||||
<armgcc.assembler.general.AssemblerFlags>-D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.assembler.general.AssemblerFlags>
|
<armgcc.assembler.general.AssemblerFlags>-D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.assembler.general.AssemblerFlags>
|
||||||
<armgcc.assembler.general.IncludePaths>
|
|
||||||
<ListValues>
|
|
||||||
<Value>../src/ASF/sam/drivers/eic</Value>
|
|
||||||
</ListValues>
|
|
||||||
</armgcc.assembler.general.IncludePaths>
|
|
||||||
<armgcc.assembler.debugging.DebugLevel>Default (-g)</armgcc.assembler.debugging.DebugLevel>
|
<armgcc.assembler.debugging.DebugLevel>Default (-g)</armgcc.assembler.debugging.DebugLevel>
|
||||||
<armgcc.preprocessingassembler.general.AssemblerFlags>-DARM_MATH_CM4=true -DBOARD=SAM4L_EK -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.preprocessingassembler.general.AssemblerFlags>
|
<armgcc.preprocessingassembler.general.AssemblerFlags>-DARM_MATH_CM4=true -DBOARD=SAM4L_EK -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__ -D__ATSAM4LC4C__</armgcc.preprocessingassembler.general.AssemblerFlags>
|
||||||
<armgcc.preprocessingassembler.general.IncludePaths>
|
<armgcc.preprocessingassembler.general.IncludePaths>
|
||||||
|
|
|
@ -156,6 +156,7 @@
|
||||||
#if defined(__CC_ARM)
|
#if defined(__CC_ARM)
|
||||||
# define __always_inline __forceinline
|
# define __always_inline __forceinline
|
||||||
#elif (defined __GNUC__)
|
#elif (defined __GNUC__)
|
||||||
|
# undef __always_inline /* remove warning of the macro being redefined. */
|
||||||
# define __always_inline inline __attribute__((__always_inline__))
|
# define __always_inline inline __attribute__((__always_inline__))
|
||||||
#elif (defined __ICCARM__)
|
#elif (defined __ICCARM__)
|
||||||
# define __always_inline _Pragma("inline=forced")
|
# define __always_inline _Pragma("inline=forced")
|
||||||
|
|
|
@ -116,6 +116,7 @@ or 0 to run the more comprehensive test and demo application. */
|
||||||
#define configUSE_MALLOC_FAILED_HOOK 1
|
#define configUSE_MALLOC_FAILED_HOOK 1
|
||||||
#define configUSE_APPLICATION_TASK_TAG 0
|
#define configUSE_APPLICATION_TASK_TAG 0
|
||||||
#define configUSE_COUNTING_SEMAPHORES 1
|
#define configUSE_COUNTING_SEMAPHORES 1
|
||||||
|
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
|
||||||
|
|
||||||
/* Co-routine definitions. */
|
/* Co-routine definitions. */
|
||||||
#define configUSE_CO_ROUTINES 0
|
#define configUSE_CO_ROUTINES 0
|
||||||
|
|
|
@ -131,7 +131,7 @@ int main( void )
|
||||||
|
|
||||||
/* The configCREATE_LOW_POWER_DEMO setting is described at the top of
|
/* The configCREATE_LOW_POWER_DEMO setting is described at the top of
|
||||||
this file. */
|
this file. */
|
||||||
#if configCREATE_LOW_POWER_DEMO == 1
|
#if( configCREATE_LOW_POWER_DEMO == 1 )
|
||||||
{
|
{
|
||||||
main_low_power();
|
main_low_power();
|
||||||
}
|
}
|
||||||
|
|
|
@ -125,7 +125,7 @@ to exclude the API function. */
|
||||||
#define INCLUDE_vTaskDelayUntil 1
|
#define INCLUDE_vTaskDelayUntil 1
|
||||||
#define INCLUDE_vTaskDelay 1
|
#define INCLUDE_vTaskDelay 1
|
||||||
#define INCLUDE_eTaskGetState 1
|
#define INCLUDE_eTaskGetState 1
|
||||||
#define INCLUDE_xEventGroupSetBitFromISR 1
|
#define INCLUDE_xEventGroupSetBitsFromISR 1
|
||||||
#define INCLUDE_xTimerPendFunctionCall 1
|
#define INCLUDE_xTimerPendFunctionCall 1
|
||||||
|
|
||||||
/* This demo makes use of one or more example stats formatting functions. These
|
/* This demo makes use of one or more example stats formatting functions. These
|
||||||
|
|
|
@ -144,7 +144,7 @@ left at 1 with no impact on the code size. */
|
||||||
#define INCLUDE_xTaskGetIdleTaskHandle 1
|
#define INCLUDE_xTaskGetIdleTaskHandle 1
|
||||||
#define INCLUDE_xQueueGetMutexHolder 1
|
#define INCLUDE_xQueueGetMutexHolder 1
|
||||||
#define INCLUDE_eTaskGetState 1
|
#define INCLUDE_eTaskGetState 1
|
||||||
#define INCLUDE_xEventGroupSetBitFromISR 1
|
#define INCLUDE_xEventGroupSetBitsFromISR 1
|
||||||
#define INCLUDE_xTimerPendFunctionCall 1
|
#define INCLUDE_xTimerPendFunctionCall 1
|
||||||
#define INCLUDE_pcTaskGetTaskName 1
|
#define INCLUDE_pcTaskGetTaskName 1
|
||||||
|
|
||||||
|
|
|
@ -402,7 +402,7 @@ proc generate {os_handle} {
|
||||||
puts $config_file "#define INCLUDE_xTaskGetIdleTaskHandle 1"
|
puts $config_file "#define INCLUDE_xTaskGetIdleTaskHandle 1"
|
||||||
puts $config_file "#define INCLUDE_xQueueGetMutexHolder 1"
|
puts $config_file "#define INCLUDE_xQueueGetMutexHolder 1"
|
||||||
puts $config_file "#define INCLUDE_eTaskGetState 1"
|
puts $config_file "#define INCLUDE_eTaskGetState 1"
|
||||||
puts $config_file "#define INCLUDE_xEventGroupSetBitFromISR 1"
|
puts $config_file "#define INCLUDE_xEventGroupSetBitsFromISR 1"
|
||||||
puts $config_file "#define INCLUDE_xTimerPendFunctionCall 1"
|
puts $config_file "#define INCLUDE_xTimerPendFunctionCall 1"
|
||||||
puts $config_file "#define INCLUDE_pcTaskGetTaskName 1"
|
puts $config_file "#define INCLUDE_pcTaskGetTaskName 1"
|
||||||
puts $config_file "#define INCLUDE_xTaskResumeFromISR 1"
|
puts $config_file "#define INCLUDE_xTaskResumeFromISR 1"
|
||||||
|
|
|
@ -87,14 +87,6 @@ header files above, but not in this file, in order to generate the correct
|
||||||
privileged Vs unprivileged linkage and placement. */
|
privileged Vs unprivileged linkage and placement. */
|
||||||
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE /*lint !e961 !e750. */
|
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE /*lint !e961 !e750. */
|
||||||
|
|
||||||
#if ( INCLUDE_xEventGroupSetBitFromISR == 1 ) && ( configUSE_TIMERS == 0 )
|
|
||||||
#error configUSE_TIMERS must be set to 1 to make the xEventGroupSetBitFromISR() function available.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if ( INCLUDE_xEventGroupSetBitFromISR == 1 ) && ( INCLUDE_xTimerPendFunctionCall == 0 )
|
|
||||||
#error INCLUDE_xTimerPendFunctionCall must also be set to one to make the xEventGroupSetBitFromISR() function available.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The following bit fields convey control information in a task's event list
|
/* The following bit fields convey control information in a task's event list
|
||||||
item value. It is important they don't clash with the
|
item value. It is important they don't clash with the
|
||||||
taskEVENT_LIST_ITEM_VALUE_IN_USE definition. */
|
taskEVENT_LIST_ITEM_VALUE_IN_USE definition. */
|
||||||
|
|
|
@ -247,10 +247,6 @@ extern "C" {
|
||||||
#define INCLUDE_xTaskResumeFromISR 1
|
#define INCLUDE_xTaskResumeFromISR 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef INCLUDE_xEventGroupSetBitFromISR
|
|
||||||
#define INCLUDE_xEventGroupSetBitFromISR 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef INCLUDE_xTimerPendFunctionCall
|
#ifndef INCLUDE_xTimerPendFunctionCall
|
||||||
#define INCLUDE_xTimerPendFunctionCall 0
|
#define INCLUDE_xTimerPendFunctionCall 0
|
||||||
#endif
|
#endif
|
||||||
|
@ -405,6 +401,10 @@ extern "C" {
|
||||||
#define traceMOVED_TASK_TO_READY_STATE( pxTCB )
|
#define traceMOVED_TASK_TO_READY_STATE( pxTCB )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef tracePOST_MOVED_TASK_TO_READY_STATE
|
||||||
|
#define tracePOST_MOVED_TASK_TO_READY_STATE( pxTCB )
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef traceQUEUE_CREATE
|
#ifndef traceQUEUE_CREATE
|
||||||
#define traceQUEUE_CREATE( pxNewQueue )
|
#define traceQUEUE_CREATE( pxNewQueue )
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -376,7 +376,7 @@ EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</pre>
|
</pre>
|
||||||
* \defgroup xEventGroupSetBitsFromISR xEventGroupSetBitsFromISR
|
* \defgroup xEventGroupClearBitsFromISR xEventGroupClearBitsFromISR
|
||||||
* \ingroup EventGroup
|
* \ingroup EventGroup
|
||||||
*/
|
*/
|
||||||
#if( configUSE_TRACE_FACILITY == 1 )
|
#if( configUSE_TRACE_FACILITY == 1 )
|
||||||
|
@ -470,7 +470,7 @@ EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_
|
||||||
* Setting bits in an event group is not a deterministic operation because there
|
* Setting bits in an event group is not a deterministic operation because there
|
||||||
* are an unknown number of tasks that may be waiting for the bit or bits being
|
* are an unknown number of tasks that may be waiting for the bit or bits being
|
||||||
* set. FreeRTOS does not allow nondeterministic operations to be performed in
|
* set. FreeRTOS does not allow nondeterministic operations to be performed in
|
||||||
* interrupts or from critical sections. Therefore xEventGroupSetBitFromISR()
|
* interrupts or from critical sections. Therefore xEventGroupSetBitsFromISR()
|
||||||
* sends a message to the timer task to have the set operation performed in the
|
* sends a message to the timer task to have the set operation performed in the
|
||||||
* context of the timer task - where a scheduler lock is used in place of a
|
* context of the timer task - where a scheduler lock is used in place of a
|
||||||
* critical section.
|
* critical section.
|
||||||
|
|
|
@ -107,6 +107,7 @@ typedef void (*TaskFunction_t)( void * );
|
||||||
itself. */
|
itself. */
|
||||||
#define pdFREERTOS_ERRNO_NONE 0 /* No errors */
|
#define pdFREERTOS_ERRNO_NONE 0 /* No errors */
|
||||||
#define pdFREERTOS_ERRNO_ENOENT 2 /* No such file or directory */
|
#define pdFREERTOS_ERRNO_ENOENT 2 /* No such file or directory */
|
||||||
|
#define pdFREERTOS_ERRNO_EINTR 4 /* Interrupted system call */
|
||||||
#define pdFREERTOS_ERRNO_EIO 5 /* I/O error */
|
#define pdFREERTOS_ERRNO_EIO 5 /* I/O error */
|
||||||
#define pdFREERTOS_ERRNO_ENXIO 6 /* No such device or address */
|
#define pdFREERTOS_ERRNO_ENXIO 6 /* No such device or address */
|
||||||
#define pdFREERTOS_ERRNO_EBADF 9 /* Bad file number */
|
#define pdFREERTOS_ERRNO_EBADF 9 /* Bad file number */
|
||||||
|
|
|
@ -118,6 +118,7 @@ typedef unsigned long UBaseType_t;
|
||||||
/* Simulated interrupts return pdFALSE if no context switch should be performed,
|
/* Simulated interrupts return pdFALSE if no context switch should be performed,
|
||||||
or a non-zero number if a context switch should be performed. */
|
or a non-zero number if a context switch should be performed. */
|
||||||
#define portYIELD_FROM_ISR( x ) return x
|
#define portYIELD_FROM_ISR( x ) return x
|
||||||
|
#define portEND_SWITCHING_ISR( x ) portYIELD_FROM_ISR( ( x ) )
|
||||||
|
|
||||||
void vPortCloseRunningThread( void *pvTaskToDelete, volatile BaseType_t *pxPendYield );
|
void vPortCloseRunningThread( void *pvTaskToDelete, volatile BaseType_t *pxPendYield );
|
||||||
void vPortDeleteThread( void *pvThreadToDelete );
|
void vPortDeleteThread( void *pvThreadToDelete );
|
||||||
|
|
|
@ -185,6 +185,8 @@ not necessary for to use this port. They are defined so the common demo files
|
||||||
/* portNOP() is not required by this port. */
|
/* portNOP() is not required by this port. */
|
||||||
#define portNOP()
|
#define portNOP()
|
||||||
|
|
||||||
|
#define portINLINE __inline
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -198,6 +198,8 @@ not necessary for to use this port. They are defined so the common demo files
|
||||||
/* portNOP() is not required by this port. */
|
/* portNOP() is not required by this port. */
|
||||||
#define portNOP()
|
#define portNOP()
|
||||||
|
|
||||||
|
#define portINLINE __inline
|
||||||
|
|
||||||
#ifndef portFORCE_INLINE
|
#ifndef portFORCE_INLINE
|
||||||
#define portFORCE_INLINE __forceinline
|
#define portFORCE_INLINE __forceinline
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -202,6 +202,8 @@ not necessary for to use this port. They are defined so the common demo files
|
||||||
#define portFORCE_INLINE __forceinline
|
#define portFORCE_INLINE __forceinline
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define portINLINE __inline
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static portFORCE_INLINE void vPortSetBASEPRI( uint32_t ulBASEPRI )
|
static portFORCE_INLINE void vPortSetBASEPRI( uint32_t ulBASEPRI )
|
||||||
|
|
|
@ -11,9 +11,9 @@ microcontroller or compiler.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
For example, if you are interested in the GCC port for the ATMega323
|
For example, if you are interested in the [compiler] port for the [architecture]
|
||||||
microcontroller then the port specific files are contained in
|
microcontroller, then the port specific files are contained in
|
||||||
FreeRTOS/Source/Portable/GCC/ATMega323 directory. If this is the only
|
FreeRTOS/Source/Portable/[compiler]/[architecture] directory. If this is the
|
||||||
port you are interested in then all the other directories can be
|
only port you are interested in then all the other directories can be
|
||||||
ignored.
|
ignored.
|
||||||
|
|
||||||
|
|
|
@ -341,7 +341,7 @@ PRIVILEGED_DATA static volatile UBaseType_t uxSchedulerSuspended = ( UBaseType_t
|
||||||
{ \
|
{ \
|
||||||
UBaseType_t uxTopPriority; \
|
UBaseType_t uxTopPriority; \
|
||||||
\
|
\
|
||||||
/* Find the highest priority queue that contains ready tasks. */ \
|
/* Find the highest priority list that contains ready tasks. */ \
|
||||||
portGET_HIGHEST_PRIORITY( uxTopPriority, uxTopReadyPriority ); \
|
portGET_HIGHEST_PRIORITY( uxTopPriority, uxTopReadyPriority ); \
|
||||||
configASSERT( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ uxTopPriority ] ) ) > 0 ); \
|
configASSERT( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ uxTopPriority ] ) ) > 0 ); \
|
||||||
listGET_OWNER_OF_NEXT_ENTRY( pxCurrentTCB, &( pxReadyTasksLists[ uxTopPriority ] ) ); \
|
listGET_OWNER_OF_NEXT_ENTRY( pxCurrentTCB, &( pxReadyTasksLists[ uxTopPriority ] ) ); \
|
||||||
|
@ -389,7 +389,8 @@ count overflows. */
|
||||||
#define prvAddTaskToReadyList( pxTCB ) \
|
#define prvAddTaskToReadyList( pxTCB ) \
|
||||||
traceMOVED_TASK_TO_READY_STATE( pxTCB ); \
|
traceMOVED_TASK_TO_READY_STATE( pxTCB ); \
|
||||||
taskRECORD_READY_PRIORITY( ( pxTCB )->uxPriority ); \
|
taskRECORD_READY_PRIORITY( ( pxTCB )->uxPriority ); \
|
||||||
vListInsertEnd( &( pxReadyTasksLists[ ( pxTCB )->uxPriority ] ), &( ( pxTCB )->xGenericListItem ) )
|
vListInsertEnd( &( pxReadyTasksLists[ ( pxTCB )->uxPriority ] ), &( ( pxTCB )->xGenericListItem ) ); \
|
||||||
|
tracePOST_MOVED_TASK_TO_READY_STATE( pxTCB )
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1645,6 +1646,34 @@ void vTaskSuspendAll( void )
|
||||||
static TickType_t prvGetExpectedIdleTime( void )
|
static TickType_t prvGetExpectedIdleTime( void )
|
||||||
{
|
{
|
||||||
TickType_t xReturn;
|
TickType_t xReturn;
|
||||||
|
UBaseType_t uxHigherPriorityReadyTasks = pdFALSE;
|
||||||
|
|
||||||
|
/* uxHigherPriorityReadyTasks takes care of the case where
|
||||||
|
configUSE_PREEMPTION is 0, so there may be tasks above the idle priority
|
||||||
|
task that are in the Ready state, even though the idle task is
|
||||||
|
running. */
|
||||||
|
#if( configUSE_PORT_OPTIMISED_TASK_SELECTION == 0 )
|
||||||
|
{
|
||||||
|
if( uxTopReadyPriority > tskIDLE_PRIORITY )
|
||||||
|
{
|
||||||
|
uxHigherPriorityReadyTasks = pdTRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
{
|
||||||
|
const UBaseType_t uxLeastSignificantBit = ( UBaseType_t ) 0x01;
|
||||||
|
|
||||||
|
/* When port optimised task selection is used the uxTopReadyPriority
|
||||||
|
variable is used as a bit map. If bits other than the least
|
||||||
|
significant bit are set then there are tasks that have a priority
|
||||||
|
above the idle priority that are in the Ready state. This takes
|
||||||
|
care of the case where the co-operative scheduler is in use. */
|
||||||
|
if( uxTopReadyPriority > uxLeastSignificantBit )
|
||||||
|
{
|
||||||
|
uxHigherPriorityReadyTasks = pdTRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if( pxCurrentTCB->uxPriority > tskIDLE_PRIORITY )
|
if( pxCurrentTCB->uxPriority > tskIDLE_PRIORITY )
|
||||||
{
|
{
|
||||||
|
@ -1657,6 +1686,13 @@ void vTaskSuspendAll( void )
|
||||||
processed. */
|
processed. */
|
||||||
xReturn = 0;
|
xReturn = 0;
|
||||||
}
|
}
|
||||||
|
else if( uxHigherPriorityReadyTasks != pdFALSE )
|
||||||
|
{
|
||||||
|
/* There are tasks in the Ready state that have a priority above the
|
||||||
|
idle priority. This path can only be reached if
|
||||||
|
configUSE_PREEMPTION is 0. */
|
||||||
|
xReturn = 0;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
xReturn = xNextTaskUnblockTime - xTickCount;
|
xReturn = xNextTaskUnblockTime - xTickCount;
|
||||||
|
@ -3148,9 +3184,12 @@ TCB_t *pxNewTCB;
|
||||||
{
|
{
|
||||||
/* The stack cannot be used as the TCB was not created. Free it
|
/* The stack cannot be used as the TCB was not created. Free it
|
||||||
again. */
|
again. */
|
||||||
|
if( puxStackBuffer == NULL )
|
||||||
|
{
|
||||||
vPortFree( pxStack );
|
vPortFree( pxStack );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pxNewTCB = NULL;
|
pxNewTCB = NULL;
|
||||||
|
|
Loading…
Reference in a new issue