diff --git a/demos/ARMCM3-STM32F103-GCC/ride7/ch.rapp b/demos/ARMCM3-STM32F103-GCC/ride7/ch.rapp new file mode 100644 index 000000000..3dbacd826 --- /dev/null +++ b/demos/ARMCM3-STM32F103-GCC/ride7/ch.rapp @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + +
+ +
+ +
+ + +
+
+ + +
+
+ + +
+ +
+ +
+ + + +
+
+ + + +
+
+ + + +
+
+ + +
+ +
+ +
+ + +
+
+ + +
+ +
+
+
+
\ No newline at end of file diff --git a/demos/ARMCM3-STM32F103-GCC/ride7/ch.rprj b/demos/ARMCM3-STM32F103-GCC/ride7/ch.rprj new file mode 100644 index 000000000..77591474e --- /dev/null +++ b/demos/ARMCM3-STM32F103-GCC/ride7/ch.rprj @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/demos/STM8S-STM8S208-RC/ch.rapp b/demos/STM8S-STM8S208-RC/ch.rapp index 487fe17a7..a1ba8f5c9 100644 --- a/demos/STM8S-STM8S208-RC/ch.rapp +++ b/demos/STM8S-STM8S208-RC/ch.rapp @@ -10,15 +10,15 @@
- +
- +
- + - + - + @@ -34,15 +34,15 @@
- +
- +
- + - + - +
@@ -53,17 +53,17 @@
- +
- +
- + - + - +
- + @@ -78,12 +78,11 @@ - + - - + @@ -98,11 +97,11 @@ - + - + @@ -110,57 +109,58 @@
- +
- +
- +
- +
- +
- +
- +
- + +
- +
- +
- +
- +
diff --git a/docs/Doxyfile b/docs/Doxyfile index b03277073..9ebf7f47d 100644 --- a/docs/Doxyfile +++ b/docs/Doxyfile @@ -31,7 +31,7 @@ PROJECT_NAME = ChibiOS/RT # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 1.5.3 +PROJECT_NUMBER = 1.5.4 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. diff --git a/os/kernel/include/ch.h b/os/kernel/include/ch.h index 66d7ce3a6..31845855d 100644 --- a/os/kernel/include/ch.h +++ b/os/kernel/include/ch.h @@ -38,7 +38,7 @@ /** * @brief Kernel version string. */ -#define CH_KERNEL_VERSION "1.5.3unstable" +#define CH_KERNEL_VERSION "1.5.4unstable" /** * @brief Kernel version major number. @@ -53,7 +53,7 @@ /** * @brief Kernel version patch number. */ -#define CH_KERNEL_PATCH 3 +#define CH_KERNEL_PATCH 4 /* * Common values. diff --git a/os/ports/RC/STM8/chcore.c b/os/ports/RC/STM8/chcore.c index bccfc454a..af890f6b9 100644 --- a/os/ports/RC/STM8/chcore.c +++ b/os/ports/RC/STM8/chcore.c @@ -24,9 +24,41 @@ * @addtogroup STM8_CORE * @{ */ +#pragma SRC("tmp.asm") #include "ch.h" +/** + * @brief Performs a context switch between two threads. + * + * @param otp the thread to be switched out + */ +void _port_switch(Thread *otp) { + + (void)otp; + /* Asm because unoptimal code would generated by using _getSP_().*/ +#pragma ASM + EXTRN PAGE0(rlist) + + LDW Y,SP ; old context pointer + LDW (005H,X),Y ; SP saved in otp->p_ctx.sp + LDW X,rlist + 0DH ; r_current (currp) field + LDW X,(005H,X) ; currp->p_ctx.sp + LDW SP,X ; new context pointer +#pragma ENDASM +} + +/** + * @brief Thread start code. + */ +void _port_thread_start(void) { + +#pragma ASM + RIM + POPW X +#pragma ENDASM +} + /** * @brief Halts the system. * @details This function is invoked by the operating system when an diff --git a/os/ports/RC/STM8/chcore.h b/os/ports/RC/STM8/chcore.h index f652a858b..6df8c5a61 100644 --- a/os/ports/RC/STM8/chcore.h +++ b/os/ports/RC/STM8/chcore.h @@ -46,6 +46,13 @@ */ typedef uint8_t stkalign_t; +/** + * @brief Generic STM8 function pointer. + * @note It is used to allocate the proper size for return addresses in + * context-related structures. + */ +typedef void (*stm8func_t)(void); + /** * @brief Interrupt saved context. * @details This structure represents the stack frame saved during a @@ -75,7 +82,7 @@ struct extctx { */ struct intctx { uint8_t _next; - uint16_t pc; + stm8func_t pc; /* Function pointer sized return address. */ }; /** @@ -85,10 +92,10 @@ struct intctx { */ struct startctx { uint8_t _next; - uint16_t ts; /* Trampoline address. */ - uint16_t arg; /* Thread argument. */ - uint16_t pc; /* Thread function address. */ - uint16_t ret; /* chThdExit() address. */ + stm8func_t ts; /* Trampoline address. */ + void *arg; /* Thread argument. */ + stm8func_t pc; /* Thread function address. */ + stm8func_t ret; /* chThdExit() address. */ }; /** @@ -109,10 +116,10 @@ struct context { struct startctx *scp; \ scp = (struct startctx *)((uint8_t *)workspace + wsize - \ sizeof(struct startctx)); \ - scp->ts = (uint16_t)_port_thread_start; \ - scp->arg = (uint16_t)arg; \ - scp->pc = (uint16_t)pf; \ - scp->ret = (uint16_t)chThdExit; \ + scp->ts = _port_thread_start; \ + scp->arg = arg; \ + scp->pc = (stm8func_t)pf; \ + scp->ret = (stm8func_t)chThdExit; \ tp->p_ctx.sp = (struct intctx *)scp; \ } diff --git a/readme.txt b/readme.txt index c61db542e..1aa28a6cf 100644 --- a/readme.txt +++ b/readme.txt @@ -56,6 +56,11 @@ *** Releases *** ***************************************************************************** +*** 1.5.4 *** +- NEW: Added support for the STM8 large memory model to the STM8 port. +- NEW: Added RIDE7 project files to the STM32 demo. The normal makefile is + still available of course. + *** 1.5.3 *** - FIX: Removed C99-style variables declarations (bug 2964418)(backported in 1.4.2).