]> begriffs open source - freertos/log
freertos
2 years agoParanthesize expression-like macro (#668)
tcpluess [Fri, 28 Apr 2023 21:05:56 +0000 (23:05 +0200)]
Paranthesize expression-like macro (#668)

2 years agotree-wide: Unify formatting of __cplusplus ifdefs
Paul Bartell [Thu, 20 Apr 2023 19:46:00 +0000 (12:46 -0700)]
tree-wide: Unify formatting of __cplusplus ifdefs

2 years agoportable/ARM_CM0: Add xPortIsInsideInterrupt
Paul Bartell [Tue, 18 Apr 2023 21:43:29 +0000 (14:43 -0700)]
portable/ARM_CM0: Add xPortIsInsideInterrupt

Add missing xPortIsInsideInterrupt function to Cortex-M0 port.

2 years agoFormat portmacro.h in arm CM0 ports
Paul Bartell [Tue, 18 Apr 2023 19:01:49 +0000 (12:01 -0700)]
Format portmacro.h in arm CM0 ports

2 years agoARMv7M: Adjust implemented priority bit assertions (#665)
Paul Bartell [Thu, 20 Apr 2023 05:24:54 +0000 (22:24 -0700)]
ARMv7M: Adjust implemented priority bit assertions (#665)

Adjust assertions related to the CMSIS __NVIC_PRIO_BITS and FreeRTOS
configPRIO_BITS configuration macros such that these macros specify the
minimum number of implemented priority bits supported by a config
build rather than the exact number of implemented priority bits.

Related to Qemu issue #1122

2 years agofix conversion warning (#658)
Vo Trung Chi [Tue, 4 Apr 2023 15:10:54 +0000 (22:10 +0700)]
fix conversion warning (#658)

FreeRTOS-Kernel/portable/GCC/ARM_CM4F/port.c:399:41: error: conversion from 'uint32_t' {aka 'long unsigned int'} to 'uint8_t' {aka 'unsigned char'} may change value [-Werror=conversion]

Signed-off-by: Vo Trung Chi <chi.votrung@vn.bosch.com>
2 years agoadd a missing comma (#651)
Nicolas [Wed, 29 Mar 2023 13:23:45 +0000 (15:23 +0200)]
add a missing comma (#651)

2 years agoOnly add alignment padding when needed (#650)
Gaurav-Aggarwal-AWS [Tue, 28 Mar 2023 11:31:37 +0000 (17:01 +0530)]
Only add alignment padding when needed (#650)

Heap 4 and Heap 5 add some padding to ensure that the allocated blocks
are always aligned to portBYTE_ALIGNMENT bytes. The code until now was
adding padding always even if the resulting block was already aligned.
This commits updates the code to only add padding if the resulting block
is not aligned.

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
2 years agoRemove C90 requirement from CMakeLists (#649)
Gaurav-Aggarwal-AWS [Tue, 28 Mar 2023 08:58:47 +0000 (14:28 +0530)]
Remove C90 requirement from CMakeLists (#649)

This is needed as it is breaking projects - https://forums.freertos.org/t/freertos-gcc-cmake/16984

We will re-evaluate and accordingly add this later.

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
2 years agoCortex-M Assert when NVIC implements 8 PRIO bits (#639)
kar-rahul-aws [Thu, 23 Mar 2023 09:36:33 +0000 (15:06 +0530)]
Cortex-M Assert when NVIC implements 8 PRIO bits (#639)

* Cortex-M Assert when NVIC implements 8 PRIO bits

* Fix CM3 ports

* Fix ARM_CM3_MPU

* Fix ARM CM3

* Fix ARM_CM4_MPU

* Fix ARM_CM4

* Fix GCC ARM_CM7

* Fix IAR ARM ports

* Uncrustify changes

* Fix MikroC_ARM_CM4F port

* Fix MikroC_ARM_CM4F port-(2)

* Fix RVDS ARM ports

* Revert changes for Tasking/ARM_CM4F port

* Revert changes for Tasking/ARM_CM4F port-(2)

* Update port.c

Fix GCC/ARM_CM4F port

* Update port.c

* update GCC\ARM_CM4F port

* update port.c

* Assert to check configMAX_SYSCALL_INTERRUPT_PRIORITY is set to higher priority

* Fix merge error: remove duplicate code

* Fix typos

---------

Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com>
Co-authored-by: Ubuntu <ubuntu@ip-172-31-17-174.ec2.internal>
2 years agoAdd functions to get the buffers of statically created objects (#641)
Darian [Wed, 22 Mar 2023 22:27:57 +0000 (06:27 +0800)]
Add functions to get the buffers of statically created objects (#641)

Added various ...GetStaticBuffer() functions to get the buffers of statically
created objects.
---------
Co-authored-by: Paul Bartell <pbartell@amazon.com>
Co-authored-by: Nikhil Kamath <110539926+amazonKamath@users.noreply.github.com>
Co-authored-by: Gaurav Aggarwal <aggarg@amazon.com>
2 years agoRun kernel demos and unit tests for PR changes (#645)
Gaurav-Aggarwal-AWS [Fri, 17 Mar 2023 02:52:34 +0000 (08:22 +0530)]
Run kernel demos and unit tests for PR changes (#645)

* Run kernel demos and unit tests for PR changes

Kernel demos check builds multiple demos from FreeRTOS/FreeRTOS and
unit tests check runs unit tests in FreeRTOS/FreeRTOS. Both of these
checks currently use main branch of FreeRTOS-Kernel. This commits
updates these checks to use the changes in the PR.

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
* Do not specify PR SHA explicitly as that is default

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
* Remove explicit PR SHA from kernel checks

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
---------

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
2 years agoAdd missing FreeRTOS+ defines
Holden [Sat, 11 Mar 2023 17:34:15 +0000 (12:34 -0500)]
Add missing FreeRTOS+ defines

2 years agoFix freertos_kernel cmake property, Posix Port (#640)
Kody Stribrny [Tue, 7 Mar 2023 04:04:15 +0000 (20:04 -0800)]
Fix freertos_kernel cmake property, Posix Port (#640)

* Fix freertos_kernel cmake property, Posix Port

* Moves the `set_property()` call below the target definition in top level CMakeLists file
* Corrects billion value from `ULL` suffix (not C90 compliant) to `UL` suffix with cast to uint64_t

* Add blank line to CMakeLists.txt

2 years agoEnable building the GCC Cortex-R5 port without an FPU (#586)
Paul Bartell [Mon, 6 Mar 2023 16:19:28 +0000 (08:19 -0800)]
Enable building the GCC Cortex-R5 port without an FPU (#586)

* Ensure configUSE_TASK_FPU_SUPPORT option is set correctly

If one does enable the FPU of the Cortex-R5 processor, then the GCC
compiler will define the macro __ARM_FP. This can be used to ensure,
that the configUSE_TASK_FPU_SUPPORT is set accordingly.

* Enable the implementation of vPortTaskUsesFPU only if configUSE_TASK_FPU_SUPPORT is set to 1

* Remove error case in pxPortInitialiseStack

The case of configUSE_TASK_FPU_SUPPORT is 0 is now handled

* Enable access to FPU registers only if FPU is enabled

* Make minor formating changes

* Format ARM Cortex-R5 port

* Address review comments from @ChristosZosi

* Minor code review suggestions

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
---------

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
Co-authored-by: Christos Zosimidis <christos.zosimidis@gmail.com>
Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com>
Co-authored-by: Gaurav Aggarwal <aggarg@amazon.com>
2 years agoFix TLS and stack alignment when using picolibc (#637)
Keith Packard [Mon, 6 Mar 2023 06:29:39 +0000 (22:29 -0800)]
Fix TLS and stack alignment when using picolibc (#637)

Both the TLS block and stack must be correctly aligned when using
picolibc. The architecture stack alignment is represented by the
portBYTE_ALIGNMENT_MASK and the TLS block alignment is provided by the
Picolibc _tls_align() inline function for Picolibc version 1.8 and
above. For older versions of Picolibc, we'll assume that the TLS block
requires the same alignment as the stack.

For downward growing stacks, this requires aligning the start of the
TLS block to the maximum of the stack alignment and the TLS
alignment. With this, both the TLS block and stack will now be
correctly aligned.

For upward growing stacks, the two areas must be aligned
independently; the TLS block is aligned from the start of the stack,
then the tls space is allocated, and then the stack is aligned above
that.

It's probably useful to know here that the linker ensures that
variables within the TLS block are assigned offsets that match their
alignment requirements. If the TLS block itself is correctly aligned,
then everything within will also be.

I have only tested the downward growing stack branch of this patch.

Signed-off-by: Keith Packard <keithpac@amazon.com>
Co-authored-by: Keith Packard <keithpac@amazon.com>
Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com>
2 years agoadded portPOINTER_SIZE_TYPE and SIZE_MAX definition to PIC24/dsPIC port (#636)
Joseph Julicher [Sat, 4 Mar 2023 02:01:16 +0000 (19:01 -0700)]
added portPOINTER_SIZE_TYPE and SIZE_MAX definition to PIC24/dsPIC port (#636)

* added portPOINTER_SIZE_TYPE definition to PIC24/dsPIC port

* Added SIZE_MAX definition to PIC24/dsPIC33

2 years agoIntroduced code coverage status badge (#635)
Nikhil Kamath [Thu, 2 Mar 2023 18:06:57 +0000 (23:36 +0530)]
Introduced code coverage status badge (#635)

* Introduced code coverage status badge

* Trying to fix the URL checker issue

* Fix URL check

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
---------

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
Co-authored-by: Gaurav Aggarwal <aggarg@amazon.com>
Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com>
2 years agoInterrupt priority assert improvements for CM3/4/7 (#602)
Chris Copeland [Thu, 2 Mar 2023 17:49:56 +0000 (09:49 -0800)]
Interrupt priority assert improvements for CM3/4/7 (#602)

* Interrupt priority assert improvements for CM3/4/7

In the ARM_CM3, ARM_CM4, and ARM_CM7 ports, change the assertion that
`configMAX_SYSCALL_INTERRUPT_PRIORITY` is nonzero to account for the
number of priority bits implemented by the hardware.

Change these ports to also use the lowest priority for PendSV and
SysTick, ignoring `configKERNEL_INTERRUPT_PRIORITY`.

* Remove not needed configKERNEL_INTERRUPT_PRIORITY define

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
---------

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com>
Co-authored-by: Gaurav Aggarwal <aggarg@amazon.com>
2 years agoAdd Thread Local Storage (TLS) support using Picolibc functions (#343)
Keith Packard [Thu, 2 Mar 2023 16:26:04 +0000 (08:26 -0800)]
Add Thread Local Storage (TLS) support using Picolibc functions (#343)

* Pass top of stack to configINIT_TLS_BLOCK

Picolibc wants to allocate the per-task TLS block within the stack
segment, so it will need to modify the top of stack value. Pass the
pxTopOfStack variable to make this explicit.

Signed-off-by: Keith Packard <keithpac@amazon.com>
* Move newlib-specific definitions to separate file

This reduces the clutter in FreeRTOS.h caused by having newlib-specific
macros present there.

Signed-off-by: Keith Packard <keithpac@amazon.com>
* Make TLS code depend only on configUSE_C_RUNTIME_TLS_SUPPORT

Remove reference to configUSE_NEWLIB_REENTRANT as that only works
when using newlib. configUSE_C_RUNTIME_TLS_SUPPORT is always
set when configUSE_NEWLIB_REENTRANT is set, so using both was
redundant in that case.

Signed-off-by: Keith Packard <keithpac@amazon.com>
* portable-ARC: Adapt ARC support to use generalized TLS support

With generalized thread local storage (TLS) support present in the
core, the two ARC ports need to have the changes to the TCB mirrored
to them.

Signed-off-by: Keith Packard <keithpac@amazon.com>
* Add Thread Local Storage (TLS) support using Picolibc functions

This patch provides definitions of the general TLS support macros in
terms of the Picolibc TLS support functions.

Picolibc is normally configured to use TLS internally for all
variables that are intended to be task-local, so these changes are
necessary for picolibc to work correctly with FreeRTOS.

The picolibc helper functions rely on elements within the linker
script to arrange the TLS data in memory and define some symbols.
Applications wanting to use this mechanism will need changes in their
linker script when migrating to picolibc.

Signed-off-by: Keith Packard <keithpac@amazon.com>
---------

Signed-off-by: Keith Packard <keithpac@amazon.com>
Co-authored-by: Keith Packard <keithpac@amazon.com>
Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com>
2 years agoRemove C99 requirement from CMake file (#633)
Gaurav-Aggarwal-AWS [Thu, 2 Mar 2023 09:17:29 +0000 (14:47 +0530)]
Remove C99 requirement from CMake file (#633)

* Remove C99 requirement from CMake file

The kernel source is C89 compliant and does not need C99.

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
* Explicitly set C89 requirement for kernel

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
---------

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
2 years agoIntroduced Github Status Badge for Unit Tests (#634)
Nikhil Kamath [Tue, 28 Feb 2023 07:52:25 +0000 (13:22 +0530)]
Introduced Github Status Badge for Unit Tests (#634)

* Introduced Github Status Badge for Unit Tests

* Github status badge to point to latest run

* Github status badge UT points to latest results

* Fixed URL for Github Status badge

---------

Co-authored-by: kar-rahul-aws <118818625+kar-rahul-aws@users.noreply.github.com>
2 years agoCortex-M35P: Add Cortex-M35P port (#631)
Devaraj Ranganna [Tue, 28 Feb 2023 07:28:59 +0000 (07:28 +0000)]
Cortex-M35P: Add Cortex-M35P port (#631)

* Cortex-M35P: Add Cortex-M35P port

The Cortex-M35P support added to kernel. The port hasn't been
validated yet with TF-M. Hence TF-M support is not included in this
port.

Signed-off-by: Devaraj Ranganna <devaraj.ranganna@arm.com>
* Add portNORETURN to the newly added portmacro.h

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
---------

Signed-off-by: Devaraj Ranganna <devaraj.ranganna@arm.com>
Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com>
Co-authored-by: Gaurav Aggarwal <aggarg@amazon.com>
Co-authored-by: kar-rahul-aws <118818625+kar-rahul-aws@users.noreply.github.com>
2 years agoPOSIX port fixes (#626)
jacky309 [Mon, 27 Feb 2023 18:21:11 +0000 (19:21 +0100)]
POSIX port fixes (#626)

* Fix types in POSIX port

Use TaskFunction_t and StackType_t as other ports do.

* Fix portTICK_RATE_MICROSECONDS in POSIX port

---------

Co-authored-by: Jacques GUILLOU <jacques.guillou.job@gmail.com>
Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com>
2 years agoFeature/fixing clang gnu compiler warnings (#620)
phelter [Thu, 23 Feb 2023 18:05:04 +0000 (10:05 -0800)]
Feature/fixing clang gnu compiler warnings (#620)

* Adding in ability to support a library for freertos_config and a custom freertos_kernel_port (#558)

* Using single name definition for libraries everywhere. (#558)

* Supporting backwards compatibility with FREERTOS_CONFIG_FILE_DIRECTORY (#571)

* Removing compiler warnings for GNU and Clang. (#571)

* Added in documentation on how to consume from a main project. Added default PORT selection for native POSIX and MINGW platforms.

* Only adding freertos_config if it exists. Removing auto generation of it from a FREERTOS_CONFIG_FILE_DIRECTORY.

* Fixing clang and gnu compiler warnings.

* Adding in project information and how to compile for GNU/clang

* Fixing compiler issue with unused variable - no need to declare variable.

* Adding in compile warnings for linux builds that kernel is okay with using.

* Fixing more extra-semi-stmt clang warnings.

* Moving definition of hooks into header files if features are enabled.

* Fixing formatting with uncrustify.

* Fixing merge conflicts with main merge.

* Fixing compiler errors due to merge issues and formatting.

* Fixing Line feeds.

* Adding 'portNORETURN' into portmacros.h. Other Updates based on PR request

* Further clean-up of clang and clang-tidy issues.

* Removing compiler specific pragmas from common c files.

* Fixing missing lexicon entry and uncrustify formatting changes.

* Resolving merge issue multiple defnitions of proto for prvIdleTask

* Fixing formatting issues that are not covered by uncrustify. Use clang-tidy instead if you want this level of control.

* More uncrustify formatting issues.

* Fixing extra bracket in #if statement.

---------

Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com>
2 years agoFix build failure introduced in PR #597 (#629)
Gaurav-Aggarwal-AWS [Thu, 23 Feb 2023 04:07:42 +0000 (09:37 +0530)]
Fix build failure introduced in PR #597 (#629)

The PR #597 introduced a new config option configTICK_TYPE_WIDTH_IN_BITS
which can be defined to one of the following:
* TICK_TYPE_WIDTH_16_BITS - Tick type is 16 bit wide.
* TICK_TYPE_WIDTH_32_BITS - Tick type is 32 bit wide.
* TICK_TYPE_WIDTH_64_BITS - Tick type is 64 bit wide.

Earlier we supported 16 and 32 bit width for tick type which was
controlled using the config option configUSE_16_BIT_TICKS. The PR
tried to maintain backward compatibility by honoring
configUSE_16_BIT_TICKS. The backward compatibility did not work as
expected though, as the macro configTICK_TYPE_WIDTH_IN_BITS was used
before it was defined. This PR addresses it by ensuring that the macro
configTICK_TYPE_WIDTH_IN_BITS is defined before it is used.

Testing
1. configUSE_16_BIT_TICKS is defined to 0.

Source (function xTaskIncrementTick in tasks.c):
```
const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
```

Assembly:
```
109e:       4b50            ldr     r3, [pc, #320]  ; (11e0 <xTaskIncrementTick+0x150>)
10a0:       f8d3 4134       ldr.w   r4, [r3, #308]  ; 0x134
10a4:       3401            adds    r4, #1
10a6:       f8c3 4134       str.w   r4, [r3, #308]  ; 0x134
```

It is clear from assembly that the tick type is 32 bit.

2. configUSE_16_BIT_TICKS is defined to 1.

Source (function xTaskIncrementTick in tasks.c):
```
const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
```

Assembly:
```
10e2:       4b53            ldr     r3, [pc, #332]  ; (1230 <xTaskIncrementTick+0x15c>)
10e4:       f8b3 4134       ldrh.w  r4, [r3, #308]  ; 0x134
10e8:       b2a4            uxth    r4, r4
10ea:       3401            adds    r4, #1
10ec:       b2a4            uxth    r4, r4
10ee:       f8a3 4134       strh.w  r4, [r3, #308]  ; 0x134
```

It is clear from assembly that the tick type is 16 bit.

3. configTICK_TYPE_WIDTH_IN_BITS is defined to TICK_TYPE_WIDTH_16_BITS.

Source (function xTaskIncrementTick in tasks.c):
```
const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
```

Assembly:
```
10e2:       4b53            ldr     r3, [pc, #332]  ; (1230 <xTaskIncrementTick+0x15c>)
10e4:       f8b3 4134       ldrh.w  r4, [r3, #308]  ; 0x134
10e8:       b2a4            uxth    r4, r4
10ea:       3401            adds    r4, #1
10ec:       b2a4            uxth    r4, r4
10ee:       f8a3 4134       strh.w  r4, [r3, #308]  ; 0x134
```

It is clear from assembly that the tick type is 16 bit.

4. configTICK_TYPE_WIDTH_IN_BITS is defined to TICK_TYPE_WIDTH_32_BITS.

Source (function xTaskIncrementTick in tasks.c):
```
const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
```

Assembly:
```
109e:       4b50            ldr     r3, [pc, #320]  ; (11e0 <xTaskIncrementTick+0x150>)
10a0:       f8d3 4134       ldr.w   r4, [r3, #308]  ; 0x134
10a4:       3401            adds    r4, #1
10a6:       f8c3 4134       str.w   r4, [r3, #308]  ; 0x134
```

It is clear from assembly that the tick type is 32 bit.

5. configTICK_TYPE_WIDTH_IN_BITS is defined to TICK_TYPE_WIDTH_64_BITS.

```
 #error configTICK_TYPE_WIDTH_IN_BITS set to unsupported tick type width.
```

The testing was done for GCC/ARM_CM3 port which does not support 64 bit
tick type.

6. Neither configUSE_16_BIT_TICKS nor configTICK_TYPE_WIDTH_IN_BITS
defined.

```
 #error Missing definition:  One of configUSE_16_BIT_TICKS and
 configTICK_TYPE_WIDTH_IN_BITS must be defined in FreeRTOSConfig.h.
 See the Configuration section of the FreeRTOS API documentation for
 details.
```

7. Both configUSE_16_BIT_TICKS and configTICK_TYPE_WIDTH_IN_BITS defined.

```
 #error Only one of configUSE_16_BIT_TICKS and
 configTICK_TYPE_WIDTH_IN_BITS must be defined in FreeRTOSConfig.h.
 See the Configuration section of the FreeRTOS API documentation for
 details.
```

Related issue - https://github.com/FreeRTOS/FreeRTOS-Kernel/issues/628

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
2 years ago Update PR template to include checkbox for Unit Test related changes (#627)
Aniruddha Kanhere [Mon, 20 Feb 2023 21:16:57 +0000 (13:16 -0800)]
 Update PR template to include checkbox for Unit Test related changes (#627)

2 years agoDo not call exit() on MSVC Port when calling vPortEndScheduler (#624) 589/head
Ju1He1 [Wed, 15 Feb 2023 06:10:32 +0000 (07:10 +0100)]
Do not call exit() on MSVC Port when calling vPortEndScheduler (#624)

* make port exitable

* correctly set xPortRunning to False

* add suggestions from Review

Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com>
* add suggestions from Review

Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com>
---------

Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com>
2 years agoIntroduce portMEMORY_BARRIER for Microblaze port. (#621)
bbain [Mon, 13 Feb 2023 04:58:20 +0000 (15:58 +1100)]
Introduce portMEMORY_BARRIER for Microblaze port. (#621)

The introduction of `portMEMORY_BARRIER` will ensure
the places in the kernel use a barrier will work.
For example, `xTaskResumeAll` has a memory barrier
to ensure its correctness when compiled with optimization
enabled. Without the barrier `xTaskResumeAll` can fail
(e.g. start reading and writing to address 0 and/or
infinite looping) when `xPendingReadyList` contains more
than one task to restore.

In `xTaskResumeAll` the compiler chooses to cache the
`pxTCB` the first time through the loop for use
in every subsequent loop. This is incorrect as the
removal of `pxTCB->xEventListItem` will actually
change the value of `pxTCB` if it was read again
at the top of the loop. The barrier forces the compiler
to read `pxTCB` again at the top of the loop.

The compiler is operating correctly. The removal
`pxTCB->xEventListItem` executes on a `List_t *`
and `ListItem_t *`.  This means that the compiler
can assume that any `MiniListItem_t` values are
unchanged by the loop (i.e. "strict-aliasing").
This allows the compiler to cache `pxTCB` as it
is obtained via a `MiniListItem_t`. This is incorrect
in this case because it is possible for a `ListItem_t *`
to actually alias a `MiniListItem_t`. This is technically
a "violation of aliasing rules" so we use the the barrier
to disable the strict-aliasing optimization in this loop.

2 years agoAdded support of 64bit events. (#597)
Dusan Cervenka [Fri, 3 Feb 2023 14:34:02 +0000 (15:34 +0100)]
Added support of 64bit events. (#597)

* Added support of 64bit even

Signed-off-by: Cervenka Dusan <cervenka@acrios.com>
* Added missing brackets

Signed-off-by: Cervenka Dusan <cervenka@acrios.com>
* Made proper name for tick macro.

Signed-off-by: Cervenka Dusan <cervenka@acrios.com>
* Improved macro evaluation

Signed-off-by: Cervenka Dusan <cervenka@acrios.com>
* Fixed missed port files  + documentation

Signed-off-by: Cervenka Dusan <cervenka@acrios.com>
* Changes made on PR

Signed-off-by: Cervenka Dusan <cervenka@acrios.com>
* Fix macro definition.

Signed-off-by: Cervenka Dusan <cervenka@acrios.com>
* Formatted code with uncrustify

Signed-off-by: Cervenka Dusan <cervenka@acrios.com>
---------

Signed-off-by: Cervenka Dusan <cervenka@acrios.com>
2 years agoFix some CMake documentation typos (#616)
David J. Fiddes [Mon, 23 Jan 2023 17:16:24 +0000 (17:16 +0000)]
Fix some CMake documentation typos (#616)

The quick start instructions for CMake mention the "master"
git branch which has been replaced by "main" in the current
repo.

The main CMakeLists.txt documents how to integrate a
custom port. Fix a typo in the suggested CMake code.

2 years agoAdd ulTaskGetRunTimeCounter and ulTaskGetRunTimePercent (#611)
Chris Copeland [Thu, 19 Jan 2023 22:46:42 +0000 (14:46 -0800)]
Add ulTaskGetRunTimeCounter and ulTaskGetRunTimePercent (#611)

Allow ulTaskGetIdleRunTimeCounter and ulTaskGetIdleRunTimePercent to be
used whenever configGENERATE_RUN_TIME_STATS is enabled, as this is the
only requirement for these functions to work.

2 years agoUpdate FreeRTOS/FreeRTOS build checks (#613)
Gaurav-Aggarwal-AWS [Mon, 16 Jan 2023 09:36:18 +0000 (15:06 +0530)]
Update FreeRTOS/FreeRTOS build checks (#613)

This is needed to be compatible with the refactoring done in this
PR - https://github.com/FreeRTOS/FreeRTOS/pull/889

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
2 years agoUpdate equal priority task preemption (#603)
chinglee-iot [Fri, 6 Jan 2023 02:42:13 +0000 (10:42 +0800)]
Update equal priority task preemption (#603)

* vTaskResume and vTaskPrioritySet don't preempt equal priority task

* Update vTaskResumeAll not to preempt task with equal priority

* Fix in xTaskResumeFromISR

3 years agomove the prototype for vApplicationIdleHook to task.h. (#600)
tcpluess [Mon, 19 Dec 2022 09:48:07 +0000 (10:48 +0100)]
move the prototype for vApplicationIdleHook to task.h. (#600)

Co-authored-by: pluess <pluess@faulhorn.mw.iap.unibe.ch>
Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com>
3 years agoFix array-bounds compiler warning on gcc11+ in list.h (#580)
Archit Gupta [Thu, 15 Dec 2022 21:46:32 +0000 (21:46 +0000)]
Fix array-bounds compiler warning on gcc11+ in list.h (#580)

listGET_OWNER_OF_NEXT_ENTRY computes `( pxConstList )->pxIndex->pxNext` after
verifying that `( pxConstList )->pxIndex` points to `xListEnd`, which due to
being a MiniListItem_t, can be shorter than a ListItem_t. Thus,
`( pxConstList )->pxIndex` is a `ListItem_t *` that extends past the end of the
`List_t` whose `xListEnd` it points to. This is fixed by accessing `pxNext`
through a `MiniListItem_t` instead.

3 years agoIntroduce .git-blame-ignore-revs
Paul Bartell [Tue, 9 Aug 2022 18:50:26 +0000 (11:50 -0700)]
Introduce .git-blame-ignore-revs

The .git-blame-ignore-revs allows easy filtering out large commits
from calls to git blame.

This can be configured frome the git command line via the following:
git config blame.ignoreRevsFile .git-blame-ignore-revs

3 years agoNormalize line endings and whitespace in source files
Paul Bartell [Tue, 29 Nov 2022 18:36:04 +0000 (10:36 -0800)]
Normalize line endings and whitespace in source files

3 years agoci: Enforce unix-style LF line endings
Paul Bartell [Tue, 9 Aug 2022 20:37:39 +0000 (13:37 -0700)]
ci: Enforce unix-style LF line endings

3 years agoEnable automatic EOL conversion by git
Paul Bartell [Tue, 9 Aug 2022 18:46:07 +0000 (11:46 -0700)]
Enable automatic EOL conversion by git

Fix EOL of .gitattributes

3 years agoAdd IAR RISC-V 32 Embedded Extension Support (#588)
Kody Stribrny [Tue, 29 Nov 2022 22:55:18 +0000 (14:55 -0800)]
Add IAR RISC-V 32 Embedded Extension Support (#588)

Adds RV32E support to the IAR port. This is done by
reducing our register usage to the first 16 registers
only.

Influenced by changes in https://github.com/FreeRTOS/FreeRTOS-Kernel/pull/543

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
Co-authored-by: Gaurav Aggarwal <aggarg@amazon.com>
3 years agoRemove croutine.c from RP2040 cmake include file
Paul Bartell [Fri, 25 Nov 2022 20:01:38 +0000 (12:01 -0800)]
Remove croutine.c from RP2040 cmake include file

3 years agoRemove xCoRoutineHandle definition from FreeRTOS.h
Paul Bartell [Fri, 25 Nov 2022 20:01:22 +0000 (12:01 -0800)]
Remove xCoRoutineHandle definition from FreeRTOS.h

3 years agoRemove coroutine references from MISRA exception comments
Paul Bartell [Fri, 25 Nov 2022 20:01:00 +0000 (12:01 -0800)]
Remove coroutine references from MISRA exception comments

3 years agoparenthesize expression-like macro (#592)
tcpluess [Mon, 28 Nov 2022 06:48:29 +0000 (07:48 +0100)]
parenthesize expression-like macro (#592)

* parenthesize expression-like macro

* fixed wrong indentation

3 years agoREADME.md: Remove coroutine references.
Paul Bartell [Tue, 22 Nov 2022 19:04:02 +0000 (11:04 -0800)]
README.md: Remove coroutine references.

3 years agoCMakeLists.txt: Remove croutine.c from CMakeLists.txt
Paul Bartell [Tue, 22 Nov 2022 19:03:24 +0000 (11:03 -0800)]
CMakeLists.txt: Remove croutine.c from CMakeLists.txt
CMakeLists.txt: Remove croutine.c

3 years agoRemove coroutine terms from lexicon
Paul Bartell [Tue, 22 Nov 2022 19:03:05 +0000 (11:03 -0800)]
Remove coroutine terms from lexicon

3 years agoRemove coroutines from FreeRTOS-Kernel.
Paul Bartell [Wed, 7 Apr 2021 17:48:05 +0000 (10:48 -0700)]
Remove coroutines from FreeRTOS-Kernel.

3 years agoMake unit-test run on 20.04 ubuntu
Aniruddha Kanhere [Fri, 18 Nov 2022 09:32:10 +0000 (15:02 +0530)]
Make unit-test run on 20.04 ubuntu

3 years agoUpdate kernel-checks.yml
Aniruddha Kanhere [Fri, 18 Nov 2022 09:21:11 +0000 (14:51 +0530)]
Update kernel-checks.yml

3 years agoUpdate ci.yml
Aniruddha Kanhere [Fri, 18 Nov 2022 09:18:30 +0000 (14:48 +0530)]
Update ci.yml

3 years agoUpdate actions to use 20.04 ubuntu
Aniruddha Kanhere [Fri, 18 Nov 2022 09:11:59 +0000 (14:41 +0530)]
Update actions to use 20.04 ubuntu

3 years agoOnly adding freertos_config if it exists. Removing auto generation of it from a FREER...
Paul Helter [Fri, 4 Nov 2022 23:23:52 +0000 (16:23 -0700)]
Only adding freertos_config if it exists. Removing auto generation of it from a FREERTOS_CONFIG_FILE_DIRECTORY.

3 years agoAdded in documentation on how to consume from a main project. Added default PORT...
Paul Helter [Sun, 23 Oct 2022 23:46:05 +0000 (16:46 -0700)]
Added in documentation on how to consume from a main project. Added default PORT selection for native POSIX and MINGW platforms.

3 years agoRemoving compiler warnings for GNU and Clang. (#571)
Paul Helter [Wed, 12 Oct 2022 10:00:24 +0000 (03:00 -0700)]
Removing compiler warnings for GNU and Clang. (#571)

3 years agoSupporting backwards compatibility with FREERTOS_CONFIG_FILE_DIRECTORY (#571)
Paul Helter [Tue, 11 Oct 2022 19:27:08 +0000 (12:27 -0700)]
Supporting backwards compatibility with FREERTOS_CONFIG_FILE_DIRECTORY (#571)

3 years agoUsing single name definition for libraries everywhere. (#558)
Paul Helter [Fri, 30 Sep 2022 22:16:20 +0000 (15:16 -0700)]
Using single name definition for libraries everywhere. (#558)

3 years agoAdding in ability to support a library for freertos_config and a custom freertos_kern...
Paul Helter [Thu, 29 Sep 2022 22:04:39 +0000 (15:04 -0700)]
Adding in ability to support a library for freertos_config and a custom freertos_kernel_port (#558)

3 years agoVersion Change (#587)
Soren Ptak [Fri, 18 Nov 2022 01:29:55 +0000 (17:29 -0800)]
Version Change (#587)

* Updating to version v10.5.1

Co-authored-by: Soren Ptak <skptak@amazon.com>
3 years agoAdd support for the configUSE_TASK_FPU_SUPPORT constant in the GCC/ARM_CR5 port ...
ChristosZosi [Mon, 14 Nov 2022 05:18:47 +0000 (06:18 +0100)]
Add support for the configUSE_TASK_FPU_SUPPORT constant in the GCC/ARM_CR5 port (#584)

* Add support for the configUSE_TASK_FPU_SUPPORT in the GCC/ARM_CR5 port

This is done almost identically as in the GCC/ARM_CA9 port

* Adjust task stack initialitation of the GCC/ARM_CR5 port

Ensure that the task stack initialization is done correctly for the
different options of configUSE_TASK_FPU_SUPPORT.

This is very similar to the GCC/ARM_CA9 port. The only meaningful
difference is, that the FPU of the Cortex-R5 has just sixteen 64-bit
floating point registers as it implements the VFPv3-D16 architecture.
You may also refer to the ARM documentation

* Add support for FPU safe interrupts to the GCC/ARM_CR5 port

Similar to GCC/ARM_CA9 port

* Clarify comment about the size of the FPU registers of Cortex R5

3 years agoFix context switch when time slicing is off (#568)
Gaurav-Aggarwal-AWS [Tue, 8 Nov 2022 08:35:35 +0000 (14:05 +0530)]
Fix context switch when time slicing is off (#568)

* Fix context switch when time slicing is off

When time slicing is off, context switch should only happen when a
task with priority higher than the currently executing one is unblocked.
Earlier the code was invoking a context switch even when a task with
priority equal the currently executing task was unblocked. This commit
fixes the code to only do a context switch when a higher priority
task is unblocked.

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
3 years agoUpdate Cortex-M55 and Cortex-M85 ports (#579)
Gaurav-Aggarwal-AWS [Fri, 28 Oct 2022 05:11:56 +0000 (10:41 +0530)]
Update Cortex-M55 and Cortex-M85 ports (#579)

These were missed when PR #59 was merged.

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
3 years agoUpdate the NIOSII port to enable longer jumps (#578)
RichardBarry [Thu, 20 Oct 2022 05:04:53 +0000 (22:04 -0700)]
Update the NIOSII port to enable longer jumps (#578)

Update the NIOSII port so it works on systems with more RAM as
per https://forums.freertos.org/t/nios-ii-r-nios2-call26-noat-linker-error/16028

3 years agoRemoved the 'configASSERT( xInheritanceOccurred == pdFALSE )' assertion from xQueueSe...
Niklas Gürtler [Thu, 13 Oct 2022 17:22:24 +0000 (19:22 +0200)]
Removed the 'configASSERT( xInheritanceOccurred == pdFALSE )' assertion from xQueueSemaphoreTake as the reasoning behind it is wrong; it can trigger on wrongly on highly-contested semaphores on multicore systems. See https://forums.freertos.org/t/15967 (#576)

Co-authored-by: Niklas Gürtler <niklas.guertler@tacterion.com>
3 years agoAdd warning message to ensure min stack size (#575)
arshi016 [Wed, 12 Oct 2022 04:17:02 +0000 (00:17 -0400)]
Add warning message to ensure min stack size (#575)

Co-authored-by: alfred gedeon <28123637+alfred2g@users.noreply.github.com>
3 years agoUpdated ESP32 port-layer to ESP-IDF `v4.4.2` (#572)
Laukik Hase [Tue, 11 Oct 2022 21:27:32 +0000 (02:57 +0530)]
Updated ESP32 port-layer to ESP-IDF `v4.4.2` (#572)

* Xtensa_ESP32: Added esp-idf v4.4.2 specific changes

* Xtensa_ESP32: Updated SPDX license identifiers

3 years agoTickless idle fixes/improvement (#59)
Jeff Tenney [Mon, 3 Oct 2022 19:39:17 +0000 (12:39 -0700)]
Tickless idle fixes/improvement (#59)

* Fix tickless idle when stopping systick on zero...

...and don't stop SysTick at all in the eAbortSleep case.

Prior to this commit, if vPortSuppressTicksAndSleep() happens to stop
the SysTick on zero, then after tickless idle ends, xTickCount advances
one full tick more than the time that actually elapsed as measured by
the SysTick.  See "bug 1" in this forum post:
https://forums.freertos.org/t/ultasknotifytake-timeout-accuracy/9629/40

SysTick
-------
The SysTick is the hardware timer that provides the OS tick interrupt
in the official ports for Cortex M.  SysTick starts counting down from
the value stored in its reload register.  When SysTick reaches zero, it
requests an interrupt.  On the next SysTick clock cycle, it loads the
counter again from the reload register.  To get periodic interrupts
every N SysTick clock cycles, the reload register must be N - 1.

Bug Example
-----------
- Idle task calls vPortSuppressTicksAndSleep(xExpectedIdleTime = 2).
  [Doesn't have to be "2" -- could be any number.]
- vPortSuppressTicksAndSleep() stops SysTick, and the current-count
  register happens to stop on zero.
- SysTick ISR executes, setting xPendedTicks = 1
- vPortSuppressTicksAndSleep() masks interrupts and calls
  eTaskConfirmSleepModeStatus() which confirms the sleep operation. ***
- vPortSuppressTicksAndSleep() configures SysTick for 1 full tick
  (xExpectedIdleTime - 1) plus the current-count register (which is 0)
- One tick period elapses in sleep.
- SysTick wakes CPU, ISR executes and increments xPendedTicks to 2.
- vPortSuppressTicksAndSleep() calls vTaskStepTick(1), then returns.
- Idle task resumes scheduler, which increments xTickCount twice (for
  xPendedTicks = 2)

In the end, two ticks elapsed as measured by SysTick, but the code
increments xTickCount three times.  The root cause is that the code
assumes the SysTick current-count register always contains the number of
SysTick counts remaining in the current tick period.  However, when the
current-count register is zero, there are ulTimerCountsForOneTick
counts remaining, not zero.  This error is not the kind of time slippage
normally associated with tickless idle.

*** Note that a recent commit https://github.com/FreeRTOS/FreeRTOS-Kernel/commit/e1b98f0
results in eAbortSleep in this case, due to xPendedTicks != 0.  That
commit does mostly resolve this bug without specifically mentioning
it, and without this commit.  But that resolution allows the code in
port.c not to directly address the special case of stopping SysTick on
zero in any code or comments.  That commit also generates additional
instances of eAbortSleep, and a second purpose of this commit is to
optimize how vPortSuppressTicksAndSleep() behaves for eAbortSleep, as
noted below.

This commit also includes an optimization to avoid stopping the SysTick
when eTaskConfirmSleepModeStatus() returns eAbortSleep.  This
optimization belongs with this fix because the method of handling the
SysTick being stopped on zero changes with this optimization.

* Fix imminent tick rescheduled after tickless idle

Prior to this commit, if something other than systick wakes the CPU from
tickless idle, vPortSuppressTicksAndSleep() might cause xTickCount to
increment once too many times.  See "bug 2" in this forum post:
https://forums.freertos.org/t/ultasknotifytake-timeout-accuracy/9629/40

SysTick
-------
The SysTick is the hardware timer that provides the OS tick interrupt
in the official ports for Cortex M.  SysTick starts counting down from
the value stored in its reload register.  When SysTick reaches zero, it
requests an interrupt.  On the next SysTick clock cycle, it loads the
counter again from the reload register.  To get periodic interrupts
every N SysTick clock cycles, the reload register must be N - 1.

Bug Example
-----------
- CPU is sleeping in vPortSuppressTicksAndSleep()
- Something other than the SysTick wakes the CPU.
- vPortSuppressTicksAndSleep() calculates the number of SysTick counts
  until the next tick.  The bug occurs only if this number is small.
- vPortSuppressTicksAndSleep() puts this small number into the SysTick
  reload register, and starts SysTick.
- vPortSuppressTicksAndSleep() calls vTaskStepTick()
- While vTaskStepTick() executes, the SysTick expires.  The ISR pends
  because interrupts are masked, and SysTick starts a 2nd period still
  based on the small number of counts in its reload register.  This 2nd
  period is undesirable and is likely to cause the error noted below.
- vPortSuppressTicksAndSleep() puts the normal tick duration into the
  SysTick's reload register.
- vPortSuppressTicksAndSleep() unmasks interrupts before the SysTick
  starts a new period based on the new value in the reload register.
  [This is a race condition that can go either way, but for the bug
  to occur, the race must play out this way.]
- The pending SysTick ISR executes and increments xPendedTicks.
- The SysTick expires again, finishing the second very small period, and
  starts a new period this time based on the full tick duration.
- The SysTick ISR increments xPendedTicks (or xTickCount) even though
  only a tiny fraction of a tick period has elapsed since the previous
  tick.

The bug occurs when *two* consecutive small periods of the SysTick are
both counted as ticks.  The root cause is a race caused by the small
SysTick period.  If vPortSuppressTicksAndSleep() unmasks interrupts
*after* the small period expires but *before* the SysTick starts a
period based on the full tick period, then two small periods are
counted as ticks when only one should be counted.

The end result is xTickCount advancing nearly one full tick more than
time actually elapsed as measured by the SysTick.  This is not the kind
of time slippage normally associated with tickless idle.

After this commit the code starts the SysTick and then immediately
modifies the reload register to ensure the very short cycle (if any) is
conducted only once.  This strategy requires special consideration for
the build option that configures SysTick to use a divided clock.  To
avoid waiting around for the SysTick to load value from the reload
register, the new code temporarily configures the SysTick to use the
undivided clock.  The resulting timing error is typical for tickless
idle.  The error (commonly known as drift or slippage in kernel time)
caused by this strategy is equivalent to one or two counts in
ulStoppedTimerCompensation.

This commit also updates comments and #define symbols related to the
SysTick clock option.  The SysTick can optionally be clocked by a
divided version of the CPU clock (commonly divide-by-8).  The new code
in this commit adjusts these comments and symbols to make them clearer
and more useful in configurations that use the divided clock.  The fix
made in this commit requires the use of these symbols, as noted in the
code comments.

* Fix tickless idle with alternate systick clocking

Prior to this commit, in configurations using the alternate SysTick
clocking, vPortSuppressTicksAndSleep() might cause xTickCount to jump
ahead as much as the entire expected idle time or fall behind as much
as one full tick compared to time as measured by the SysTick.

SysTick
-------
The SysTick is the hardware timer that provides the OS tick interrupt
in the official ports for Cortex M. SysTick starts counting down from
the value stored in its reload register. When SysTick reaches zero, it
requests an interrupt. On the next SysTick clock cycle, it loads the
counter again from the reload register. The SysTick has a configuration
option to be clocked by an alternate clock besides the core clock.
This alternate clock is MCU dependent.

Scenarios Fixed
---------------
The new code in this commit handles the following scenarios that were
not handled correctly prior to this commit.

1. Before the sleep, vPortSuppressTicksAndSleep() stops the SysTick on
zero, long after SysTick reached zero.  Prior to this commit, this
scenario caused xTickCount to jump ahead one full tick for the same
reason documented here: https://github.com/FreeRTOS/FreeRTOS-Kernel/pull/59/commits/0c7b04bd3a745c52151abebc882eed3f811c4c81

2. After the sleep, vPortSuppressTicksAndSleep() stops the SysTick
before it loads the counter from the reload register.  Prior to this
commit, this scenario caused xTickCount to jump ahead by the entire
expected idle time (xExpectedIdleTime) because the current-count
register is zero before it loads from the reload register.

3. Prior to return, vPortSuppressTicksAndSleep() attempts to start a
short SysTick period when the current SysTick clock cycle has a lot of
time remaining.  Prior to this commit, this scenario could cause
xTickCount to fall behind by as much as nearly one full tick because the
short SysTick cycle never started.

Note that #3 is partially fixed by https://github.com/FreeRTOS/FreeRTOS-Kernel/pull/59/commits/967acc9b200d3d4beeb289d9da9e88798074b431
even though that commit addresses a different issue.  So this commit
completes the partial fix.

* Improve comments and name of preprocessor symbol

Add a note in the code comments that SysTick requests an interrupt when
decrementing from 1 to 0, so that's why stopping SysTick on zero is a
special case.  Readers might unknowingly assume that SysTick requests
an interrupt when wrapping from 0 back to the load-register value.

Reconsider new "_SETTING" suffix since "_CONFIG" suffix seems more
descriptive.  The code relies on *both* of these preprocessor symbols:

portNVIC_SYSTICK_CLK_BIT
portNVIC_SYSTICK_CLK_BIT_CONFIG  **new**

A meaningful suffix is really helpful to distinguish the two symbols.

* Revert introduction of 2nd name for NVIC register

When I added portNVIC_ICSR_REG I didn't realize there was already a
portNVIC_INT_CTRL_REG, which identifies the same register.  Not good
to have both.  Note that portNVIC_INT_CTRL_REG is defined in portmacro.h
and is already used in this file (port.c).

* Replicate to other Cortex M ports

Also set a new fiddle factor based on tests with a CM4F.  I used gcc,
optimizing at -O1.  Users can fine-tune as needed.

Also add configSYSTICK_CLOCK_HZ to the CM0 ports to be just like the
other Cortex M ports.  This change allowed uniformity in the default
tickless implementations across all Cortex M ports.  And CM0 is likely
to benefit from configSYSTICK_CLOCK_HZ, especially considering new CM0
devices with very fast CPU clock speeds.

* Revert changes to IAR-CM0-portmacro.h

portNVIC_INT_CTRL_REG was already defined in port.c.  No need to define
it in portmacro.h.

* Handle edge cases with slow SysTick clock

Co-authored-by: Cobus van Eeden <35851496+cobusve@users.noreply.github.com>
Co-authored-by: abhidixi11 <44424462+abhidixi11@users.noreply.github.com>
Co-authored-by: Joseph Julicher <jjulicher@mac.com>
Co-authored-by: alfred gedeon <28123637+alfred2g@users.noreply.github.com>
3 years agoUpdate doc comments in task.h (#570)
Gaurav-Aggarwal-AWS [Wed, 28 Sep 2022 16:12:05 +0000 (21:42 +0530)]
Update doc comments in task.h (#570)

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
3 years agoAdded better pointer declaration readability (#567)
Cristian Cristea [Mon, 26 Sep 2022 21:43:30 +0000 (00:43 +0300)]
Added better pointer declaration readability (#567)

* Add better pointer declaration readability

I revised the declaration of single-line pointers by splitting it into
multiple lines. Now, every pointer is declared (and initialized
accordingly) on its own line. This refactoring should enhance
readability and decrease the probability of error when a new pointer is
added/removed or a current one has its initialization value modified.

Signed-off-by: Cristian Cristea <cristiancristea00@gmail.com>
* Remove unnecessary whitespace characters and lines

It removes whitespace characters at the end of lines (empty or
othwerwise) and clear lines at the end of the file (only one remains).
It is an automatic operation done by git.

Signed-off-by: Cristian Cristea <cristiancristea00@gmail.com>
Signed-off-by: Cristian Cristea <cristiancristea00@gmail.com>
3 years agoUpdate RISC-V IAR port to support vector mode. (#458)
Ming Yue [Tue, 20 Sep 2022 22:32:41 +0000 (15:32 -0700)]
Update RISC-V IAR port to support vector mode. (#458)

* Update RISC-V IAR port to support vector mode.

* uncrustify

Co-authored-by: David Chalco <david@chalco.io>
Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com>
Co-authored-by: alfred gedeon <28123637+alfred2g@users.noreply.github.com>
3 years agoUpdate History.txt as per the PR feedback
Gaurav Aggarwal [Fri, 16 Sep 2022 16:45:49 +0000 (22:15 +0530)]
Update History.txt as per the PR feedback

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
3 years agoUpdate History.txt
Gaurav Aggarwal [Fri, 16 Sep 2022 11:04:04 +0000 (16:34 +0530)]
Update History.txt

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
3 years agoRestrict unpriv task to invoke code with privilege
Gaurav Aggarwal [Wed, 7 Sep 2022 09:28:52 +0000 (14:58 +0530)]
Restrict unpriv task to invoke code with privilege

It was possible for an unprivileged task to invoke any function with
privilege by passing it as a parameter to MPU_xTaskCreate,
MPU_xTaskCreateStatic, MPU_xTimerCreate, MPU_xTimerCreateStatic, or
MPU_xTimerPendFunctionCall.

This commit ensures that MPU_xTaskCreate and MPU_xTaskCreateStatic can
only create unprivileged tasks. It also removes the following APIs:
1. MPU_xTimerCreate
2. MPU_xTimerCreateStatic
3. MPU_xTimerPendFunctionCall

We thank Huazhong University of Science and Technology for reporting
this issue.

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
3 years agoRemove local stack variable form MPU wrappers
Gaurav Aggarwal [Wed, 7 Sep 2022 09:27:37 +0000 (14:57 +0530)]
Remove local stack variable form MPU wrappers

It was possible for a third party that had already independently gained
the ability to execute injected code to achieve further privilege
escalation by branching directly inside a FreeRTOS MPU API wrapper
function with a manually crafted stack frame. This commit removes the
local stack variable `xRunningPrivileged` so that a manually crafted
stack frame cannot be used for privilege escalation by branching
directly inside a FreeRTOS MPU API wrapper.

We thank Certibit Consulting, LLC, Huazhong University of Science and
Technology and the SecLab team at Northeastern University for reporting
this issue.

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
3 years agoMake RAM regions non-executable
Gaurav Aggarwal [Wed, 7 Sep 2022 09:20:30 +0000 (14:50 +0530)]
Make RAM regions non-executable

This commit makes the privileged RAM and stack regions non-executable.

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
3 years agoUse highest numbered MPU regions for kernel
Gaurav Aggarwal [Wed, 7 Sep 2022 09:17:14 +0000 (14:47 +0530)]
Use highest numbered MPU regions for kernel

ARMv7-M allows overlapping MPU regions. When 2 MPU regions overlap, the
MPU configuration of the higher numbered MPU region is applied. For
example, if a memory area is covered by 2 MPU regions 0 and 1, the
memory permissions for MPU region 1 are applied.

We use 5 MPU regions for kernel code and kernel data protections and
leave the remaining for the application writer. We were using lowest
numbered MPU regions (0-4) for kernel protections and leaving the
remaining for the application writer. The application writer could
configure those higher numbered MPU regions to override kernel
protections.

This commit changes the code to use highest numbered MPU regions for
kernel protections and leave the remaining for the application writer.
This ensures that the application writer cannot override kernel
protections.

We thank the SecLab team at Northeastern University for reporting this
issue.

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
3 years agoUpdate CMakeLists.txt for Cortex-M55 and Cortex-M85 ports (#560)
Paul Bartell [Fri, 16 Sep 2022 07:00:11 +0000 (00:00 -0700)]
Update CMakeLists.txt for Cortex-M55 and Cortex-M85 ports (#560)

* Annotate ports CMakeLists.txt with port details

* CMake: Add Cortex-M55 and Cortex-M85 ports

3 years agoportable-RP2040: Fix typo in README.md (#559)
Paul Bartell [Wed, 14 Sep 2022 06:43:10 +0000 (23:43 -0700)]
portable-RP2040: Fix typo in README.md (#559)

Replace "import" with "include" in cmake code sample.

3 years agoM85 support (#556)
Gabor Toth [Tue, 13 Sep 2022 16:38:25 +0000 (18:38 +0200)]
M85 support (#556)

* Extend support to Arm Cortex-M85

Signed-off-by: Gabor Toth <gabor.toth@arm.com>
Change-Id: I679ba8e193638126b683b651513f08df445f9fe6

* Add generated Cortex-M85 support files

Signed-off-by: Gabor Toth <gabor.toth@arm.com>
Change-Id: Ib329d88623c2936ffe3e9a24f5d6e07655e4e5c8

* Extend Trusted Firmware M port

Extend Trusted Firmware M port to Cortex-M23,
Cortex-M55 and Cortex-M85.

Signed-off-by: Gabor Toth <gabor.toth@arm.com>
Change-Id: If8f1081acfd04e547b3227579e70e355a6adffe3

* Re-run copy_files.py script

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
Signed-off-by: Gabor Toth <gabor.toth@arm.com>
Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com>
Co-authored-by: Gaurav Aggarwal <aggarg@amazon.com>
3 years agoUpdate of three badly terminated macro definitions (#555)
newbrain [Thu, 8 Sep 2022 17:33:41 +0000 (19:33 +0200)]
Update of three badly terminated macro definitions (#555)

* Update of three badly terminated macro definitions
- vTaskDelayUntil() to conform to usual pattern do { ... } while(0)
- vTaskNotifyGiveFromISR() and
- vTaskGenericNotifyGiveFromISR() to remove extra terminating semicolons
- This PR addresses issues #553 and #554

* Adjust formatting of task.h

Co-authored-by: Paul Bartell <pbartell@amazon.com>
3 years agoAdded checks for index in ThreadLocalStorage APIs (#552)
Aniruddha Kanhere [Thu, 1 Sep 2022 20:23:02 +0000 (13:23 -0700)]
Added checks for index in ThreadLocalStorage APIs (#552)

Added checks for ( xIndex >= 0 ) in ThreadLocalStorage APIs

3 years agoRISC-V: Add support for RV32E extension in GCC port (#543)
Jakub Lužný [Tue, 30 Aug 2022 23:49:37 +0000 (01:49 +0200)]
RISC-V: Add support for RV32E extension in GCC port (#543)

Co-authored-by: Joseph Julicher <jjulicher@mac.com>
3 years ago[Fix] Type for pointers operations (#550)
Octaviarius [Tue, 30 Aug 2022 20:27:39 +0000 (23:27 +0300)]
[Fix] Type for pointers operations (#550)

* fix type for pointers operations in some places: size_t -> portPOINTER_SIZE_TYPE

* fix pointer arithmetics

* fix xAddress type

3 years agoAdd FreeRTOS config directory to include dirs (#548)
Gaurav-Aggarwal-AWS [Mon, 22 Aug 2022 15:28:07 +0000 (20:58 +0530)]
Add FreeRTOS config directory to include dirs (#548)

This allows the application write to set FREERTOS_CONFIG_FILE_DIRECTORY
to whichever directory the FreeRTOSConfig.h file exists in.

This was reported here - https://github.com/FreeRTOS/FreeRTOS-Kernel/issues/545

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
3 years agoAdd support for MISRA rule 20.7 (#546)
Monika Singh [Fri, 19 Aug 2022 10:21:57 +0000 (15:51 +0530)]
Add support for MISRA rule 20.7 (#546)

Misra rule 20.7 requires parenthesis to all parameter names
in macro definitions.

The issue was reported here : https://forums.freertos.org/t/misra-20-7-compatibility/15385

3 years agoFix warnings in posix port (#544)
Archit Gupta [Tue, 16 Aug 2022 11:11:17 +0000 (04:11 -0700)]
Fix warnings in posix port (#544)

Fixes warnings about unused parameters and variables when built with
`-Wall -Wextra`.

3 years agocorrect grammar in include/FreeRTOS.h
Paul Bartell [Tue, 9 Aug 2022 22:48:56 +0000 (15:48 -0700)]
correct grammar in include/FreeRTOS.h

Co-authored-by: Aniruddha Kanhere <60444055+AniruddhaKanhere@users.noreply.github.com>
3 years agoFix formatting of FreeRTOS.h
Paul Bartell [Tue, 9 Aug 2022 18:13:12 +0000 (11:13 -0700)]
Fix formatting of FreeRTOS.h

3 years agoMove some of the complex pre-processor guards on prvWriteNameToBuffer() to compile...
RichardBarry [Sun, 19 Dec 2021 19:18:54 +0000 (11:18 -0800)]
Move some of the complex pre-processor guards on prvWriteNameToBuffer() to compile time checks in FreeRTOS.h.

Co-authored-by: Paul Bartell <pbartell@amazon.com>
3 years agoInclude string.h at the top of portable/GCC/ARM_CA9/port.c to prevent memset() genera...
RichardBarry [Tue, 9 Aug 2022 17:37:24 +0000 (10:37 -0700)]
Include string.h at the top of portable/GCC/ARM_CA9/port.c to prevent memset() generating a warning. (#430)

Co-authored-by: none <unknown>
3 years agoChange default value of INCLUDE_xTaskGetCurrentTaskHandle (#542)
Ravishankar Bhagavandas [Tue, 9 Aug 2022 16:48:44 +0000 (09:48 -0700)]
Change default value of INCLUDE_xTaskGetCurrentTaskHandle (#542)

3 years agoGeneralize Thread Local Storage (TLS) support (#540)
Gaurav-Aggarwal-AWS [Mon, 8 Aug 2022 15:53:29 +0000 (21:23 +0530)]
Generalize Thread Local Storage (TLS) support (#540)

* Generalize Thread Local Storage (TLS) support

FreeRTOS's Thread Local Storage (TLS) support used variables and
functions from newlib, thereby making the TLS support specific to
newlib. This commit generalizes the TLS support so that it can be used
with other c-runtime libraries also. The default behavior for newlib
support is still kept same for backward compatibility.

The application writer would need to set configUSE_C_RUNTIME_TLS_SUPPORT
to 1 in their FreeRTOSConfig.h and define the following macros to
support TLS for a c-runtime library:

1. configTLS_BLOCK_TYPE - Type used to define the TLS block in TCB.
2. configINIT_TLS_BLOCK( xTLSBlock ) - Allocate and initialize memory
   block for the task's TLS Block.
3. configSET_TLS_BLOCK( xTLSBlock ) - Switch C-Runtime's TLS Block to
   point to xTLSBlock.
4. configDEINIT_TLS_BLOCK( xTLSBlock ) - Free up the memory allocated
   for the task's TLS Block.

The following is an example to support TLS for picolibc:

 #define configUSE_C_RUNTIME_TLS_SUPPORT        1
 #define configTLS_BLOCK_TYPE                   void*
 #define configINIT_TLS_BLOCK( xTLSBlock )      _init_tls( xTLSBlock )
 #define configSET_TLS_BLOCK( xTLSBlock )       _set_tls( xTLSBlock )
 #define configDEINIT_TLS_BLOCK( xTLSBlock )

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
3 years agoAdd .syntax unified to GCC assembly functions (#538)
Gaurav-Aggarwal-AWS [Sun, 7 Aug 2022 17:16:11 +0000 (22:46 +0530)]
Add .syntax unified to GCC assembly functions (#538)

This fixes the compilation issue with XC32 compiler.

It was reported here - https://forums.freertos.org/t/xc32-v4-00-error-with-building-freertos-portasm-c/14357/4

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
Co-authored-by: Paul Bartell <pbartell@amazon.com>
3 years agoUpdate History.txt (#535)
Gaurav-Aggarwal-AWS [Sun, 7 Aug 2022 17:01:47 +0000 (22:31 +0530)]
Update History.txt (#535)

* Update History.txt

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
3 years agoBlock SIG_RESUME in the main thread of the Posix port so that sigwait works as expect...
Chris Copeland [Thu, 4 Aug 2022 18:11:31 +0000 (11:11 -0700)]
Block SIG_RESUME in the main thread of the Posix port so that sigwait works as expected (#532)

Co-authored-by: alfred gedeon <28123637+alfred2g@users.noreply.github.com>
3 years agoChange type of message buffer handle (#537)
Ravishankar Bhagavandas [Thu, 4 Aug 2022 17:07:49 +0000 (10:07 -0700)]
Change type of message buffer handle (#537)

3 years agoFix NULL pointer dereference in vPortGetHeapStats
Gaurav Aggarwal [Thu, 4 Aug 2022 11:11:33 +0000 (16:41 +0530)]
Fix NULL pointer dereference in vPortGetHeapStats

When the heap is exhausted (no free block), start and end markers are
the only blocks present in the free block list:

     +---------------+     +-----------> NULL
     |               |     |
     |               V     |
+ ----- +            + ----- +
|   |   |            |   |   |
|   |   |            |   |   |
+ ----- +            + ----- +
  xStart               pxEnd

The code block which traverses the list of free blocks to calculate heap
stats used a do..while loop that moved past the end marker when the heap
had no free block resulting in a NULL pointer dereference. This commit
changes the do..while loop to while loop thereby ensuring that we never
move past the end marker.

This was reported here - https://github.com/FreeRTOS/FreeRTOS-Kernel/issues/534

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
3 years agoAdd vPortRemoveInterruptHandler API (#533)
Gaurav-Aggarwal-AWS [Wed, 3 Aug 2022 20:45:27 +0000 (13:45 -0700)]
Add vPortRemoveInterruptHandler API (#533)

* Add xPortRemoveInterruptHandler API

This API is added to the MicroBlazeV9 port. It enables the application
writer to remove an interrupt handler.

This was originally contributed in this PR - https://github.com/FreeRTOS/FreeRTOS-Kernel/pull/523

* Change API signature to return void

This makes the API similar to vPortDisableInterrupt.

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
Co-authored-by: Gavin Lambert <uecasm@users.noreply.github.com>
3 years agoUpdate codecov action to v3.1.0
Paul Bartell [Tue, 28 Jun 2022 21:07:17 +0000 (14:07 -0700)]
Update codecov action to v3.1.0