From 6193567317474a9e520bdbf11b593548a55546b6 Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Sun, 29 May 2022 07:03:53 +0000 Subject: [PATCH] Hosted RT compiling, to be tested. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@15643 27425a3e-05d8-49a3-a47f-9c15f0e5edd8 --- .../STM32G474xE_SB.ld | 6 +- ...ild-ch.elf)(OpenOCD, Flash and Run).launch | 4 +- ...ild-ch.elf)(OpenOCD, Flash and Run).launch | 2 +- .../main.c | 4 +- .../.cproject | 4 +- .../.project | 2 +- .../Makefile | 0 .../cfg/chconf.h | 840 ++++++++++++++++++ .../main.c | 0 .../sandbox.ld | 2 +- .../.cproject | 4 +- .../.project | 2 +- .../Makefile | 0 .../main.c | 0 .../sandbox.ld | 2 +- demos/various/sbtest/.cproject | 55 -- demos/various/sbtest/.project | 33 - demos/various/sbtest/Makefile | 48 - demos/various/sbtest/main.c | 24 - demos/various/sbtest/sandbox.ld | 39 - demos/various/sbtest/start.c | 7 - os/common/ports/ARMvx-M-SB/chcore.c | 77 ++ os/common/ports/ARMvx-M-SB/chcore.h | 226 ++--- .../ports/ARMvx-M-SB/compilers/GCC/mk/port.mk | 4 +- .../ports/ARMvx-M-SB/compilers/GCC/vectors.S | 27 +- os/sb/user/sbuser.h | 2 +- 26 files changed, 1002 insertions(+), 412 deletions(-) rename demos/various/{SB-CLIENT-32k-08070000-4k-2001E000 => SB-CLIENT-32k-08070000-16k-20018000}/.cproject (95%) rename demos/various/{SB-CLIENT-32k-08078000-4k-2001F000 => SB-CLIENT-32k-08070000-16k-20018000}/.project (94%) rename demos/various/{SB-CLIENT-32k-08070000-4k-2001E000 => SB-CLIENT-32k-08070000-16k-20018000}/Makefile (100%) create mode 100644 demos/various/SB-CLIENT-32k-08070000-16k-20018000/cfg/chconf.h rename demos/various/{SB-CLIENT-32k-08070000-4k-2001E000 => SB-CLIENT-32k-08070000-16k-20018000}/main.c (100%) rename demos/various/{SB-CLIENT-32k-08070000-4k-2001E000 => SB-CLIENT-32k-08070000-16k-20018000}/sandbox.ld (92%) rename demos/various/{SB-CLIENT-32k-08078000-4k-2001F000 => SB-CLIENT-32k-08078000-16k-2001C000}/.cproject (95%) rename demos/various/{SB-CLIENT-32k-08070000-4k-2001E000 => SB-CLIENT-32k-08078000-16k-2001C000}/.project (94%) rename demos/various/{SB-CLIENT-32k-08078000-4k-2001F000 => SB-CLIENT-32k-08078000-16k-2001C000}/Makefile (100%) rename demos/various/{SB-CLIENT-32k-08078000-4k-2001F000 => SB-CLIENT-32k-08078000-16k-2001C000}/main.c (100%) rename demos/various/{SB-CLIENT-32k-08078000-4k-2001F000 => SB-CLIENT-32k-08078000-16k-2001C000}/sandbox.ld (92%) delete mode 100644 demos/various/sbtest/.cproject delete mode 100644 demos/various/sbtest/.project delete mode 100644 demos/various/sbtest/Makefile delete mode 100644 demos/various/sbtest/main.c delete mode 100644 demos/various/sbtest/sandbox.ld delete mode 100644 demos/various/sbtest/start.c create mode 100644 os/common/ports/ARMvx-M-SB/chcore.c diff --git a/demos/STM32/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC/STM32G474xE_SB.ld b/demos/STM32/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC/STM32G474xE_SB.ld index 0d4fee4a7..32330977b 100644 --- a/demos/STM32/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC/STM32G474xE_SB.ld +++ b/demos/STM32/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC/STM32G474xE_SB.ld @@ -27,9 +27,9 @@ MEMORY flash5 (rx) : org = 0x00000000, len = 0 flash6 (rx) : org = 0x00000000, len = 0 flash7 (rx) : org = 0x00000000, len = 0 - ram0 (wx) : org = 0x20000000, len = 128k - 8k /* Host data. */ - ram1 (wx) : org = 0x2001E000, len = 4k /* Sandbox 1 data. */ - ram2 (wx) : org = 0x2001F000, len = 4k /* Sandbox 2 data. */ + ram0 (wx) : org = 0x20000000, len = 128k - 32k /* Host data. */ + ram1 (wx) : org = 0x20018000, len = 16k /* Sandbox 1 data. */ + ram2 (wx) : org = 0x2001C000, len = 16k /* Sandbox 2 data. */ ram3 (wx) : org = 0x00000000, len = 0 ram4 (wx) : org = 0x00000000, len = 0 ram5 (wx) : org = 0x00000000, len = 0 diff --git a/demos/STM32/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC/debug/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC (SB1)(build-ch.elf)(OpenOCD, Flash and Run).launch b/demos/STM32/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC/debug/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC (SB1)(build-ch.elf)(OpenOCD, Flash and Run).launch index 9811a61ce..71f8d938a 100644 --- a/demos/STM32/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC/debug/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC (SB1)(build-ch.elf)(OpenOCD, Flash and Run).launch +++ b/demos/STM32/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC/debug/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC (SB1)(build-ch.elf)(OpenOCD, Flash and Run).launch @@ -6,7 +6,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/demos/STM32/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC/debug/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC (build-ch.elf)(OpenOCD, Flash and Run).launch b/demos/STM32/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC/debug/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC (build-ch.elf)(OpenOCD, Flash and Run).launch index 5d5f87b5f..8c173f211 100644 --- a/demos/STM32/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC/debug/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC (build-ch.elf)(OpenOCD, Flash and Run).launch +++ b/demos/STM32/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC/debug/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC (build-ch.elf)(OpenOCD, Flash and Run).launch @@ -6,7 +6,7 @@ - + diff --git a/demos/STM32/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC/main.c b/demos/STM32/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC/main.c index d239b7529..59c5b08ef 100644 --- a/demos/STM32/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC/main.c +++ b/demos/STM32/RT-STM32G474RE-NUCLEO64-SB_HOST_STATIC/main.c @@ -220,10 +220,10 @@ int main(void) { MPU_RASR_SIZE_64K | MPU_RASR_ENABLE); mpuConfigureRegion(MPU_REGION_1, - 0x2001E000U, + 0x20018000U, MPU_RASR_ATTR_AP_RW_RW | MPU_RASR_ATTR_CACHEABLE_WB_WA | - MPU_RASR_SIZE_8K | + MPU_RASR_SIZE_32K | MPU_RASR_ENABLE); /* Starting sandboxed thread 1.*/ diff --git a/demos/various/SB-CLIENT-32k-08070000-4k-2001E000/.cproject b/demos/various/SB-CLIENT-32k-08070000-16k-20018000/.cproject similarity index 95% rename from demos/various/SB-CLIENT-32k-08070000-4k-2001E000/.cproject rename to demos/various/SB-CLIENT-32k-08070000-16k-20018000/.cproject index 76d05e86e..97c654dff 100644 --- a/demos/various/SB-CLIENT-32k-08070000-4k-2001E000/.cproject +++ b/demos/various/SB-CLIENT-32k-08070000-16k-20018000/.cproject @@ -37,7 +37,7 @@ - + @@ -48,7 +48,7 @@ - + diff --git a/demos/various/SB-CLIENT-32k-08078000-4k-2001F000/.project b/demos/various/SB-CLIENT-32k-08070000-16k-20018000/.project similarity index 94% rename from demos/various/SB-CLIENT-32k-08078000-4k-2001F000/.project rename to demos/various/SB-CLIENT-32k-08070000-16k-20018000/.project index d0998a083..fd4d9013d 100644 --- a/demos/various/SB-CLIENT-32k-08078000-4k-2001F000/.project +++ b/demos/various/SB-CLIENT-32k-08070000-16k-20018000/.project @@ -1,6 +1,6 @@ - SB-CLIENT-32k-08078000-4k-2001F000 + SB-CLIENT-32k-08070000-16k-20018000 diff --git a/demos/various/SB-CLIENT-32k-08070000-4k-2001E000/Makefile b/demos/various/SB-CLIENT-32k-08070000-16k-20018000/Makefile similarity index 100% rename from demos/various/SB-CLIENT-32k-08070000-4k-2001E000/Makefile rename to demos/various/SB-CLIENT-32k-08070000-16k-20018000/Makefile diff --git a/demos/various/SB-CLIENT-32k-08070000-16k-20018000/cfg/chconf.h b/demos/various/SB-CLIENT-32k-08070000-16k-20018000/cfg/chconf.h new file mode 100644 index 000000000..a3ce6ea5e --- /dev/null +++ b/demos/various/SB-CLIENT-32k-08070000-16k-20018000/cfg/chconf.h @@ -0,0 +1,840 @@ +/* + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file rt/templates/chconf.h + * @brief Configuration file template. + * @details A copy of this file must be placed in each project directory, it + * contains the application specific kernel settings. + * + * @addtogroup config + * @details Kernel related settings and hooks. + * @{ + */ + +#ifndef CHCONF_H +#define CHCONF_H + +#define _CHIBIOS_RT_CONF_ +#define _CHIBIOS_RT_CONF_VER_7_0_ + +/*===========================================================================*/ +/** + * @name System settings + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Handling of instances. + * @note If enabled then threads assigned to various instances can + * interact each other using the same synchronization objects. + * If disabled then each OS instance is a separate world, no + * direct interactions are handled by the OS. + */ +#if !defined(CH_CFG_SMP_MODE) +#define CH_CFG_SMP_MODE FALSE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name System timers settings + * @{ + */ +/*===========================================================================*/ + +/** + * @brief System time counter resolution. + * @note Allowed values are 16, 32 or 64 bits. + */ +#if !defined(CH_CFG_ST_RESOLUTION) +#define CH_CFG_ST_RESOLUTION 32 +#endif + +/** + * @brief System tick frequency. + * @details Frequency of the system timer that drives the system ticks. This + * setting also defines the system tick time unit. + */ +#if !defined(CH_CFG_ST_FREQUENCY) +#define CH_CFG_ST_FREQUENCY 1000 +#endif + +/** + * @brief Time intervals data size. + * @note Allowed values are 16, 32 or 64 bits. + */ +#if !defined(CH_CFG_INTERVALS_SIZE) +#define CH_CFG_INTERVALS_SIZE 32 +#endif + +/** + * @brief Time types data size. + * @note Allowed values are 16 or 32 bits. + */ +#if !defined(CH_CFG_TIME_TYPES_SIZE) +#define CH_CFG_TIME_TYPES_SIZE 32 +#endif + +/** + * @brief Time delta constant for the tick-less mode. + * @note If this value is zero then the system uses the classic + * periodic tick. This value represents the minimum number + * of ticks that is safe to specify in a timeout directive. + * The value one is not valid, timeouts are rounded up to + * this value. + */ +#if !defined(CH_CFG_ST_TIMEDELTA) +#define CH_CFG_ST_TIMEDELTA 0 +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Kernel parameters and options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Round robin interval. + * @details This constant is the number of system ticks allowed for the + * threads before preemption occurs. Setting this value to zero + * disables the preemption for threads with equal priority and the + * round robin becomes cooperative. Note that higher priority + * threads can still preempt, the kernel is always preemptive. + * @note Disabling the round robin preemption makes the kernel more compact + * and generally faster. + * @note The round robin preemption is not supported in tickless mode and + * must be set to zero in that case. + */ +#if !defined(CH_CFG_TIME_QUANTUM) +#define CH_CFG_TIME_QUANTUM 0 +#endif + +/** + * @brief Idle thread automatic spawn suppression. + * @details When this option is activated the function @p chSysInit() + * does not spawn the idle thread. The application @p main() + * function becomes the idle thread and must implement an + * infinite loop. + */ +#if !defined(CH_CFG_NO_IDLE_THREAD) +#define CH_CFG_NO_IDLE_THREAD FALSE +#endif + +/** + * @brief Kernel hardening level. + * @details This option is the level of functional-safety checks enabled + * in the kerkel. The meaning is: + * - 0: No checks, maximum performance. + * - 1: Reasonable checks. + * - 2: All checks. + * . + */ +#if !defined(CH_CFG_HARDENING_LEVEL) +#define CH_CFG_HARDENING_LEVEL 0 +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Performance options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief OS optimization. + * @details If enabled then time efficient rather than space efficient code + * is used when two possible implementations exist. + * + * @note This is not related to the compiler optimization options. + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_OPTIMIZE_SPEED) +#define CH_CFG_OPTIMIZE_SPEED TRUE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Subsystem options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Time Measurement APIs. + * @details If enabled then the time measurement APIs are included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_TM) +#define CH_CFG_USE_TM TRUE +#endif + +/** + * @brief Time Stamps APIs. + * @details If enabled then the time stamps APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_TIMESTAMP) +#define CH_CFG_USE_TIMESTAMP TRUE +#endif + +/** + * @brief Threads registry APIs. + * @details If enabled then the registry APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_REGISTRY) +#define CH_CFG_USE_REGISTRY TRUE +#endif + +/** + * @brief Threads synchronization APIs. + * @details If enabled then the @p chThdWait() function is included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_WAITEXIT) +#define CH_CFG_USE_WAITEXIT TRUE +#endif + +/** + * @brief Semaphores APIs. + * @details If enabled then the Semaphores APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_SEMAPHORES) +#define CH_CFG_USE_SEMAPHORES TRUE +#endif + +/** + * @brief Semaphores queuing mode. + * @details If enabled then the threads are enqueued on semaphores by + * priority rather than in FIFO order. + * + * @note The default is @p FALSE. Enable this if you have special + * requirements. + * @note Requires @p CH_CFG_USE_SEMAPHORES. + */ +#if !defined(CH_CFG_USE_SEMAPHORES_PRIORITY) +#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE +#endif + +/** + * @brief Mutexes APIs. + * @details If enabled then the mutexes APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_MUTEXES) +#define CH_CFG_USE_MUTEXES TRUE +#endif + +/** + * @brief Enables recursive behavior on mutexes. + * @note Recursive mutexes are heavier and have an increased + * memory footprint. + * + * @note The default is @p FALSE. + * @note Requires @p CH_CFG_USE_MUTEXES. + */ +#if !defined(CH_CFG_USE_MUTEXES_RECURSIVE) +#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE +#endif + +/** + * @brief Conditional Variables APIs. + * @details If enabled then the conditional variables APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_MUTEXES. + */ +#if !defined(CH_CFG_USE_CONDVARS) +#define CH_CFG_USE_CONDVARS TRUE +#endif + +/** + * @brief Conditional Variables APIs with timeout. + * @details If enabled then the conditional variables APIs with timeout + * specification are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_CONDVARS. + */ +#if !defined(CH_CFG_USE_CONDVARS_TIMEOUT) +#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE +#endif + +/** + * @brief Events Flags APIs. + * @details If enabled then the event flags APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_EVENTS) +#define CH_CFG_USE_EVENTS TRUE +#endif + +/** + * @brief Events Flags APIs with timeout. + * @details If enabled then the events APIs with timeout specification + * are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_EVENTS. + */ +#if !defined(CH_CFG_USE_EVENTS_TIMEOUT) +#define CH_CFG_USE_EVENTS_TIMEOUT TRUE +#endif + +/** + * @brief Synchronous Messages APIs. + * @details If enabled then the synchronous messages APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_MESSAGES) +#define CH_CFG_USE_MESSAGES TRUE +#endif + +/** + * @brief Synchronous Messages queuing mode. + * @details If enabled then messages are served by priority rather than in + * FIFO order. + * + * @note The default is @p FALSE. Enable this if you have special + * requirements. + * @note Requires @p CH_CFG_USE_MESSAGES. + */ +#if !defined(CH_CFG_USE_MESSAGES_PRIORITY) +#define CH_CFG_USE_MESSAGES_PRIORITY FALSE +#endif + +/** + * @brief Dynamic Threads APIs. + * @details If enabled then the dynamic threads creation APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_WAITEXIT. + * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS. + */ +#if !defined(CH_CFG_USE_DYNAMIC) +#define CH_CFG_USE_DYNAMIC TRUE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name OSLIB options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Mailboxes APIs. + * @details If enabled then the asynchronous messages (mailboxes) APIs are + * included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_SEMAPHORES. + */ +#if !defined(CH_CFG_USE_MAILBOXES) +#define CH_CFG_USE_MAILBOXES TRUE +#endif + +/** + * @brief Memory checks APIs. + * @details If enabled then the memory checks APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_MEMCHECKS) +#define CH_CFG_USE_MEMCHECKS TRUE +#endif + +/** + * @brief Core Memory Manager APIs. + * @details If enabled then the core memory manager APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_MEMCORE) +#define CH_CFG_USE_MEMCORE TRUE +#endif + +/** + * @brief Managed RAM size. + * @details Size of the RAM area to be managed by the OS. If set to zero + * then the whole available RAM is used. The core memory is made + * available to the heap allocator and/or can be used directly through + * the simplified core memory allocator. + * + * @note In order to let the OS manage the whole RAM the linker script must + * provide the @p __heap_base__ and @p __heap_end__ symbols. + * @note Requires @p CH_CFG_USE_MEMCORE. + */ +#if !defined(CH_CFG_MEMCORE_SIZE) +#define CH_CFG_MEMCORE_SIZE 0 +#endif + +/** + * @brief Heap Allocator APIs. + * @details If enabled then the memory heap allocator APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or + * @p CH_CFG_USE_SEMAPHORES. + * @note Mutexes are recommended. + */ +#if !defined(CH_CFG_USE_HEAP) +#define CH_CFG_USE_HEAP TRUE +#endif + +/** + * @brief Memory Pools Allocator APIs. + * @details If enabled then the memory pools allocator APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_MEMPOOLS) +#define CH_CFG_USE_MEMPOOLS TRUE +#endif + +/** + * @brief Objects FIFOs APIs. + * @details If enabled then the objects FIFOs APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_OBJ_FIFOS) +#define CH_CFG_USE_OBJ_FIFOS TRUE +#endif + +/** + * @brief Pipes APIs. + * @details If enabled then the pipes APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_PIPES) +#define CH_CFG_USE_PIPES TRUE +#endif + +/** + * @brief Objects Caches APIs. + * @details If enabled then the objects caches APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_OBJ_CACHES) +#define CH_CFG_USE_OBJ_CACHES TRUE +#endif + +/** + * @brief Delegate threads APIs. + * @details If enabled then the delegate threads APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_DELEGATES) +#define CH_CFG_USE_DELEGATES TRUE +#endif + +/** + * @brief Jobs Queues APIs. + * @details If enabled then the jobs queues APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_JOBS) +#define CH_CFG_USE_JOBS TRUE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Objects factory options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Objects Factory APIs. + * @details If enabled then the objects factory APIs are included in the + * kernel. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_CFG_USE_FACTORY) +#define CH_CFG_USE_FACTORY TRUE +#endif + +/** + * @brief Maximum length for object names. + * @details If the specified length is zero then the name is stored by + * pointer but this could have unintended side effects. + */ +#if !defined(CH_CFG_FACTORY_MAX_NAMES_LENGTH) +#define CH_CFG_FACTORY_MAX_NAMES_LENGTH 8 +#endif + +/** + * @brief Enables the registry of generic objects. + */ +#if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY) +#define CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE +#endif + +/** + * @brief Enables factory for generic buffers. + */ +#if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS) +#define CH_CFG_FACTORY_GENERIC_BUFFERS TRUE +#endif + +/** + * @brief Enables factory for semaphores. + */ +#if !defined(CH_CFG_FACTORY_SEMAPHORES) +#define CH_CFG_FACTORY_SEMAPHORES TRUE +#endif + +/** + * @brief Enables factory for mailboxes. + */ +#if !defined(CH_CFG_FACTORY_MAILBOXES) +#define CH_CFG_FACTORY_MAILBOXES TRUE +#endif + +/** + * @brief Enables factory for objects FIFOs. + */ +#if !defined(CH_CFG_FACTORY_OBJ_FIFOS) +#define CH_CFG_FACTORY_OBJ_FIFOS TRUE +#endif + +/** + * @brief Enables factory for Pipes. + */ +#if !defined(CH_CFG_FACTORY_PIPES) || defined(__DOXYGEN__) +#define CH_CFG_FACTORY_PIPES TRUE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Debug options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Debug option, kernel statistics. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_DBG_STATISTICS) +#define CH_DBG_STATISTICS TRUE +#endif + +/** + * @brief Debug option, system state check. + * @details If enabled the correct call protocol for system APIs is checked + * at runtime. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_DBG_SYSTEM_STATE_CHECK) +#define CH_DBG_SYSTEM_STATE_CHECK TRUE +#endif + +/** + * @brief Debug option, parameters checks. + * @details If enabled then the checks on the API functions input + * parameters are activated. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_DBG_ENABLE_CHECKS) +#define CH_DBG_ENABLE_CHECKS TRUE +#endif + +/** + * @brief Debug option, consistency checks. + * @details If enabled then all the assertions in the kernel code are + * activated. This includes consistency checks inside the kernel, + * runtime anomalies and port-defined checks. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_DBG_ENABLE_ASSERTS) +#define CH_DBG_ENABLE_ASSERTS TRUE +#endif + +/** + * @brief Debug option, trace buffer. + * @details If enabled then the trace buffer is activated. + * + * @note The default is @p CH_DBG_TRACE_MASK_DISABLED. + */ +#if !defined(CH_DBG_TRACE_MASK) +#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_ALL +#endif + +/** + * @brief Trace buffer entries. + * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is + * different from @p CH_DBG_TRACE_MASK_DISABLED. + */ +#if !defined(CH_DBG_TRACE_BUFFER_SIZE) +#define CH_DBG_TRACE_BUFFER_SIZE 128 +#endif + +/** + * @brief Debug option, stack checks. + * @details If enabled then a runtime stack check is performed. + * + * @note The default is @p FALSE. + * @note The stack check is performed in a architecture/port dependent way. + * It may not be implemented or some ports. + * @note The default failure mode is to halt the system with the global + * @p panic_msg variable set to @p NULL. + */ +#if !defined(CH_DBG_ENABLE_STACK_CHECK) +#define CH_DBG_ENABLE_STACK_CHECK FALSE +#endif + +/** + * @brief Debug option, stacks initialization. + * @details If enabled then the threads working area is filled with a byte + * value when a thread is created. This can be useful for the + * runtime measurement of the used stack. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_DBG_FILL_THREADS) +#define CH_DBG_FILL_THREADS TRUE +#endif + +/** + * @brief Debug option, threads profiling. + * @details If enabled then a field is added to the @p thread_t structure that + * counts the system ticks occurred while executing the thread. + * + * @note The default is @p FALSE. + * @note This debug option is not currently compatible with the + * tickless mode. + */ +#if !defined(CH_DBG_THREADS_PROFILING) +#define CH_DBG_THREADS_PROFILING FALSE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Kernel hooks + * @{ + */ +/*===========================================================================*/ + +/** + * @brief System structure extension. + * @details User fields added to the end of the @p ch_system_t structure. + */ +#define CH_CFG_SYSTEM_EXTRA_FIELDS \ + /* Add system custom fields here.*/ + +/** + * @brief System initialization hook. + * @details User initialization code added to the @p chSysInit() function + * just before interrupts are enabled globally. + */ +#define CH_CFG_SYSTEM_INIT_HOOK() { \ + /* Add system initialization code here.*/ \ +} + +/** + * @brief OS instance structure extension. + * @details User fields added to the end of the @p os_instance_t structure. + */ +#define CH_CFG_OS_INSTANCE_EXTRA_FIELDS \ + /* Add OS instance custom fields here.*/ + +/** + * @brief OS instance initialization hook. + * + * @param[in] oip pointer to the @p os_instance_t structure + */ +#define CH_CFG_OS_INSTANCE_INIT_HOOK(oip) { \ + /* Add OS instance initialization code here.*/ \ +} + +/** + * @brief Threads descriptor structure extension. + * @details User fields added to the end of the @p thread_t structure. + */ +#define CH_CFG_THREAD_EXTRA_FIELDS \ + /* Add threads custom fields here.*/ + +/** + * @brief Threads initialization hook. + * @details User initialization code added to the @p _thread_init() function. + * + * @note It is invoked from within @p _thread_init() and implicitly from all + * the threads creation APIs. + * + * @param[in] tp pointer to the @p thread_t structure + */ +#define CH_CFG_THREAD_INIT_HOOK(tp) { \ + /* Add threads initialization code here.*/ \ +} + +/** + * @brief Threads finalization hook. + * @details User finalization code added to the @p chThdExit() API. + * + * @param[in] tp pointer to the @p thread_t structure + */ +#define CH_CFG_THREAD_EXIT_HOOK(tp) { \ + /* Add threads finalization code here.*/ \ +} + +/** + * @brief Context switch hook. + * @details This hook is invoked just before switching between threads. + * + * @param[in] ntp thread being switched in + * @param[in] otp thread being switched out + */ +#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \ + /* Context switch code here.*/ \ +} + +/** + * @brief ISR enter hook. + */ +#define CH_CFG_IRQ_PROLOGUE_HOOK() { \ + /* IRQ prologue code here.*/ \ +} + +/** + * @brief ISR exit hook. + */ +#define CH_CFG_IRQ_EPILOGUE_HOOK() { \ + /* IRQ epilogue code here.*/ \ +} + +/** + * @brief Idle thread enter hook. + * @note This hook is invoked within a critical zone, no OS functions + * should be invoked from here. + * @note This macro can be used to activate a power saving mode. + */ +#define CH_CFG_IDLE_ENTER_HOOK() { \ + /* Idle-enter code here.*/ \ +} + +/** + * @brief Idle thread leave hook. + * @note This hook is invoked within a critical zone, no OS functions + * should be invoked from here. + * @note This macro can be used to deactivate a power saving mode. + */ +#define CH_CFG_IDLE_LEAVE_HOOK() { \ + /* Idle-leave code here.*/ \ +} + +/** + * @brief Idle Loop hook. + * @details This hook is continuously invoked by the idle thread loop. + */ +#define CH_CFG_IDLE_LOOP_HOOK() { \ + /* Idle loop code here.*/ \ +} + +/** + * @brief System tick event hook. + * @details This hook is invoked in the system tick handler immediately + * after processing the virtual timers queue. + */ +#define CH_CFG_SYSTEM_TICK_HOOK() { \ + /* System tick event code here.*/ \ +} + +/** + * @brief System halt hook. + * @details This hook is invoked in case to a system halting error before + * the system is halted. + */ +#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \ + /* System halt code here.*/ \ +} + +/** + * @brief Trace hook. + * @details This hook is invoked each time a new record is written in the + * trace buffer. + */ +#define CH_CFG_TRACE_HOOK(tep) { \ + /* Trace code here.*/ \ +} + +/** + * @brief Runtime Faults Collection Unit hook. + * @details This hook is invoked each time new faults are collected and stored. + */ +#define CH_CFG_RUNTIME_FAULTS_HOOK(mask) { \ + /* Faults handling code here.*/ \ +} + +/** @} */ + +/*===========================================================================*/ +/* Port-specific settings (override port settings defaulted in chcore.h). */ +/*===========================================================================*/ + +#endif /* CHCONF_H */ + +/** @} */ diff --git a/demos/various/SB-CLIENT-32k-08070000-4k-2001E000/main.c b/demos/various/SB-CLIENT-32k-08070000-16k-20018000/main.c similarity index 100% rename from demos/various/SB-CLIENT-32k-08070000-4k-2001E000/main.c rename to demos/various/SB-CLIENT-32k-08070000-16k-20018000/main.c diff --git a/demos/various/SB-CLIENT-32k-08070000-4k-2001E000/sandbox.ld b/demos/various/SB-CLIENT-32k-08070000-16k-20018000/sandbox.ld similarity index 92% rename from demos/various/SB-CLIENT-32k-08070000-4k-2001E000/sandbox.ld rename to demos/various/SB-CLIENT-32k-08070000-16k-20018000/sandbox.ld index 1e07dc585..3f968ad7a 100644 --- a/demos/various/SB-CLIENT-32k-08070000-4k-2001E000/sandbox.ld +++ b/demos/various/SB-CLIENT-32k-08070000-16k-20018000/sandbox.ld @@ -20,7 +20,7 @@ MEMORY { flash0 (rx) : org = 0x08070000, len = 32k - ram0 (wx) : org = 0x2001E000, len = 4k + ram0 (wx) : org = 0x20018000, len = 16k } /* Flash region to be used for exception vectors.*/ diff --git a/demos/various/SB-CLIENT-32k-08078000-4k-2001F000/.cproject b/demos/various/SB-CLIENT-32k-08078000-16k-2001C000/.cproject similarity index 95% rename from demos/various/SB-CLIENT-32k-08078000-4k-2001F000/.cproject rename to demos/various/SB-CLIENT-32k-08078000-16k-2001C000/.cproject index f6982e145..ab581bdf2 100644 --- a/demos/various/SB-CLIENT-32k-08078000-4k-2001F000/.cproject +++ b/demos/various/SB-CLIENT-32k-08078000-16k-2001C000/.cproject @@ -37,7 +37,7 @@ - + @@ -48,7 +48,7 @@ - + diff --git a/demos/various/SB-CLIENT-32k-08070000-4k-2001E000/.project b/demos/various/SB-CLIENT-32k-08078000-16k-2001C000/.project similarity index 94% rename from demos/various/SB-CLIENT-32k-08070000-4k-2001E000/.project rename to demos/various/SB-CLIENT-32k-08078000-16k-2001C000/.project index 1f29b5f2f..2e5f087a9 100644 --- a/demos/various/SB-CLIENT-32k-08070000-4k-2001E000/.project +++ b/demos/various/SB-CLIENT-32k-08078000-16k-2001C000/.project @@ -1,6 +1,6 @@ - SB-CLIENT-32k-08070000-4k-2001E000 + SB-CLIENT-32k-08078000-16k-2001C000 diff --git a/demos/various/SB-CLIENT-32k-08078000-4k-2001F000/Makefile b/demos/various/SB-CLIENT-32k-08078000-16k-2001C000/Makefile similarity index 100% rename from demos/various/SB-CLIENT-32k-08078000-4k-2001F000/Makefile rename to demos/various/SB-CLIENT-32k-08078000-16k-2001C000/Makefile diff --git a/demos/various/SB-CLIENT-32k-08078000-4k-2001F000/main.c b/demos/various/SB-CLIENT-32k-08078000-16k-2001C000/main.c similarity index 100% rename from demos/various/SB-CLIENT-32k-08078000-4k-2001F000/main.c rename to demos/various/SB-CLIENT-32k-08078000-16k-2001C000/main.c diff --git a/demos/various/SB-CLIENT-32k-08078000-4k-2001F000/sandbox.ld b/demos/various/SB-CLIENT-32k-08078000-16k-2001C000/sandbox.ld similarity index 92% rename from demos/various/SB-CLIENT-32k-08078000-4k-2001F000/sandbox.ld rename to demos/various/SB-CLIENT-32k-08078000-16k-2001C000/sandbox.ld index 2a7a022b0..27c893a6e 100644 --- a/demos/various/SB-CLIENT-32k-08078000-4k-2001F000/sandbox.ld +++ b/demos/various/SB-CLIENT-32k-08078000-16k-2001C000/sandbox.ld @@ -20,7 +20,7 @@ MEMORY { flash0 (rx) : org = 0x08078000, len = 32k - ram0 (wx) : org = 0x2001F000, len = 4k + ram0 (wx) : org = 0x2001C000, len = 16k } /* Flash region to be used for exception vectors.*/ diff --git a/demos/various/sbtest/.cproject b/demos/various/sbtest/.cproject deleted file mode 100644 index d6ff59f5d..000000000 --- a/demos/various/sbtest/.cproject +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/demos/various/sbtest/.project b/demos/various/sbtest/.project deleted file mode 100644 index b5a80b5e0..000000000 --- a/demos/various/sbtest/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - sbtest - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - - - os - 2 - CHIBIOS/os - - - diff --git a/demos/various/sbtest/Makefile b/demos/various/sbtest/Makefile deleted file mode 100644 index 4592812ff..000000000 --- a/demos/various/sbtest/Makefile +++ /dev/null @@ -1,48 +0,0 @@ -CROSS?=arm-none-eabi- -CC=$(CROSS)gcc -LD=$(CROSS)gcc -STRIP=$(CROSS)strip -SIZE=$(CROSS)size - -SRC=main.c start.c - -OPT?=0 - -CFLAGS=-mcpu=cortex-m3 -mthumb -O$(OPT) -ggdb3 \ - -mword-relocations -mlong-calls -fno-common - -LDFLAGS=-r -Bsymbolic -nostartfiles \ - -mcpu=cortex-m3 -mthumb -mlong-calls -fno-common \ - -T sandbox.ld - -OBJS=$(SRC:.c=.o) -DEPS=$(SRC:.c=.d) - -all: app.elf - --include $(DEPS) - -%.o: %.c $(MAKEFILE_LIST) - @echo " CC $<" - @$(CC) -MMD $(CFLAGS) -o $@ -c $< - -app.elf: $(OBJS) - @echo " LINK $@" - @$(LD) $(LDFLAGS) -o $@ $^ - @$(STRIP) -g -o app-striped.elf $@ - @$(SIZE) --common $@ - @echo " Creating list..." - @$(CROSS)objdump -hpxdSsrt app.elf > app.elf.list - @$(CROSS)readelf -atSln app.elf > app.elf.read - -.PHONY: clean all list - -clean: - @echo " CLEAN" - @rm -fR $(OBJS) $(DEPS) *.elf - @rm -f app.elf.list app.elf.read oocd.log - -list: - @echo " Creating list..." - @$(CROSS)objdump -hpxdSsrt app.elf > app.elf.list - @$(CROSS)readelf -atSln app.elf > app.elf.read diff --git a/demos/various/sbtest/main.c b/demos/various/sbtest/main.c deleted file mode 100644 index c96c35563..000000000 --- a/demos/various/sbtest/main.c +++ /dev/null @@ -1,24 +0,0 @@ -#include - -int bssvar; -int datavar = 5; -const int rodatavar = 18; - -static void foo(void); - -static void xxx(void) { - -} - -int main(void) { - - foo(); - - while (true) { - xxx(); - } -} - -static void foo(void) { - -} diff --git a/demos/various/sbtest/sandbox.ld b/demos/various/sbtest/sandbox.ld deleted file mode 100644 index 552f723ab..000000000 --- a/demos/various/sbtest/sandbox.ld +++ /dev/null @@ -1,39 +0,0 @@ -ENTRY(_start) - -PHDRS -{ - text PT_LOAD ; - data PT_LOAD ; -} - -SECTIONS -{ - .text 0x00000000 : - { - *(.text) - *(.text.*) - } : text - - .rodata : - { - *(.rodata) - *(.rodata1) - *(.rodata.*) - } - - .data : - { - *(.data) - *(.data1) - *(.data.*) - } : data - - .bss : - { - *(.bss) - *(.bss.*) - *(.sbss) - *(.sbss.*) - *(COMMON) - } -} diff --git a/demos/various/sbtest/start.c b/demos/various/sbtest/start.c deleted file mode 100644 index f5909ff48..000000000 --- a/demos/various/sbtest/start.c +++ /dev/null @@ -1,7 +0,0 @@ -extern void main(void); - -void (*mainptr)(void) = main; - -void _start(void) { - main(); -} diff --git a/os/common/ports/ARMvx-M-SB/chcore.c b/os/common/ports/ARMvx-M-SB/chcore.c new file mode 100644 index 000000000..d5ec3919b --- /dev/null +++ b/os/common/ports/ARMvx-M-SB/chcore.c @@ -0,0 +1,77 @@ +/* + ChibiOS - Copyright (C) 2006,2007,2008,2009,2010,2011,2012,2013,2014, + 2015,2016,2017,2018,2019,2020,2021 Giovanni Di Sirio. + + This file is part of ChibiOS. + + ChibiOS is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation version 3 of the License. + + ChibiOS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/** + * @file ARMvx-M-SB/chcore.c + * @brief ARMvx-M-SB port code. + * + * @addtogroup ARMVXM_SB_CORE + * @{ + */ + +#include "ch.h" + +/*===========================================================================*/ +/* Module local definitions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module local types. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module local variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module local functions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module interrupt handlers. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module exported functions. */ +/*===========================================================================*/ + +/** + * @brief Port-related initialization code. + * + * @param[in, out] oip pointer to the @p os_instance_t structure + * + * @notapi + */ +void port_init(os_instance_t *oip) { + + (void)oip; + + /* Starting in a known IRQ configuration.*/ + port_disable(); + + /* Enabling alarm VRQ.*/ + __sb_vrq_seten(1U << 0); + sbSetAlarm(sbGetFrequency() / CH_CFG_ST_FREQUENCY, true); +} + +/** @} */ diff --git a/os/common/ports/ARMvx-M-SB/chcore.h b/os/common/ports/ARMvx-M-SB/chcore.h index 5d23d8cab..0407a89b4 100644 --- a/os/common/ports/ARMvx-M-SB/chcore.h +++ b/os/common/ports/ARMvx-M-SB/chcore.h @@ -28,15 +28,17 @@ #ifndef CHCORE_H #define CHCORE_H -/*===========================================================================*/ -/* Module constants. */ -/*===========================================================================*/ - /* The following code is not processed when the file is included from an asm module because those intrinsic macros are not necessarily defined by the assembler too.*/ #if !defined(_FROM_ASM_) +#include "sbuser.h" + +/*===========================================================================*/ +/* Module constants. */ +/*===========================================================================*/ + /** * @brief Compiler name and version. */ @@ -259,55 +261,6 @@ struct port_context { */ #define PORT_THD_FUNCTION(tname, arg) void tname(void *arg) -/* By default threads have no syscall context information.*/ -#if (PORT_USE_SYSCALL == TRUE) || defined(__DOXYGEN__) - #define __PORT_SETUP_CONTEXT_SYSCALL(tp, wtop) \ - (tp)->ctx.syscall.psp = (uint32_t)(wtop); \ - (tp)->ctx.syscall.p = NULL; -#else - #define __PORT_SETUP_CONTEXT_SYSCALL(tp, wtop) -#endif - -/* By default threads have all regions disabled.*/ -#if (PORT_SWITCHED_REGIONS_NUMBER == 0) || defined(__DOXYGEN__) - #define __PORT_SETUP_CONTEXT_MPU(tp) - -#elif (PORT_SWITCHED_REGIONS_NUMBER == 1) || defined(__DOXYGEN__) - #define __PORT_SETUP_CONTEXT_MPU(tp) \ - (tp)->ctx.sp->regions[0].rbar = 0U; \ - (tp)->ctx.sp->regions[0].rasr = 0U - -#elif (PORT_SWITCHED_REGIONS_NUMBER == 2) || defined(__DOXYGEN__) - #define __PORT_SETUP_CONTEXT_MPU(tp) \ - (tp)->ctx.sp->regions[0].rbar = 0U; \ - (tp)->ctx.sp->regions[0].rasr = 0U; \ - (tp)->ctx.sp->regions[1].rbar = 0U; \ - (tp)->ctx.sp->regions[1].rasr = 0U - -#elif (PORT_SWITCHED_REGIONS_NUMBER == 3) || defined(__DOXYGEN__) - #define __PORT_SETUP_CONTEXT_MPU(tp) \ - (tp)->ctx.sp->regions[0].rbar = 0U; \ - (tp)->ctx.sp->regions[0].rasr = 0U; \ - (tp)->ctx.sp->regions[1].rbar = 0U; \ - (tp)->ctx.sp->regions[1].rasr = 0U; \ - (tp)->ctx.sp->regions[2].rbar = 0U; \ - (tp)->ctx.sp->regions[2].rasr = 0U - -#elif (PORT_SWITCHED_REGIONS_NUMBER == 4) || defined(__DOXYGEN__) - #define __PORT_SETUP_CONTEXT_MPU(tp) \ - (tp)->ctx.sp->regions[0].rbar = 0U; \ - (tp)->ctx.sp->regions[0].rasr = 0U; \ - (tp)->ctx.sp->regions[1].rbar = 0U; \ - (tp)->ctx.sp->regions[1].rasr = 0U; \ - (tp)->ctx.sp->regions[2].rbar = 0U; \ - (tp)->ctx.sp->regions[2].rasr = 0U; \ - (tp)->ctx.sp->regions[3].rbar = 0U; \ - (tp)->ctx.sp->regions[3].rasr = 0U - -#else - /* Note, checked above.*/ -#endif - /** * @brief Platform dependent part of the @p chThdCreateI() API. * @details This code usually setup the context switching frame represented @@ -319,28 +272,19 @@ struct port_context { (tp)->ctx.sp->r4 = (uint32_t)(pf); \ (tp)->ctx.sp->r5 = (uint32_t)(arg); \ (tp)->ctx.sp->lr = (uint32_t)__port_thread_start; \ - __PORT_SETUP_CONTEXT_MPU(tp); \ - __PORT_SETUP_CONTEXT_SYSCALL(tp, wtop); \ } while (false) /** * @brief Context switch area size. */ -#if (CORTEX_SIMPLIFIED_PRIORITY == TRUE) || defined(__DOXYGEN__) #define PORT_WA_CTX_SIZE (sizeof (struct port_intctx) + \ sizeof (struct port_extctx)) -#else -#define PORT_WA_CTX_SIZE (sizeof (struct port_intctx) + \ - sizeof (struct port_extctx) + \ - sizeof (struct port_extctx)) -#endif /** * @brief Computes the thread working area global size. * @note There is no need to perform alignments in this macro. */ -#define PORT_WA_SIZE(n) ((size_t)PORT_GUARD_PAGE_SIZE + \ - (size_t)PORT_WA_CTX_SIZE + \ +#define PORT_WA_SIZE(n) ((size_t)PORT_WA_CTX_SIZE + \ (size_t)(n) + \ (size_t)PORT_INT_REQUIRED_STACK) @@ -352,14 +296,8 @@ struct port_context { * @param[in] s the name to be assigned to the stack array * @param[in] n the stack size to be assigned to the thread */ -#if (PORT_ENABLE_GUARD_PAGES == FALSE) || defined(__DOXYGEN__) - #define PORT_WORKING_AREA(s, n) \ - stkalign_t s[THD_WORKING_AREA_SIZE(n) / sizeof (stkalign_t)] - -#else - #define PORT_WORKING_AREA(s, n) \ - ALIGNED_VAR(32) stkalign_t s[THD_WORKING_AREA_SIZE(n) / sizeof (stkalign_t)] -#endif +#define PORT_WORKING_AREA(s, n) \ + stkalign_t s[THD_WORKING_AREA_SIZE(n) / sizeof (stkalign_t)] /** * @brief IRQ prologue code. @@ -373,7 +311,7 @@ struct port_context { * @details This macro must be inserted at the end of all IRQ handlers * enabled to invoke system APIs. */ -#define PORT_IRQ_EPILOGUE() __port_irq_epilogue() +#define PORT_IRQ_EPILOGUE() /** * @brief IRQ handler function declaration. @@ -413,24 +351,13 @@ struct port_context { #define port_switch(ntp, otp) __port_switch(ntp, otp) #else - #if PORT_ENABLE_GUARD_PAGES == FALSE - #define port_switch(ntp, otp) do { \ - struct port_intctx *r13 = (struct port_intctx *)__get_PSP(); \ - if ((stkalign_t *)(void *)(r13 - 1) < (otp)->wabase) { \ - chSysHalt("stack overflow"); \ - } \ - __port_switch(ntp, otp); \ - } while (false) - - #else - #define port_switch(ntp, otp) do { \ - __port_switch(ntp, otp); \ - \ - /* Setting up the guard page for the switched-in thread.*/ \ - mpuSetRegionAddress(PORT_USE_GUARD_MPU_REGION, \ - chThdGetSelfX()->wabase); \ - } while (false) - #endif + #define port_switch(ntp, otp) do { \ + struct port_intctx *r13 = (struct port_intctx *)__get_PSP(); \ + if ((stkalign_t *)(void *)(r13 - 1) < (otp)->wabase) { \ + chSysHalt("stack overflow"); \ + } \ + __port_switch(ntp, otp); \ + } while (false) #endif /*===========================================================================*/ @@ -439,18 +366,14 @@ struct port_context { #if !defined(_FROM_ASM_) +extern bool __sb_in_vrq; + #ifdef __cplusplus extern "C" { #endif void port_init(os_instance_t *oip); - void __port_irq_epilogue(void); void __port_switch(thread_t *ntp, thread_t *otp); void __port_thread_start(void); - void __port_switch_from_isr(void); - void __port_exit_from_isr(void); -#if PORT_USE_SYSCALL == TRUE - void port_unprivileged_jump(uint32_t pc, uint32_t psp); -#endif #ifdef __cplusplus } #endif @@ -464,15 +387,9 @@ extern "C" { * * @return The interrupts status. */ -__STATIC_FORCEINLINE syssts_t port_get_irq_status(void) { - syssts_t sts; +static inline syssts_t port_get_irq_status(void) { -#if CORTEX_SIMPLIFIED_PRIORITY == FALSE - sts = (syssts_t)__get_BASEPRI(); -#else /* CORTEX_SIMPLIFIED_PRIORITY */ - sts = (syssts_t)__get_PRIMASK(); -#endif /* CORTEX_SIMPLIFIED_PRIORITY */ - return sts; + return (syssts_t)__sb_vrq_getisr(); } /** @@ -484,13 +401,9 @@ __STATIC_FORCEINLINE syssts_t port_get_irq_status(void) { * @retval false the word specified a disabled interrupts status. * @retval true the word specified an enabled interrupts status. */ -__STATIC_FORCEINLINE bool port_irq_enabled(syssts_t sts) { +static inline bool port_irq_enabled(syssts_t sts) { -#if CORTEX_SIMPLIFIED_PRIORITY == FALSE - return sts == (syssts_t)CORTEX_BASEPRI_DISABLED; -#else /* CORTEX_SIMPLIFIED_PRIORITY */ - return (sts & (syssts_t)1) == (syssts_t)0; -#endif /* CORTEX_SIMPLIFIED_PRIORITY */ + return (bool)((sts & 1U) == (syssts_t)0); } /** @@ -500,106 +413,70 @@ __STATIC_FORCEINLINE bool port_irq_enabled(syssts_t sts) { * @retval false not running in ISR mode. * @retval true running in ISR mode. */ -__STATIC_FORCEINLINE bool port_is_isr_context(void) { +static inline bool port_is_isr_context(void) { - return (bool)((__get_IPSR() & 0x1FFU) != 0U); + return __sb_in_vrq; } /** * @brief Kernel-lock action. - * @details In this port this function raises the base priority to kernel - * level. + * @details Global disable in this port. */ -__STATIC_FORCEINLINE void port_lock(void) { +static inline void port_lock(void) { -#if CORTEX_SIMPLIFIED_PRIORITY == FALSE -#if defined(__CM7_REV) -#if __CM7_REV <= 1 - __disable_irq(); -#endif -#endif - __set_BASEPRI(CORTEX_BASEPRI_KERNEL); -#if defined(__CM7_REV) -#if __CM7_REV <= 1 - __enable_irq(); -#endif -#endif -#else /* CORTEX_SIMPLIFIED_PRIORITY */ - __disable_irq(); -#endif /* CORTEX_SIMPLIFIED_PRIORITY */ + __sb_vrq_disable(); } /** * @brief Kernel-unlock action. - * @details In this port this function lowers the base priority to user - * level. + * @details Global enable in this port. */ -__STATIC_FORCEINLINE void port_unlock(void) { +static inline void port_unlock(void) { -#if CORTEX_SIMPLIFIED_PRIORITY == FALSE - __set_BASEPRI(CORTEX_BASEPRI_DISABLED); -#else /* CORTEX_SIMPLIFIED_PRIORITY */ - __enable_irq(); -#endif /* CORTEX_SIMPLIFIED_PRIORITY */ + __sb_vrq_enable(); } /** * @brief Kernel-lock action from an interrupt handler. - * @details In this port this function raises the base priority to kernel - * level. - * @note Same as @p port_lock() in this port. + * @note Empty in this port. */ -__STATIC_FORCEINLINE void port_lock_from_isr(void) { +static inline void port_lock_from_isr(void) { - port_lock(); } /** * @brief Kernel-unlock action from an interrupt handler. - * @details In this port this function lowers the base priority to user - * level. - * @note Same as @p port_unlock() in this port. + * @note Empty in this port. */ -__STATIC_FORCEINLINE void port_unlock_from_isr(void) { +static inline void port_unlock_from_isr(void) { - port_unlock(); } /** * @brief Disables all the interrupt sources. - * @note In this port it disables all the interrupt sources by raising - * the priority mask to level 0. + * @details Global disable in this port. */ -__STATIC_FORCEINLINE void port_disable(void) { +static inline void port_disable(void) { - __disable_irq(); + __sb_vrq_disable(); } /** * @brief Disables the interrupt sources below kernel-level priority. - * @note Interrupt sources above kernel level remains enabled. - * @note In this port it raises/lowers the base priority to kernel level. + * @note Same as disabling globally in this port. */ -__STATIC_FORCEINLINE void port_suspend(void) { +static inline void port_suspend(void) { -#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) || defined(__DOXYGEN__) - __set_BASEPRI(CORTEX_BASEPRI_KERNEL); - __enable_irq(); -#else - __disable_irq(); -#endif + __sb_vrq_disable(); } /** * @brief Enables all the interrupt sources. - * @note In this port it lowers the base priority to user level. + * @details Global enable in this port. */ -__STATIC_FORCEINLINE void port_enable(void) { +static inline void port_enable(void) { -#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) || defined(__DOXYGEN__) - __set_BASEPRI(CORTEX_BASEPRI_DISABLED); -#endif - __enable_irq(); + __sb_vrq_enable(); } /** @@ -608,13 +485,12 @@ __STATIC_FORCEINLINE void port_enable(void) { * The simplest implementation is an empty function or macro but this * would not take advantage of architecture-specific power saving * modes. - * @note Implemented as an inlined @p WFI instruction. + * @note Implemented as a VRQ-wait which releases the CPU to the sandbox + * host OS. */ -__STATIC_FORCEINLINE void port_wait_for_interrupt(void) { +static inline void port_wait_for_interrupt(void) { -#if CORTEX_ENABLE_WFI_IDLE == TRUE - __WFI(); -#endif + __sb_vrq_wait(); } /** @@ -622,9 +498,9 @@ __STATIC_FORCEINLINE void port_wait_for_interrupt(void) { * * @return The realtime counter value. */ -__STATIC_FORCEINLINE rtcnt_t port_rt_get_counter_value(void) { +static inline rtcnt_t port_rt_get_counter_value(void) { - return DWT->CYCCNT; + return (rtcnt_t)sbGetSystemTime(); } #endif /* !defined(_FROM_ASM_) */ @@ -636,7 +512,7 @@ __STATIC_FORCEINLINE rtcnt_t port_rt_get_counter_value(void) { #if !defined(_FROM_ASM_) #if CH_CFG_ST_TIMEDELTA > 0 -#include "chcore_timer.h" +#error "tickless mode not implemented in this port" #endif /* CH_CFG_ST_TIMEDELTA > 0 */ #endif /* !defined(_FROM_ASM_) */ diff --git a/os/common/ports/ARMvx-M-SB/compilers/GCC/mk/port.mk b/os/common/ports/ARMvx-M-SB/compilers/GCC/mk/port.mk index 9e557b552..28a72c3f3 100644 --- a/os/common/ports/ARMvx-M-SB/compilers/GCC/mk/port.mk +++ b/os/common/ports/ARMvx-M-SB/compilers/GCC/mk/port.mk @@ -1,8 +1,8 @@ # List of the ChibiOS ARMv7/8-M for sandboxes generic port files. -PORTSRC = #$(CHIBIOS)/os/common/ports/ARMvx-M-SB/chcore.c +PORTSRC = $(CHIBIOS)/os/common/ports/ARMvx-M-SB/chcore.c PORTASM = $(CHIBIOS)/os/common/ports/ARMvx-M-SB/compilers/GCC/vectors.S \ - #$(CHIBIOS)/os/common/ports/ARMvx-M-SB/compilers/GCC/chcoreasm.S + $(CHIBIOS)/os/common/ports/ARMvx-M-SB/compilers/GCC/chcoreasm.S PORTINC = $(CHIBIOS)/os/common/portability/GCC \ $(CHIBIOS)/os/common/ports/ARM-common \ diff --git a/os/common/ports/ARMvx-M-SB/compilers/GCC/vectors.S b/os/common/ports/ARMvx-M-SB/compilers/GCC/vectors.S index f0ba19dce..517c5cec2 100644 --- a/os/common/ports/ARMvx-M-SB/compilers/GCC/vectors.S +++ b/os/common/ports/ARMvx-M-SB/compilers/GCC/vectors.S @@ -1,24 +1,27 @@ /* - ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006,2007,2008,2009,2010,2011,2012,2013,2014, + 2015,2016,2017,2018,2019,2020,2021,2022 Giovanni Di Sirio. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + This file is part of ChibiOS. - http://www.apache.org/licenses/LICENSE-2.0 + ChibiOS is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation version 3 of the License. - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + ChibiOS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ /** * @file ARMvx-M-SB/compilers/GCC/vectors.S - * @brief Interrupt vectors for Cortex-Mx devices. + * @brief Sandbox VRQ vectors. * - * @defgroup ARMCMx_GCC_VECTORS Cortex-Mx Interrupt Vectors + * @defgroup ARMVXM_SB_GCC_VECTORS Sandbox VRQ vectors * @{ */ diff --git a/os/sb/user/sbuser.h b/os/sb/user/sbuser.h index 54d5c6fb7..5fdb2bca6 100644 --- a/os/sb/user/sbuser.h +++ b/os/sb/user/sbuser.h @@ -112,7 +112,7 @@ typedef uint32_t time_secs_t; /** * @brief Type of a message. */ -typedef uint32_t msg_t; +typedef int32_t msg_t; /** * @brief Type of an event mask.