Commit graph

2787 commits

Author SHA1 Message Date
Phillip Stevens
fb4c47264e z180 - add legacy typedef 2020-04-21 16:27:13 +10:00
Phillip Stevens
c9f5e7f23d z180 - relocate to Third Party/Z88DK 2020-04-21 14:02:11 +10:00
Phillip Stevens
2308387a34
z180 - Remove HBIOS Comment.
Remove the comment on RomWBW HBIOS, regarding the location of the `pxCurrentTCB`.
```c
/* Make unitialised in BSS for RomWBW HBIOS (to ensure above 0x8000) */
```
Whilst it remains true for HBIOS that the `pxCurrentTCB` must be above `0x8000` to ensure that it is available during a yield, this is not the general case.
2020-04-17 10:52:56 +10:00
Phillip Stevens
2a4e95b357 z180 - reassign copywrite notice 2020-04-17 09:38:19 +10:00
Phillip Stevens
54393e1e1a z180 - configure ISR relocation 2020-04-17 09:35:56 +10:00
Phillip Stevens
efdf4a91fb z180 - initial commit 2020-04-17 00:08:56 +10:00
Phillip Stevens
810dad5322
Merge pull request #1 from FreeRTOS/master
update to master for ATmegaxxxx
2020-04-16 20:46:53 +10:00
Phillip Stevens
1abca83c89
ATmegaxxxx - generalised support (#48)
ATmegaxxxx - generalised support. Please see README.md included in the same PR for usage and limitations.
2020-04-15 18:51:57 -07:00
Phillip Stevens
af8ad187f7
ATmegaxxxx - add portYIELD_FROM_ISR 2020-04-15 12:42:57 +10:00
Gaurav-Aggarwal-AWS
07e672c448
Add definition of portDONT_DISCARD to ARMv7-M ports (#50)
Enabling Link Time Optimization (LTO) causes some of the functions used
in assembly to be incorrectly stripped off, resulting in linker error.
To avoid this, these functions are marked with portDONT_DISCARD macro,
definition of which is port specific. This commit adds the definition
of portDONT_DISCARD for ARMv7-M ports.

Signed-off-by: Gaurav Aggarwal
2020-04-14 09:03:11 -07:00
Phillip Stevens
7b02dd55b6 ATmegaxxxx - reti fix 2020-04-14 20:36:14 +10:00
Phillip Stevens
16f96a8f33 ATmegaxxxx - update readme on megaAVR 2020-04-14 14:38:20 +10:00
Phillip Stevens
98edb54ca3 ATmegaxxxx - update readme on megaAVR 2020-04-14 14:35:42 +10:00
Phillip Stevens
db234a6cc1 ATmegaxxxx - add megaAVR 0-Series support 2020-04-14 14:27:33 +10:00
Phillip Stevens
d381f654fb
Add avr/wdt.h 2020-04-14 09:08:16 +10:00
Phillip Stevens
bfa49e1ea0 ATmegaxxxx - whitespace 2020-04-11 20:44:12 +10:00
Phillip Stevens
7a9398e511 ATmegaxxxx - whitespace 2020-04-11 20:03:45 +10:00
Phillip Stevens
2bbd93595e ATmega - update readme.md 2020-04-11 19:50:31 +10:00
Phillip Stevens
becc1d8b93 ATmegaxxx - match legacy whitespace 2020-04-11 19:16:31 +10:00
Phillip Stevens
62682ebe5b ATmegaxxxx - clarify initial stack setup 2020-04-11 18:37:00 +10:00
Phillip Stevens
10fcd90af1 ATmegaxxxx - remove Timer2 references 2020-04-11 18:25:02 +10:00
Phillip Stevens
52e6dfbd31
Note megaAVR 0-Series is unsupported. 2020-04-11 18:19:12 +10:00
Phillip Stevens
fa8cde691f ATmegaxxxx - refine RAMPZ configuration 2020-04-11 14:20:45 +10:00
Phillip Stevens
5052273cd7 ATmegaxxxx - add __AVR_HAVE_RAMPZ__ 2020-04-11 12:38:48 +10:00
Phillip Stevens
520456577a ATmegaxxxx - add __AVR_HAVE_RAMPZ__ 2020-04-11 12:24:22 +10:00
Phillip Stevens
670c00d3a5 ATmegaxxxx - remove Timer2 RTC variables 2020-04-11 12:05:39 +10:00
Phillip Stevens
c19e711ba5 ATmegaxxxx - discern architecture rather than device 2020-04-11 12:01:44 +10:00
Phillip Stevens
5e32393035 ATmegaxxxx - remove single line comments 2020-04-11 11:31:24 +10:00
Phillip Stevens
3ece178dd0 ATmegaxxxx - refine WDT config 2020-04-10 14:39:14 +10:00
Phillip Stevens
d356bfc02f atmega - add legacy type definitions 2020-04-09 17:28:22 +10:00
Phillip Stevens
d62af1e8a3
Update readme.md 2020-04-09 08:58:42 +10:00
Phillip Stevens
58c58af704
Create a readme.md 2020-04-09 08:56:57 +10:00
Phillip Stevens
ef7ab92de7 ATmegaxxxx - initial commit 2020-04-07 19:15:29 +10:00
Gaurav-Aggarwal-AWS
334de5d8ab
Enable ARMv7-M MPU ports to place FreeRTOS kernel code outside of flash (#46)
Problem Description
-------------------
The current flash organization in ARMv7-M MPU ports looks as follows:

__FLASH_segment_start__ ------->+-----------+<----- __FLASH_segment_start__
                                |  Vector   |
                                |   Table   |
                                |     +     |
                                |   Kernel  |
                                |    Code   |
                                +-----------+<-----  __privileged_functions_end__
                                |           |
                                |           |
                                |           |
                                |   Other   |
                                |   Code    |
                                |           |
                                |           |
                                |           |
   __FLASH_segment_end__ ------>+-----------+

The FreeRTOS kernel sets up the following MPU regions:

* Unprivileged Code - __FLASH_segment_start__ to __FLASH_segment_end__.
* Privileged Code - __FLASH_segment_start__ to __privileged_functions_end__.

The above setup assumes that the FreeRTOS kernel code
(i.e. privileged_functions) is placed at the beginning of the flash and,
therefore, uses __FLASH_segment_start__ as the starting location of the
privileged code. This prevents a user from placing the FreeRTOS kernel
code outside of flash (say to an external RAM) and still have vector
table at the beginning of flash (which is many times a hardware
requirement).

Solution
--------
This commit addresses the above limitation by using a new variable
__privileged_functions_start__ as the starting location of the
privileged code. This enables users to place the FreeRTOS kernel code
wherever they choose.

The FreeRTOS kernel now sets up the following MPU regions:

* Unprivileged Code - __FLASH_segment_start__ to __FLASH_segment_end__.
* Privileged Code - __privileged_functions_start__ to __privileged_functions_end__.

As a result, a user can now place the kernel code to an external RAM. A
possible organization is:

                                 Flash              External RAM
                              +------------+        +-----------+<------ __privileged_functions_start__
                              |   Vector   |        |           |
                              |   Table    |        |           |
                              |            |        |           |
__FLASH_segment_start__ ----->+------------+        |   Kernel  |
                              |            |        |    Code   |
                              |            |        |           |
                              |            |        |           |
                              |            |        |           |
                              |   Other    |        |           |
                              |    Code    |        +-----------+<------ __privileged_functions_end__
                              |            |
                              |            |
                              |            |
  __FLASH_segment_end__ ----->+------------+

Note that the above configuration places the vector table in an unmapped
region. This is okay because we enable the background region, and so the
vector table will still be accessible to the privileged code and not
accessible to the unprivileged code (vector table is only needed by the
privileged code).

Backward Compatibility
----------------------
The FreeRTOS kernel code now uses a new variable, namely
__privileged_functions_start__, which needs to be exported from linker
script to indicate the starting location of the privileged code. All of
our existing demos already export this variable and therefore, they will
continue to work.

If a user has created a project which does not export this variable,
they will get a linker error for unresolved symbol
__privileged_functions_start__. They need to export a variable
__privileged_functions_start__ with the value equal to
__FLASH_segment_start__.

Issue
-----
https://sourceforge.net/p/freertos/feature-requests/56/

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
2020-04-06 15:51:40 -07:00
Yuhui Zheng
464695a4f2
Synopsys ARC port, adding support for ARC EM and HS cores -- continued from PR #8. (#28)
Synopsys ARC port, adding support for ARC EM and HS cores.
2020-03-24 11:54:03 -07:00
Yuhui Zheng
a5531aade6 pxTCB is no longer needed in this local function. 2020-03-24 11:51:17 -07:00
WineQ圈9
3b8c72c669
Update tasks.c (#22)
An optimization for prvResetNextTaskUnblockTime().
2020-03-22 19:18:48 -07:00
David Vrabel
90a3584749 portable/GCC/Posix: add new port for Posix (Linux) applications
This is similar to the Windows port, allowing FreeRTOS kernel
applications to run as regular applications on Posix (Linux) systems.

You can use this in a 32-bit or 64-bit application (although there are
dynamic memory allocation trace points that do not support 64-bit
addresses).

Many of the same caveats of running an RTOS on a non-real-time system
apply, but this is still very useful for easy debugging/testing
applications in a simulated environment. In particular, it allows easy
use of tools such as valgrind.

You can call standard library functions from tasks but care must be
taken with any that internally take mutexes or block. This includes
malloc()/free() and many stdio functions (e.g., printf()).

Replacement malloc(), free(), realloc(), and calloc() functions are
provided which are safe. printf() needs to be called with a FreeRTOS
mutex help (or called from only a single task).

Each task is run in its own pthread, which makes debugging with
standard tools (such as GDB) easier backtraces for individual tasks
are available. Threads for non-running tasks are blocked in sigwait().

The stack for each task (thread) is allocated when the thread is
created, and the stack provided during task creation is not used. This
is so the stack has guard pages, to help with detecting stack
overflows.

Task switch is done by resuming the thread for the next task by
sending it the resume signal (SIGUSR1) and then suspending the current
thread.

The timer interrupt uses SIGALRM and care is taken to ensure that the
signal handler runs only on the thread for the current task.

The additional data needed per-thread is stored at the top on the
task's stack.

When a running task is being deleted, its thread is marked it as dying
so when we switch away from it it exits instead of suspending. This
ensures that even if the idle task doesn't run, threads are deleted
which allows for more threads to be created (if many tasks are being
created and deleted in rapid succession).

To further aid debugging, SIGINT (^C) is not blocked inside critical
sections. This allows it to be used break into GDB while in a critical
section. This means that care must be taken with any custom SIGINT
handlers as these are like NMIs.

This is somewhat inspired by an existing port by William Davy
(https://www.freertos.org/FreeRTOS-simulator-for-Linux.html) but it
takes a number of different approaches to make it switch tasks
reliableand there's little similarly with the original implementation.

- Critical sections block scheduling/"interrupts" by blocking signals
  using pthread_sigmask(). This is more expensive than attempting to
  use flags but works reliably and is analogous to the interrupt
  enable/disable on real hardware.

- Care is take to ensure that the SIGALRM handler (for the timer tick)
  is runnable only on the pthread for the running task. This makes
  tasks switches more straight-forward and reliable as we can suspend
  the thread while in the signal handler.

- Task switches save/restore the critical nesting on the stack.

- Only uses a single (SIGUSR1) signal which is ignored and thus GDB's
  default signal handling options won't trap/print on this signal.

- Extra per-thread data is stored on the task's stack, making it
  accessible in O(1) instead of performing a O(n) lookup of the array.

- Uses the task create/delete hooks in a similar way to the Windows
  port, rather than overloading trace points.
2020-03-20 16:14:08 -07:00
WineQ圈9
eff07c040a
Update tasks.c (#26)
Reopen this PR.
2020-03-19 09:00:05 -07:00
Yuhui Zheng
62f615f662
Adding url to direct users to FreeRTOS-Kernel github page. (#32) 2020-03-17 19:30:19 -07:00
Yuhui Zheng
1ebcac3c9f
Create pull_request_template.md
Using the same pull request template as what we have in FreeRTOS/FreeRTOS.
2020-03-17 13:11:11 -07:00
Yuhui Zheng
3f6cd683cb
Create SECURITY.md
Bring in SECURITY.md from aws/.github.
2020-03-17 13:08:50 -07:00
Yuhui Zheng
3f62dfdb81 Update issue templates
Adding bug report, documentation, and general inquiry templates. 

There's no easy way to redirect "general inquiry" directly to forum. If better option is available later, will update.
2020-03-17 13:06:09 -07:00
Gaurav-Aggarwal-AWS
177e79fc79
Add "Tickless Idle" support for ARMv8M ports (#29)
Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
2020-03-16 10:50:49 -07:00
RichardBarry
459dceb29c Fix Coverity warnings: In most cases the return value of xTaskResumeAll() is cast to void when it is not needed. This PR fixes a couple of instances in the heap_n.c implementations where that was not the case. 2020-03-16 10:20:25 -07:00
RichardBarry
5d28744feb Improve documentation for the ulTaskNotifyValueClear() and xTaskCatchUpTicks() API functions.
Move the prototype and documentation for xTaskCatchUpTicks() into the correct place in the task.h header file (in the public documentation from the private documentation).
Rename the variable that holds the return value in xTaskCatchUpTicks() to more accurately represent its meaning.
2020-03-15 20:24:18 -07:00
RichardBarry
b49eec35f6 The Windows port layer is built with both MSVC and GCC. GCC generated a warning relating to the variable lWaitForYield being set but not used. This change removes the variable. 2020-03-15 20:24:18 -07:00
WineQ圈9
180d0b8ee3
Update tasks.c (#24)
An error on trace argument.
In "xTaskPriorityDisinherit", the disinherit priority should be "pxTCB->uxBasePriority".
And, in "vTaskPriorityDisinheritAfterTimeout", the disinherit priority should be "uxPriorityToUse", which might not be "pxTCB->uxBasePriority".
2020-03-14 11:58:19 -07:00
Vladimir Umek
9b02ee0af2 Cortex-A9 port: Adding stack alignment directive to assembly code 2020-03-13 12:19:31 -07:00
Sachin Parekh
8e3cf978c4 Xtensa_ESP32: Change _iram_end to _iram_text_end
xtensa_loadstore_handler.S uses _iram_end to prevent modification of IRAM
code. With the LoadStore exception handler in place, IRAM can also be
used for .bss and .data section. Hence the sanity check should be based
upon _iram_text_end and not _iram_end
2020-02-28 15:15:47 -08:00