Kaynağa Gözat

Merge pull request #2135 from armink/lts-v3.1.x

Sync the code to v3.1.2
Bernard Xiong 7 yıl önce
ebeveyn
işleme
af33226fab
55 değiştirilmiş dosya ile 895 ekleme ve 236 silme
  1. 1 1
      bsp/allwinner_tina/libcpu/interrupt.c
  2. 1 1
      bsp/allwinner_tina/libcpu/interrupt.h
  3. 1 1
      bsp/asm9260t/platform/interrupt.c
  4. 1 1
      bsp/at91sam9260/platform/interrupt.c
  5. 1 1
      bsp/dm365/platform/interrupt.c
  6. 1 1
      bsp/fh8620/drivers/interrupt.c
  7. 1 1
      bsp/fh8620/drivers/interrupt.h
  8. 1 1
      bsp/gkipc/armv6/interrupt.c
  9. 1 1
      bsp/hifive1/drivers/interrupt.c
  10. 1 1
      bsp/hifive1/drivers/interrupt.h
  11. 1 1
      bsp/imx6sx/cortex-a9/cpu/interrupt.c
  12. 1 1
      bsp/qemu-vexpress-a9/cpu/interrupt.c
  13. 1 1
      bsp/qemu-vexpress-gemini/cpu/interrupt.c
  14. 1 1
      bsp/raspi2/cpu/interrupt.c
  15. 1 1
      bsp/tm4c129x/.config
  16. 1 1
      bsp/tm4c129x/rtconfig.h
  17. 8 7
      components/net/lwip-1.4.1/src/arch/include/arch/cc.h
  18. 184 139
      include/libc/libc_errno.h
  19. 0 4
      include/libc/libc_signal.h
  20. 22 21
      include/rtdef.h
  21. 1 1
      include/rthw.h
  22. 2 2
      include/rtservice.h
  23. 8 0
      libcpu/Kconfig
  24. 14 7
      libcpu/SConscript
  25. 1 1
      libcpu/arm/AT91SAM7X/interrupt.c
  26. 1 1
      libcpu/arm/am335x/interrupt.c
  27. 8 1
      libcpu/arm/arm926/start_rvds.S
  28. 1 1
      libcpu/arm/cortex-a/interrupt.c
  29. 19 0
      libcpu/arm/cortex-m0/cpuport.c
  30. 1 1
      libcpu/arm/cortex-r4/interrupt.c
  31. 1 1
      libcpu/arm/lpc214x/cpuport.c
  32. 1 1
      libcpu/arm/lpc24xx/interrupt.c
  33. 1 1
      libcpu/arm/realview-a8-vmm/interrupt.c
  34. 1 1
      libcpu/arm/s3c24x0/interrupt.c
  35. 1 1
      libcpu/arm/sep4020/interrupt.c
  36. 1 1
      libcpu/arm/zynq7000/interrupt.c
  37. 1 1
      libcpu/ia32/interrupt.c
  38. 1 1
      libcpu/mips/loongson_1b/interrupt.c
  39. 1 1
      libcpu/mips/loongson_1c/interrupt.c
  40. 1 1
      libcpu/mips/x1000/interrupt.c
  41. 1 1
      libcpu/mips/xburst/interrupt.c
  42. 1 1
      libcpu/ppc/ppc405/interrupt.c
  43. 241 0
      libcpu/ti-dsp/c28x/context.s
  44. 110 0
      libcpu/ti-dsp/c28x/cpuport.c
  45. 1 1
      libcpu/unicore32/sep6200/interrupt.c
  46. 6 0
      src/Kconfig
  47. 2 4
      src/idle.c
  48. 1 1
      src/kservice.c
  49. 1 1
      src/signal.c
  50. 32 6
      tools/building.py
  51. 17 0
      tools/menuconfig.py
  52. 50 0
      tools/mkdist.py
  53. 41 8
      tools/pymenuconfig.py
  54. 92 0
      tools/ses.py
  55. 3 1
      tools/utils.py

+ 1 - 1
bsp/allwinner_tina/libcpu/interrupt.c

@@ -132,7 +132,7 @@ void rt_hw_interrupt_umask(int vector)
  * @return old handler
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-        void *param, char *name)
+        void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
     rt_uint32_t pend_addr, en_addr, data;

+ 1 - 1
bsp/allwinner_tina/libcpu/interrupt.h

@@ -102,6 +102,6 @@ typedef struct tina_intc *tina_intc_t;
 void rt_hw_interrupt_init(void);
 void rt_hw_interrupt_mask(int vector);
 void rt_hw_interrupt_umask(int vector);
-rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler, void *param, char *name);
+rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler, void *param, const char *name);
 
 #endif /* __INTERRUPT_H__ */

+ 1 - 1
bsp/asm9260t/platform/interrupt.c

@@ -151,7 +151,7 @@ void rt_hw_interrupt_umask(int irq)
  * @return old handler
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-        void *param, char *name)
+        void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
bsp/at91sam9260/platform/interrupt.c

@@ -319,7 +319,7 @@ void rt_hw_interrupt_umask(int irq)
  * @return old handler
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler, 
-                                    void *param, char *name)
+                                    void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
bsp/dm365/platform/interrupt.c

@@ -253,7 +253,7 @@ void rt_hw_interrupt_umask(int irq)
  */
 
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-									void *param, char *name)
+									void *param, const char *name)
 {
 	rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
bsp/fh8620/drivers/interrupt.c

@@ -169,7 +169,7 @@ void rt_hw_interrupt_umask(int irq)
  * @return old handler
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler, 
-                                    void *param, char *name)
+                                    void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
bsp/fh8620/drivers/interrupt.h

@@ -35,6 +35,6 @@ void rt_hw_interrupt_init(void);
 void rt_hw_interrupt_mask(int irq);
 void rt_hw_interrupt_umask(int irq);
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-		void *param, char *name);
+		void *param, const char *name);
 
 #endif /* INTERRUPT_H_ */

+ 1 - 1
bsp/gkipc/armv6/interrupt.c

@@ -97,7 +97,7 @@ void rt_hw_interrupt_umask(int irq)
  * @return old handler
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-                                    void *param, char *name)
+                                    void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
bsp/hifive1/drivers/interrupt.c

@@ -110,7 +110,7 @@ void rt_hw_interrupt_ack(rt_uint32_t fiq_irq, rt_uint32_t id)
  * @return old handler
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-        void *param, char *name)
+        void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
bsp/hifive1/drivers/interrupt.h

@@ -32,6 +32,6 @@ void rt_hw_interrupt_init(void);
 rt_uint32_t rt_hw_interrupt_get_active(rt_uint32_t fiq_irq);
 void rt_hw_interrupt_ack(rt_uint32_t fiq_irq, rt_uint32_t id);
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-        void *param, char *name);
+        void *param, const char *name);
         
 #endif

+ 1 - 1
bsp/imx6sx/cortex-a9/cpu/interrupt.c

@@ -110,7 +110,7 @@ void rt_hw_interrupt_umask(int vector)
  * @param old_handler the old interrupt service routine
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-        void *param, char *name)
+        void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
bsp/qemu-vexpress-a9/cpu/interrupt.c

@@ -91,7 +91,7 @@ void rt_hw_interrupt_umask(int vector)
  * @param old_handler the old interrupt service routine
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-        void *param, char *name)
+        void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
bsp/qemu-vexpress-gemini/cpu/interrupt.c

@@ -108,7 +108,7 @@ void rt_hw_interrupt_umask(int vector)
  * @param old_handler the old interrupt service routine
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-        void *param, char *name)
+        void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
bsp/raspi2/cpu/interrupt.c

@@ -114,7 +114,7 @@ void rt_hw_interrupt_umask(int vector)
  * @param old_handler the old interrupt service routine
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-        void *param, char *name)
+        void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
bsp/tm4c129x/.config

@@ -98,7 +98,7 @@ CONFIG_RT_USING_SERIAL=y
 #
 # POSIX layer and C standard library
 #
-# CONFIG_RT_USING_LIBC is not set
+CONFIG_RT_USING_LIBC=y
 # CONFIG_RT_USING_PTHREADS is not set
 
 #

+ 1 - 1
bsp/tm4c129x/rtconfig.h

@@ -89,7 +89,7 @@
 
 /* POSIX layer and C standard library */
 
-/* RT_USING_LIBC is not set */
+#define RT_USING_LIBC
 /* RT_USING_PTHREADS is not set */
 
 /* Network stack */

+ 8 - 7
components/net/lwip-1.4.1/src/arch/include/arch/cc.h

@@ -38,13 +38,14 @@
 #include <rthw.h>
 #include <rtthread.h>
 
-typedef rt_uint8_t	u8_t;
-typedef rt_int8_t	s8_t;
-typedef rt_uint16_t	u16_t;
-typedef rt_int16_t	s16_t;
-typedef rt_uint32_t	u32_t;
-typedef rt_int32_t	s32_t;
-typedef rt_uint32_t	mem_ptr_t;
+#include <stdint.h>
+typedef uint8_t   u8_t;
+typedef int8_t    s8_t;
+typedef uint16_t  u16_t;
+typedef int16_t   s16_t;
+typedef uint32_t  u32_t;
+typedef int32_t   s32_t;
+typedef uintptr_t mem_ptr_t;
 
 #define U16_F "hu"
 #define S16_F "hd"

+ 184 - 139
include/libc/libc_errno.h

@@ -2,10 +2,6 @@
  * Copyright (c) 2006-2018, RT-Thread Development Team
  *
  * SPDX-License-Identifier: Apache-2.0
- */
-
-/*
- * File      : libc_errno.h
  *
  * Change Logs:
  * Date           Author       Notes
@@ -17,145 +13,194 @@
 
 #include <rtconfig.h>
 
-#if defined(RT_USING_NEWLIB) || defined(_WIN32)
-/* use errno.h file in newlib */
+#if defined(RT_USING_NEWLIB) || defined(_WIN32) || defined(__CC_ARM) || defined(__IAR_SYSTEMS_ICC__)
+/* use errno.h file in toolchains */
 #include <errno.h>
+#endif
+
+#if defined(__CC_ARM)
+/*
+defined in armcc/errno.h
+
+#define EDOM    1
+#define ERANGE  2
+#define EILSEQ  4
+#define ESIGNUM 3
+#define EINVAL  5
+#define ENOMEM  6
+*/
+#define ERROR_BASE_NO    7
+
+#elif defined(__IAR_SYSTEMS_ICC__)
+/* defined in iar/errno.h
+#define EDOM    33
+#define ERANGE  34
+#define EFPOS   35
+#define EILSEQ  36
+*/
+#define ERROR_BASE_NO    36
+
 #else
-/* define errno self. */
-#define EPERM            1
-#define ENOENT           2
-#define ESRCH            3
-#define EINTR            4
-#define EIO              5
-#define ENXIO            6
-#define E2BIG            7
-#define ENOEXEC          8
-#define EBADF            9
-#define ECHILD          10
-#define EAGAIN          11
-#define ENOMEM          12
-#define EACCES          13
-#define EFAULT          14
-#define ENOTBLK         15
-#define EBUSY           16
-#define EEXIST          17
-#define EXDEV           18
-#define ENODEV          19
-#define ENOTDIR         20
-#define EISDIR          21
-#define EINVAL          22
-#define ENFILE          23
-#define EMFILE          24
-#define ENOTTY          25
-#define ETXTBSY         26
-#define EFBIG           27
-#define ENOSPC          28
-#define ESPIPE          29
-#define EROFS           30
-#define EMLINK          31
-#define EPIPE           32
-#define EDOM            33
-#define ERANGE          34
-#define EDEADLK         35
-#define ENAMETOOLONG    36
-#define ENOLCK          37
-#define ENOSYS          38
-#define ENOTEMPTY       39
-#define ELOOP           40
+
+#define ERROR_BASE_NO    0
+#endif
+
+#if !defined(RT_USING_NEWLIB) && !defined(_WIN32)
+
+#define EPERM            (ERROR_BASE_NO + 1)
+#define ENOENT           (ERROR_BASE_NO + 2)
+#define ESRCH            (ERROR_BASE_NO + 3)
+#define EINTR            (ERROR_BASE_NO + 4)
+#define EIO              (ERROR_BASE_NO + 5)
+#define ENXIO            (ERROR_BASE_NO + 6)
+#define E2BIG            (ERROR_BASE_NO + 7)
+#define ENOEXEC          (ERROR_BASE_NO + 8)
+#define EBADF            (ERROR_BASE_NO + 9)
+#define ECHILD          (ERROR_BASE_NO + 10)
+#define EAGAIN          (ERROR_BASE_NO + 11)
+
+#ifndef ENOMEM
+#define ENOMEM          (ERROR_BASE_NO + 12)
+#endif
+
+#define EACCES          (ERROR_BASE_NO + 13)
+#define EFAULT          (ERROR_BASE_NO + 14)
+#define ENOTBLK         (ERROR_BASE_NO + 15)
+#define EBUSY           (ERROR_BASE_NO + 16)
+#define EEXIST          (ERROR_BASE_NO + 17)
+#define EXDEV           (ERROR_BASE_NO + 18)
+#define ENODEV          (ERROR_BASE_NO + 19)
+#define ENOTDIR         (ERROR_BASE_NO + 20)
+#define EISDIR          (ERROR_BASE_NO + 21)
+
+#ifndef EINVAL
+#define EINVAL          (ERROR_BASE_NO + 22)
+#endif
+
+#define ENFILE          (ERROR_BASE_NO + 23)
+#define EMFILE          (ERROR_BASE_NO + 24)
+#define ENOTTY          (ERROR_BASE_NO + 25)
+#define ETXTBSY         (ERROR_BASE_NO + 26)
+#define EFBIG           (ERROR_BASE_NO + 27)
+#define ENOSPC          (ERROR_BASE_NO + 28)
+#define ESPIPE          (ERROR_BASE_NO + 29)
+#define EROFS           (ERROR_BASE_NO + 30)
+#define EMLINK          (ERROR_BASE_NO + 31)
+#define EPIPE           (ERROR_BASE_NO + 32)
+
+#ifndef EDOM
+#define EDOM            (ERROR_BASE_NO + 33)
+#endif
+
+#ifndef ERANGE
+#define ERANGE          (ERROR_BASE_NO + 34)
+#endif
+
+#define EDEADLK         (ERROR_BASE_NO + 35)
+#define ENAMETOOLONG    (ERROR_BASE_NO + 36)
+#define ENOLCK          (ERROR_BASE_NO + 37)
+#define ENOSYS          (ERROR_BASE_NO + 38)
+#define ENOTEMPTY       (ERROR_BASE_NO + 39)
+#define ELOOP           (ERROR_BASE_NO + 40)
 #define EWOULDBLOCK     EAGAIN
-#define ENOMSG          42
-#define EIDRM           43
-#define ECHRNG          44
-#define EL2NSYNC        45
-#define EL3HLT          46
-#define EL3RST          47
-#define ELNRNG          48
-#define EUNATCH         49
-#define ENOCSI          50
-#define EL2HLT          51
-#define EBADE           52
-#define EBADR           53
-#define EXFULL          54
-#define ENOANO          55
-#define EBADRQC         56
-#define EBADSLT         57
+#define ENOMSG          (ERROR_BASE_NO + 42)
+#define EIDRM           (ERROR_BASE_NO + 43)
+#define ECHRNG          (ERROR_BASE_NO + 44)
+#define EL2NSYNC        (ERROR_BASE_NO + 45)
+#define EL3HLT          (ERROR_BASE_NO + 46)
+#define EL3RST          (ERROR_BASE_NO + 47)
+#define ELNRNG          (ERROR_BASE_NO + 48)
+#define EUNATCH         (ERROR_BASE_NO + 49)
+#define ENOCSI          (ERROR_BASE_NO + 50)
+#define EL2HLT          (ERROR_BASE_NO + 51)
+#define EBADE           (ERROR_BASE_NO + 52)
+#define EBADR           (ERROR_BASE_NO + 53)
+#define EXFULL          (ERROR_BASE_NO + 54)
+#define ENOANO          (ERROR_BASE_NO + 55)
+#define EBADRQC         (ERROR_BASE_NO + 56)
+#define EBADSLT         (ERROR_BASE_NO + 57)
 #define EDEADLOCK       EDEADLK
-#define EBFONT          59
-#define ENOSTR          60
-#define ENODATA         61
-#define ETIME           62
-#define ENOSR           63
-#define ENONET          64
-#define ENOPKG          65
-#define EREMOTE         66
-#define ENOLINK         67
-#define EADV            68
-#define ESRMNT          69
-#define ECOMM           70
-#define EPROTO          71
-#define EMULTIHOP       72
-#define EDOTDOT         73
-#define EBADMSG         74
-#define EOVERFLOW       75
-#define ENOTUNIQ        76
-#define EBADFD          77
-#define EREMCHG         78
-#define ELIBACC         79
-#define ELIBBAD         80
-#define ELIBSCN         81
-#define ELIBMAX         82
-#define ELIBEXEC        83
-#define EILSEQ          84
-#define ERESTART        85
-#define ESTRPIPE        86
-#define EUSERS          87
-#define ENOTSOCK        88
-#define EDESTADDRREQ    89
-#define EMSGSIZE        90
-#define EPROTOTYPE      91
-#define ENOPROTOOPT     92
-#define EPROTONOSUPPORT 93
-#define ESOCKTNOSUPPORT 94
-#define EOPNOTSUPP      95
-#define ENOTSUP         EOPNOTSUPP
-#define EPFNOSUPPORT    96
-#define EAFNOSUPPORT    97
-#define EADDRINUSE      98
-#define EADDRNOTAVAIL   99
-#define ENETDOWN        100
-#define ENETUNREACH     101
-#define ENETRESET       102
-#define ECONNABORTED    103
-#define ECONNRESET      104
-#define ENOBUFS         105
-#define EISCONN         106
-#define ENOTCONN        107
-#define ESHUTDOWN       108
-#define ETOOMANYREFS    109
-#define ETIMEDOUT       110
-#define ECONNREFUSED    111
-#define EHOSTDOWN       112
-#define EHOSTUNREACH    113
-#define EALREADY        114
-#define EINPROGRESS     115
-#define ESTALE          116
-#define EUCLEAN         117
-#define ENOTNAM         118
-#define ENAVAIL         119
-#define EISNAM          120
-#define EREMOTEIO       121
-#define EDQUOT          122
-#define ENOMEDIUM       123
-#define EMEDIUMTYPE     124
-#define ECANCELED       125
-#define ENOKEY          126
-#define EKEYEXPIRED     127
-#define EKEYREVOKED     128
-#define EKEYREJECTED    129
-#define EOWNERDEAD      130
-#define ENOTRECOVERABLE 131
-#define ERFKILL         132
-#define EHWPOISON       133
+#define EBFONT          (ERROR_BASE_NO + 59)
+#define ENOSTR          (ERROR_BASE_NO + 60)
+#define ENODATA         (ERROR_BASE_NO + 61)
+#define ETIME           (ERROR_BASE_NO + 62)
+#define ENOSR           (ERROR_BASE_NO + 63)
+#define ENONET          (ERROR_BASE_NO + 64)
+#define ENOPKG          (ERROR_BASE_NO + 65)
+#define EREMOTE         (ERROR_BASE_NO + 66)
+#define ENOLINK         (ERROR_BASE_NO + 67)
+#define EADV            (ERROR_BASE_NO + 68)
+#define ESRMNT          (ERROR_BASE_NO + 69)
+#define ECOMM           (ERROR_BASE_NO + 70)
+#define EPROTO          (ERROR_BASE_NO + 71)
+#define EMULTIHOP       (ERROR_BASE_NO + 72)
+#define EDOTDOT         (ERROR_BASE_NO + 73)
+#define EBADMSG         (ERROR_BASE_NO + 74)
+#define EOVERFLOW       (ERROR_BASE_NO + 75)
+#define ENOTUNIQ        (ERROR_BASE_NO + 76)
+#define EBADFD          (ERROR_BASE_NO + 77)
+#define EREMCHG         (ERROR_BASE_NO + 78)
+#define ELIBACC         (ERROR_BASE_NO + 79)
+#define ELIBBAD         (ERROR_BASE_NO + 80)
+#define ELIBSCN         (ERROR_BASE_NO + 81)
+#define ELIBMAX         (ERROR_BASE_NO + 82)
+#define ELIBEXEC        (ERROR_BASE_NO + 83)
+
+#ifndef EILSEQ
+#define EILSEQ          (ERROR_BASE_NO + 84)
+#endif
+
+#define ERESTART        (ERROR_BASE_NO + 85)
+#define ESTRPIPE        (ERROR_BASE_NO + 86)
+#define EUSERS          (ERROR_BASE_NO + 87)
+#define ENOTSOCK        (ERROR_BASE_NO + 88)
+#define EDESTADDRREQ    (ERROR_BASE_NO + 89)
+#define EMSGSIZE        (ERROR_BASE_NO + 90)
+#define EPROTOTYPE      (ERROR_BASE_NO + 91)
+#define ENOPROTOOPT     (ERROR_BASE_NO + 92)
+#define EPROTONOSUPPORT (ERROR_BASE_NO + 93)
+#define ESOCKTNOSUPPORT (ERROR_BASE_NO + 94)
+#define EOPNOTSUPP      (ERROR_BASE_NO + 95)
+#define ENOTSUP         EOPNOTSUPP         )
+#define EPFNOSUPPORT    (ERROR_BASE_NO + 96)
+#define EAFNOSUPPORT    (ERROR_BASE_NO + 97)
+#define EADDRINUSE      (ERROR_BASE_NO + 98)
+#define EADDRNOTAVAIL   (ERROR_BASE_NO + 99)
+#define ENETDOWN        (ERROR_BASE_NO + 100)
+#define ENETUNREACH     (ERROR_BASE_NO + 101)
+#define ENETRESET       (ERROR_BASE_NO + 102)
+#define ECONNABORTED    (ERROR_BASE_NO + 103)
+#define ECONNRESET      (ERROR_BASE_NO + 104)
+#define ENOBUFS         (ERROR_BASE_NO + 105)
+#define EISCONN         (ERROR_BASE_NO + 106)
+#define ENOTCONN        (ERROR_BASE_NO + 107)
+#define ESHUTDOWN       (ERROR_BASE_NO + 108)
+#define ETOOMANYREFS    (ERROR_BASE_NO + 109)
+#define ETIMEDOUT       (ERROR_BASE_NO + 110)
+#define ECONNREFUSED    (ERROR_BASE_NO + 111)
+#define EHOSTDOWN       (ERROR_BASE_NO + 112)
+#define EHOSTUNREACH    (ERROR_BASE_NO + 113)
+#define EALREADY        (ERROR_BASE_NO + 114)
+#define EINPROGRESS     (ERROR_BASE_NO + 115)
+#define ESTALE          (ERROR_BASE_NO + 116)
+#define EUCLEAN         (ERROR_BASE_NO + 117)
+#define ENOTNAM         (ERROR_BASE_NO + 118)
+#define ENAVAIL         (ERROR_BASE_NO + 119)
+#define EISNAM          (ERROR_BASE_NO + 120)
+#define EREMOTEIO       (ERROR_BASE_NO + 121)
+#define EDQUOT          (ERROR_BASE_NO + 122)
+#define ENOMEDIUM       (ERROR_BASE_NO + 123)
+#define EMEDIUMTYPE     (ERROR_BASE_NO + 124)
+#define ECANCELED       (ERROR_BASE_NO + 125)
+#define ENOKEY          (ERROR_BASE_NO + 126)
+#define EKEYEXPIRED     (ERROR_BASE_NO + 127)
+#define EKEYREVOKED     (ERROR_BASE_NO + 128)
+#define EKEYREJECTED    (ERROR_BASE_NO + 129)
+#define EOWNERDEAD      (ERROR_BASE_NO + 130)
+#define ENOTRECOVERABLE (ERROR_BASE_NO + 131)
+#define ERFKILL         (ERROR_BASE_NO + 132)
+#define EHWPOISON       (ERROR_BASE_NO + 133)
+
 #endif
 
 #endif

+ 0 - 4
include/libc/libc_signal.h

@@ -2,10 +2,6 @@
  * Copyright (c) 2006-2018, RT-Thread Development Team
  *
  * SPDX-License-Identifier: Apache-2.0
- */
-
-/*
- * File      : libc_signal.h
  *
  * Change Logs:
  * Date           Author       Notes

+ 22 - 21
include/rtdef.h

@@ -24,6 +24,7 @@
  * 2018-05-31     Bernard      change version number to v3.1.0
  * 2018-09-04     Bernard      change version number to v3.1.1
  * 2018-09-14     Bernard      apply Apache License v2.0 to RT-Thread Kernel
+ * 2018-12-28     armink       change version number to v3.1.2
  */
 
 #ifndef __RT_DEF_H__
@@ -45,7 +46,7 @@ extern "C" {
 /* RT-Thread version information */
 #define RT_VERSION                      3L              /**< major version number */
 #define RT_SUBVERSION                   1L              /**< minor version number */
-#define RT_REVISION                     1L              /**< revise version number */
+#define RT_REVISION                     2L              /**< revise version number */
 
 /* RT-Thread version */
 #define RTTHREAD_VERSION                ((RT_VERSION * 10000) + \
@@ -121,11 +122,11 @@ typedef rt_base_t                       rt_off_t;       /**< Type for offset */
         #include <stdarg.h>
     #else
         /* the version of GNU GCC must be greater than 4.x */
-        typedef __builtin_va_list   __gnuc_va_list;
-        typedef __gnuc_va_list      va_list;
-        #define va_start(v,l)       __builtin_va_start(v,l)
-        #define va_end(v)           __builtin_va_end(v)
-        #define va_arg(v,l)         __builtin_va_arg(v,l)
+        typedef __builtin_va_list       __gnuc_va_list;
+        typedef __gnuc_va_list          va_list;
+        #define va_start(v,l)           __builtin_va_start(v,l)
+        #define va_end(v)               __builtin_va_end(v)
+        #define va_arg(v,l)             __builtin_va_arg(v,l)
     #endif
 
     #define SECTION(x)                  __attribute__((section(x)))
@@ -247,7 +248,7 @@ typedef int (*init_fn_t)(void);
  * @addtogroup Error
  */
 
-/*@{*/
+/**@{*/
 
 /* RT-Thread error code definitions */
 #define RT_EOK                          0               /**< There is no error */
@@ -262,7 +263,7 @@ typedef int (*init_fn_t)(void);
 #define RT_EINTR                        9               /**< Interrupted system call */
 #define RT_EINVAL                       10              /**< Invalid argument */
 
-/*@}*/
+/**@}*/
 
 /**
  * @ingroup BasicDef
@@ -313,7 +314,7 @@ typedef struct rt_slist_node rt_slist_t;                /**< Type for single lis
  * @addtogroup KernelObject
  */
 
-/*@{*/
+/**@{*/
 
 /*
  * kernel object macros
@@ -390,13 +391,13 @@ struct rt_object_information
 #define RT_OBJECT_HOOK_CALL(func, argv)
 #endif
 
-/*@}*/
+/**@}*/
 
 /**
  * @addtogroup Clock
  */
 
-/*@{*/
+/**@{*/
 
 /**
  * clock & timer macros
@@ -440,7 +441,7 @@ struct rt_timer
 };
 typedef struct rt_timer *rt_timer_t;
 
-/*@}*/
+/**@}*/
 
 /**
  * @addtogroup Signal
@@ -453,13 +454,13 @@ typedef siginfo_t rt_siginfo_t;
 
 #define RT_SIG_MAX          32
 #endif
-/*@}*/
+/**@}*/
 
 /**
  * @addtogroup Thread
  */
 
-/*@{*/
+/**@{*/
 
 /*
  * Thread
@@ -558,13 +559,13 @@ struct rt_thread
 };
 typedef struct rt_thread *rt_thread_t;
 
-/*@}*/
+/**@}*/
 
 /**
  * @addtogroup IPC
  */
 
-/*@{*/
+/**@{*/
 
 /**
  * IPC flags and control command definitions
@@ -682,13 +683,13 @@ struct rt_messagequeue
 typedef struct rt_messagequeue *rt_mq_t;
 #endif
 
-/*@}*/
+/**@}*/
 
 /**
  * @addtogroup MM
  */
 
-/*@{*/
+/**@{*/
 
 /*
  * memory management
@@ -756,14 +757,14 @@ struct rt_mempool
 typedef struct rt_mempool *rt_mp_t;
 #endif
 
-/*@}*/
+/**@}*/
 
 #ifdef RT_USING_DEVICE
 /**
  * @addtogroup Device
  */
 
-/*@{*/
+/**@{*/
 
 /**
  * device (I/O) class type
@@ -1008,7 +1009,7 @@ struct rt_device_graphic_ops
 };
 #define rt_graphix_ops(device)          ((struct rt_device_graphic_ops *)(device->user_data))
 
-/*@}*/
+/**@}*/
 #endif
 
 /* definitions for libc */

+ 1 - 1
include/rthw.h

@@ -90,7 +90,7 @@ void rt_hw_interrupt_umask(int vector);
 rt_isr_handler_t rt_hw_interrupt_install(int              vector,
                                          rt_isr_handler_t handler,
                                          void            *param,
-                                         char            *name);
+                                         const char      *name);
 
 rt_base_t rt_hw_interrupt_disable(void);
 void rt_hw_interrupt_enable(rt_base_t level);

+ 2 - 2
include/rtservice.h

@@ -24,7 +24,7 @@ extern "C" {
  * @addtogroup KernelService
  */
 
-/*@{*/
+/**@{*/
 
 /**
  * rt_container_of - return the member address of ptr, if the type of ptr is the
@@ -306,7 +306,7 @@ rt_inline int rt_slist_isempty(rt_slist_t *l)
 #define rt_slist_tail_entry(ptr, type, member) \
     rt_slist_entry(rt_slist_tail(ptr), type, member)
 
-/*@}*/
+/**@}*/
 
 #ifdef __cplusplus
 }

+ 8 - 0
libcpu/Kconfig

@@ -86,6 +86,14 @@ config ARCH_RISCV
 config ARCH_IA32
     bool
 
+config ARCH_TIDSP
+    bool
+
+config ARCH_TIDSP_C28X
+    bool
+    select ARCH_TIDSP
+    select ARCH_CPU_STACK_GROWS_UPWARD
+
 config ARCH_HOST_SIMULATOR
     bool
 

+ 14 - 7
libcpu/SConscript

@@ -2,30 +2,37 @@ Import('RTT_ROOT')
 Import('rtconfig')
 from building import *
 
+arch = rtconfig.ARCH
 comm = rtconfig.ARCH + '/common'
 path = rtconfig.ARCH + '/' + rtconfig.CPU
+src  = []
 ASFLAGS = ''
 
 # The set of source files associated with this SConscript file.
 if rtconfig.PLATFORM == 'armcc':
-	src = Glob(path + '/*.c') + Glob(path + '/*_rvds.S') + Glob(comm + '/*.c')
+    src += Glob(path + '/*.c') + Glob(path + '/*_rvds.S') 
+    src += Glob(comm + '/*.c') + Glob(comm + '/*_rvds.S')
 
 if rtconfig.PLATFORM == 'gcc':
-	src = Glob(path + '/*.c') + Glob(path + '/*_gcc.S') + Glob(comm + '/*.c') + Glob(path + '/*_init.S')
+    src += Glob(path + '/*_init.S')
+    src += Glob(path + '/*.c') + Glob(path + '/*_gcc.S') 
+    src += Glob(comm + '/*.c') + Glob(comm + '/*_gcc.S')
 
 if rtconfig.PLATFORM == 'iar':
-	src = Glob(path + '/*.c') + Glob(path + '/*_iar.S') + Glob(comm + '/*.c')
+    src += Glob(path + '/*.c') + Glob(path + '/*_iar.S')
+    src += Glob(comm + '/*.c') + Glob(comm + '/*_iar.S')
 
 if rtconfig.PLATFORM == 'cl':
-	src = Glob(path + '/*.c')
+    src = Glob(path + '/*.c')
 
 if rtconfig.PLATFORM == 'mingw':
-	src = Glob(path + '/*.c')
+    src = Glob(path + '/*.c')
 
 if rtconfig.PLATFORM == 'armcc' and rtconfig.ARCH == 'arm' and rtconfig.CPU == 'arm926':
     ASFLAGS = ' --cpreproc'
-    
-CPPPATH = [RTT_ROOT + '/libcpu/' + rtconfig.ARCH + '/' + rtconfig.CPU, RTT_ROOT + '/libcpu/' + rtconfig.ARCH + '/common']
+
+CPPPATH = [RTT_ROOT + '/libcpu/' + arch + '/' + rtconfig.CPU, RTT_ROOT + '/libcpu/' + arch + '/common']
+
 group = DefineGroup(rtconfig.CPU.upper(), src, depend = [''], CPPPATH = CPPPATH, ASFLAGS = ASFLAGS)
 
 Return('group')

+ 1 - 1
libcpu/arm/AT91SAM7X/interrupt.c

@@ -91,7 +91,7 @@ void rt_hw_interrupt_umask(int vector)
  * @return the old handler
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler, 
-									void *param, char *name)
+									void *param, const char *name)
 {
 	rt_isr_handler_t old_handler = RT_NULL;
 	if(vector >= 0 && vector < MAX_HANDLERS)

+ 1 - 1
libcpu/arm/am335x/interrupt.c

@@ -158,7 +158,7 @@ void rt_hw_interrupt_ack(int fiq_irq)
  * @param old_handler the old interrupt service routine
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-        void *param, char *name)
+        void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 8 - 1
libcpu/arm/arm926/start_rvds.S

@@ -25,7 +25,14 @@
 ; * 2015-06-04     aozima     Align stack address to 8 byte.
 ; */
 
-#include "rt_low_level_init.h"
+;#include "rt_low_level_init.h"
+UND_STK_SIZE EQU 512
+SVC_STK_SIZE EQU 4096
+ABT_STK_SIZE EQU 512
+IRQ_STK_SIZE EQU 1024
+FIQ_STK_SIZE EQU 1024
+SYS_STK_SIZE EQU 512
+Heap_Size    EQU 512
 
 S_FRAME_SIZE    EQU     (18*4)   ;72
 ;S_SPSR          EQU     (17*4)   ;SPSR

+ 1 - 1
libcpu/arm/cortex-a/interrupt.c

@@ -110,7 +110,7 @@ void rt_hw_interrupt_umask(int vector)
  * @param old_handler the old interrupt service routine
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-        void *param, char *name)
+        void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 19 - 0
libcpu/arm/cortex-m0/cpuport.c

@@ -114,3 +114,22 @@ void rt_hw_hard_fault_exception(struct exception_stack_frame *contex)
 
     while (1);
 }
+
+#define SCB_CFSR        (*(volatile const unsigned *)0xE000ED28) /* Configurable Fault Status Register */
+#define SCB_HFSR        (*(volatile const unsigned *)0xE000ED2C) /* HardFault Status Register */
+#define SCB_MMAR        (*(volatile const unsigned *)0xE000ED34) /* MemManage Fault Address register */
+#define SCB_BFAR        (*(volatile const unsigned *)0xE000ED38) /* Bus Fault Address Register */
+#define SCB_AIRCR       (*(volatile unsigned long *)0xE000ED00)  /* Reset control Address Register */
+#define SCB_RESET_VALUE 0x05FA0004                               /* Reset value, write to SCB_AIRCR can reset cpu */
+
+#define SCB_CFSR_MFSR   (*(volatile const unsigned char*)0xE000ED28)  /* Memory-management Fault Status Register */
+#define SCB_CFSR_BFSR   (*(volatile const unsigned char*)0xE000ED29)  /* Bus Fault Status Register */
+#define SCB_CFSR_UFSR   (*(volatile const unsigned short*)0xE000ED2A) /* Usage Fault Status Register */
+
+/**
+ * reset CPU
+ */
+RT_WEAK void rt_hw_cpu_reset(void)
+{
+    SCB_AIRCR  = SCB_RESET_VALUE;//((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |SCB_AIRCR_SYSRESETREQ_Msk);
+}

+ 1 - 1
libcpu/arm/cortex-r4/interrupt.c

@@ -86,7 +86,7 @@ void rt_hw_interrupt_umask(int vector)
  * @return the old handler
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-									void *param, char *name)
+									void *param, const char *name)
 {
 	rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
libcpu/arm/lpc214x/cpuport.c

@@ -137,7 +137,7 @@ void rt_hw_interrupt_umask(int vector)
  * @return old handler
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-                                         void *param, char *name)
+                                         void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
libcpu/arm/lpc24xx/interrupt.c

@@ -83,7 +83,7 @@ void rt_hw_interrupt_umask(int vector)
  * @return the old handler
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler, 
-									void *param, char *name)
+									void *param, const char *name)
 {
 	rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
libcpu/arm/realview-a8-vmm/interrupt.c

@@ -103,7 +103,7 @@ void rt_hw_interrupt_umask(int vector)
  * @param old_handler the old interrupt service routine
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-        void *param, char *name)
+        void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
libcpu/arm/s3c24x0/interrupt.c

@@ -104,7 +104,7 @@ void rt_hw_interrupt_umask(int vector)
  * @param old_handler the old interrupt service routine
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-                                        void *param, char *name)
+                                        void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
libcpu/arm/sep4020/interrupt.c

@@ -107,7 +107,7 @@ void rt_hw_interrupt_umask(int vector)
  * @param old_handler the old interrupt service routine
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-                                        void *param, char *name)
+                                        void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
libcpu/arm/zynq7000/interrupt.c

@@ -112,7 +112,7 @@ void rt_hw_interrupt_umask(int vector)
  * @param old_handler the old interrupt service routine
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-        void *param, char *name)
+        void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
libcpu/ia32/interrupt.c

@@ -131,7 +131,7 @@ void rt_hw_interrupt_mask(int vector)
 rt_isr_handler_t rt_hw_interrupt_install(int              vector,
                                          rt_isr_handler_t handler,
                                          void            *param,
-                                         char            *name)
+                                         const char      *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
libcpu/mips/loongson_1b/interrupt.c

@@ -96,7 +96,7 @@ void rt_hw_interrupt_umask(int vector)
  * @param old_handler the old interrupt service routine
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-                                         void *param, char *name)
+                                         void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
libcpu/mips/loongson_1c/interrupt.c

@@ -112,7 +112,7 @@ void rt_hw_interrupt_umask(int vector)
  * @param old_handler the old interrupt service routine
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-                                         void *param, char *name)
+                                         void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
libcpu/mips/x1000/interrupt.c

@@ -80,7 +80,7 @@ void rt_hw_interrupt_umask(int vector)
 }
 
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-        void *param, char *name)
+        void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
libcpu/mips/xburst/interrupt.c

@@ -95,7 +95,7 @@ void rt_hw_interrupt_umask(int vector)
  * @return old handler
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-        void *param, char *name)
+        void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 1 - 1
libcpu/ppc/ppc405/interrupt.c

@@ -79,7 +79,7 @@ void uic_interrupt(rt_uint32_t uic_base, int vec_base)
 }
 
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t new_handler, 
-    void* param, char* name)
+    void* param, const char* name)
 {
     int	intVal;
     rt_isr_handler_t old_handler;

+ 241 - 0
libcpu/ti-dsp/c28x/context.s

@@ -0,0 +1,241 @@
+;
+; Copyright (c) 2006-2018, RT-Thread Development Team
+;
+; SPDX-License-Identifier: Apache-2.0
+;
+; Change Logs:
+; Date           Author       Notes
+; 2018-09-01     xuzhuoyi     the first version.
+;
+
+    .ref   _rt_interrupt_to_thread
+    .ref   _rt_interrupt_from_thread
+    .ref   _rt_thread_switch_interrupt_flag
+
+    .def   _RTOSINT_Handler
+    .def   _rt_hw_get_st0
+    .def   _rt_hw_get_st1
+    .def   _rt_hw_context_switch_interrupt
+    .def   _rt_hw_context_switch
+    .def   _rt_hw_context_switch_to
+    .def   _rt_hw_interrupt_thread_switch
+    .def   _rt_hw_interrupt_disable
+    .def   _rt_hw_interrupt_enable
+
+
+RT_CTX_SAVE  .macro      
+
+
+    PUSH    AR1H:AR0H
+    PUSH    XAR2
+    PUSH    XAR3
+    PUSH    XAR4
+    PUSH    XAR5
+    PUSH    XAR6
+    PUSH    XAR7
+    PUSH    XT
+    PUSH    RPC
+
+ 
+    .endm
+
+
+RT_CTX_RESTORE  .macro
+                                  
+    POP     RPC
+    POP     XT
+    POP     XAR7
+    POP     XAR6
+    POP     XAR5
+    POP     XAR4
+    POP     XAR3
+    POP     XAR2
+
+
+    MOVZ    AR0 , @SP                                           
+    SUBB    XAR0, #6
+    MOVL    ACC , *XAR0
+    AND     ACC, #0xFFFF << 16
+    MOV     AL, IER
+    MOVL   *XAR0, ACC
+
+
+    POP     AR1H:AR0H
+
+    .endm
+
+
+.text
+    .newblock
+
+;
+; rt_base_t rt_hw_interrupt_disable();
+;
+    .asmfunc
+_rt_hw_interrupt_disable:
+    DINT
+    LRETR
+    .endasmfunc
+
+;
+; void rt_hw_interrupt_enable(rt_base_t level);
+;
+    .asmfunc
+_rt_hw_interrupt_enable:
+    EINT
+    LRETR
+    .endasmfunc
+    
+;
+; void rt_hw_context_switch(rt_uint32 from, rt_uint32 to);
+; r0 --> from
+; r4 --> to
+
+ 
+    .asmfunc
+_rt_hw_context_switch_interrupt:
+_rt_hw_context_switch:
+    MOVL    XAR0, #0
+    MOV     AR0, AL
+    MOVL    XAR4, *-SP[4]
+    ; set rt_thread_switch_interrupt_flag to 1 
+    MOVL    XAR5, #_rt_thread_switch_interrupt_flag
+    MOVL    XAR6, *XAR5
+    MOVL    ACC, XAR6
+    CMPB    AL, #1
+    B       _reswitch, EQ
+    MOVL     XAR6, #1
+    MOVL    *XAR5, XAR6
+
+    MOVL    XAR5, #_rt_interrupt_from_thread   ; set rt_interrupt_from_thread
+    MOVL    *XAR5, XAR0
+
+_reswitch:
+    MOVL    XAR5, #_rt_interrupt_to_thread     ; set rt_interrupt_to_thread
+    MOVL    *XAR5, XAR4
+
+    TRAP    #16
+    LRETR
+    .endasmfunc
+     
+     .asmfunc
+_RTOSINT_Handler:
+; disable interrupt to protect context switch 
+    DINT
+
+    ; get rt_thread_switch_interrupt_flag 
+    MOV     AR0, #_rt_thread_switch_interrupt_flag
+    MOV     AL, *AR0
+    MOV     AR1, AL
+    CMP     AR1, #0
+    B       rtosint_exit, EQ         ; pendsv already handled 
+
+    ; clear rt_thread_switch_interrupt_flag to 0 
+    MOV     AR1, #0x00
+    MOV     *AR0, AR1
+
+    MOV     AR0, #_rt_interrupt_from_thread
+    MOV     AL, *AR0
+    MOV     AR1, AL
+    CMP     AR1, #0
+    B       switch_to_thread, EQ    ; skip register save at the first time 
+
+    ;MOVZ    AR1, @SP                 ; get from thread stack pointer 
+    
+;#if defined (__VFP_FP__) && !defined(__SOFTFP__)
+;    TST     lr, #0x10           ; if(!EXC_RETURN[4]) 
+;    VSTMDBEQ r1!, {d8 - d15}    ; push FPU register s16~s31 
+;#endif
+    
+    RT_CTX_SAVE     ; push r4 - r11 register 
+
+;#if defined (__VFP_FP__) && !defined(__SOFTFP__)
+;    MOV     r4, #0x00           ; flag = 0 
+
+;    TST     lr, #0x10           ; if(!EXC_RETURN[4]) 
+;    MOVEQ   r4, #0x01           ; flag = 1 
+
+;    STMFD   r1!, {r4}           ; push flag 
+;#endif
+
+    MOV     AL, *AR0
+    MOV     AR1, AL
+    MOVZ    AR1, @SP                 ; get from thread stack pointer
+    MOV     *AR0, AR1                ; update from thread stack pointer 
+
+switch_to_thread:
+    MOV     AR1, #_rt_interrupt_to_thread
+    MOV     AL, *AR1
+    MOV     AR1, AL
+    MOV     AL, *AR1
+    MOV     AR1, AL                ; load thread stack pointer 
+
+;#if defined (__VFP_FP__) && !defined(__SOFTFP__)
+;    LDMFD   r1!, {r3}           ; pop flag 
+;#endif
+
+    MOV     @SP, AR1
+    INC     SP
+    RT_CTX_RESTORE     ; pop r4 - r11 register
+
+rtosint_exit:
+    ; restore interrupt 
+    EINT
+
+    IRET
+    .endasmfunc
+
+    .asmfunc
+_rt_hw_get_st0:
+    PUSH    ST0
+    POP     AL
+    LRETR
+    .endasmfunc
+
+    .asmfunc
+_rt_hw_get_st1:
+    PUSH    ST1
+    POP     AL
+    LRETR
+    .endasmfunc
+
+;
+; * void rt_hw_context_switch_to(rt_uint32 to);
+; * r0 --> to
+ 
+    .asmfunc
+_rt_hw_context_switch_to:
+    MOV     AR1, #_rt_interrupt_to_thread
+    MOV     *AR1, AL
+
+;#if defined (__VFP_FP__) && !defined(__SOFTFP__)
+    ; CLEAR CONTROL.FPCA 
+;    MRS     r2, CONTROL         ; read 
+;    BIC     r2, #0x04           ; modify 
+;    MSR     CONTROL, r2         ; write-back 
+;#endif
+
+    ; set from thread to 0 
+    MOV     AR1, #_rt_interrupt_from_thread
+    MOV     AR0, #0x0
+    MOV     *AR1, AR0
+
+    ; set interrupt flag to 1 
+    MOV     AR1, #_rt_thread_switch_interrupt_flag
+    MOV     AR0, #1
+    MOV     *AR1, AR0
+
+    TRAP    #16
+
+
+    ; never reach here! 
+    .endasmfunc
+    
+; compatible with old version 
+    .asmfunc
+_rt_hw_interrupt_thread_switch:
+    LRETR
+    NOP
+    .endasmfunc
+    
+.end

+ 110 - 0
libcpu/ti-dsp/c28x/cpuport.c

@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2006-2018, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2018-09-01     xuzhuoyi     the first version.
+ */
+
+#include <rtthread.h>
+
+/* exception and interrupt handler table */
+rt_uint32_t rt_interrupt_from_thread;
+rt_uint32_t rt_interrupt_to_thread;
+rt_uint32_t rt_thread_switch_interrupt_flag;
+/* exception hook */
+static rt_err_t (*rt_exception_hook)(void *context) = RT_NULL;
+
+struct exception_stack_frame
+{
+    rt_uint32_t t_st0;
+    rt_uint32_t acc;
+    rt_uint32_t p;
+    rt_uint32_t ar1_ar0;
+    rt_uint32_t dp_st1;
+    rt_uint32_t dbgstat_ier;
+    rt_uint32_t return_address;
+};
+
+struct stack_frame
+{
+    struct exception_stack_frame exception_stack_frame;
+
+    /* r4 ~ r11 register */
+    rt_uint16_t ar0h;
+    rt_uint16_t ar1h;
+    rt_uint32_t xar2;
+    rt_uint32_t xar3;
+    rt_uint32_t xar4;
+    rt_uint32_t xar5;
+    rt_uint32_t xar6;
+    rt_uint32_t xar7;
+    rt_uint32_t xt;
+    rt_uint32_t rpc;
+
+
+};
+
+rt_uint8_t *rt_hw_stack_init(void       *tentry,
+                             void       *parameter,
+                             rt_uint8_t *stack_addr,
+                             void       *texit)
+{
+    struct stack_frame *stack_frame;
+    rt_uint8_t         *stk;
+    unsigned long       i;
+
+    stk  = stack_addr;
+    stk  = (rt_uint8_t *)RT_ALIGN((rt_uint32_t)stk, 8);
+    //stk -= sizeof(struct stack_frame);
+
+    stack_frame = (struct stack_frame *)stk;
+
+    /* init all register */
+    for (i = 0; i < sizeof(struct stack_frame) / sizeof(rt_uint32_t); i ++)
+    {
+        ((rt_uint32_t *)stack_frame)[i] = 0xdeadbeef;
+    }
+
+    stack_frame->exception_stack_frame.t_st0   = 0x11110000 | rt_hw_get_st0();
+    stack_frame->exception_stack_frame.acc     = 0x33332222;
+    stack_frame->exception_stack_frame.ar1_ar0 = 0x00001111 & (unsigned long)parameter; /* ar0 : argument */
+    stack_frame->exception_stack_frame.p       = 0x55554444;                            /* p */
+    stack_frame->exception_stack_frame.dp_st1  = (0x00000000) | rt_hw_get_st1();        /* dp_st1 */
+    stack_frame->exception_stack_frame.dbgstat_ier    = 0;                              /* dbgstat_ier */
+    stack_frame->exception_stack_frame.return_address = (unsigned long)tentry;          /* return_address */
+    stack_frame->rpc = (unsigned long)texit;
+
+    /* return task's current stack address */
+    return stk + sizeof(struct stack_frame);
+}
+
+/**
+ * This function set the hook, which is invoked on fault exception handling.
+ *
+ * @param exception_handle the exception handling hook function.
+ */
+void rt_hw_exception_install(rt_err_t (*exception_handle)(void *context))
+{
+    rt_exception_hook = exception_handle;
+}
+
+
+struct exception_info
+{
+    rt_uint32_t exc_return;
+    struct stack_frame stack_frame;
+};
+
+
+/**
+ * shutdown CPU
+ */
+void rt_hw_cpu_shutdown(void)
+{
+    rt_kprintf("shutdown...\n");
+
+    RT_ASSERT(0);
+}

+ 1 - 1
libcpu/unicore32/sep6200/interrupt.c

@@ -199,7 +199,7 @@ void rt_hw_interrupt_umask(int irq)
  * @param old_handler the old interrupt service routine
  */
 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
-                                        void *param, char *name)
+                                        void *param, const char *name)
 {
     rt_isr_handler_t old_handler = RT_NULL;
 

+ 6 - 0
src/Kconfig

@@ -300,4 +300,10 @@ menu "Kernel Device Object"
 
 endmenu
 
+config RT_VER_NUM
+    hex
+    default 0x30102
+    help
+        RT-Thread version number
+
 endmenu

+ 2 - 4
src/idle.c

@@ -221,14 +221,12 @@ void rt_thread_idle_excute(void)
 
 static void rt_thread_idle_entry(void *parameter)
 {
-#ifdef RT_USING_IDLE_HOOK
-    rt_size_t i;
-#endif
-
     while (1)
     {
 
 #ifdef RT_USING_IDLE_HOOK
+        rt_size_t i;
+
         for (i = 0; i < RT_IDEL_HOOK_LIST_SIZE; i++)
         {
             if (idle_hook_list[i] != RT_NULL)

+ 1 - 1
src/kservice.c

@@ -535,7 +535,7 @@ void rt_show_version(void)
     rt_kprintf("- RT -     Thread Operating System\n");
     rt_kprintf(" / | \\     %d.%d.%d build %s\n",
                RT_VERSION, RT_SUBVERSION, RT_REVISION, __DATE__);
-    rt_kprintf(" 2006 - 2018 Copyright by rt-thread team\n");
+    rt_kprintf(" 2006 - 2019 Copyright by rt-thread team\n");
 }
 RTM_EXPORT(rt_show_version);
 

+ 1 - 1
src/signal.c

@@ -108,7 +108,7 @@ static void _signal_deliver(rt_thread_t tid)
             /* do signal action in self thread context */
             rt_thread_handle_sig(RT_TRUE);
         }
-        else if (!((tid->stat & RT_THREAD_STAT_MASK) & RT_THREAD_STAT_SIGNAL))
+        else if (!((tid->stat & RT_THREAD_STAT_SIGNAL_MASK) & RT_THREAD_STAT_SIGNAL))
         {
             /* add signal state */
             tid->stat |= RT_THREAD_STAT_SIGNAL;

+ 32 - 6
tools/building.py

@@ -105,8 +105,11 @@ class Win32Spawn:
         try:
             proc = subprocess.Popen(cmdline, env=_e, shell=False)
         except Exception as e:
-            print ('Error in calling:\n' + cmdline)
-            print ('Exception: ' + e + ': ' + os.strerror(e.errno))
+            print ('Error in calling command:' + cmdline.split(' ')[0])
+            print ('Exception: ' + os.strerror(e.errno))
+            if (os.strerror(e.errno) == "No such file or directory"):
+                print ("\nPlease check Toolchains PATH setting.\n")
+
             return e.errno
         finally:
             os.environ['PATH'] = old_path
@@ -128,7 +131,7 @@ def GenCconfigFile(env, BuildOptions):
             f = open('cconfig.h', 'r')
             if f:
                 contents = f.read()
-                f.close();
+                f.close()
 
                 prep = PatchedPreProcessor()
                 prep.process_contents(contents)
@@ -184,7 +187,7 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [
     AddOption('--target',
                       dest = 'target',
                       type = 'string',
-                      help = 'set target project: mdk/mdk4/mdk5/iar/vs/vsc/ua/cdk')
+                      help = 'set target project: mdk/mdk4/mdk5/iar/vs/vsc/ua/cdk/ses')
     AddOption('--genconfig',
                 dest = 'genconfig',
                 action = 'store_true',
@@ -224,7 +227,8 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [
                 'vsc' : ('gcc', 'gcc'),
                 'cb':('keil', 'armcc'),
                 'ua':('gcc', 'gcc'),
-                'cdk':('gcc', 'gcc')}
+                'cdk':('gcc', 'gcc'),
+                'ses' : ('gcc', 'gcc')}
     tgt_name = GetOption('target')
 
     if tgt_name:
@@ -345,8 +349,20 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [
                 action = 'store_true',
                 default = False,
                 help = 'make menuconfig for RT-Thread BSP')
-    if GetOption('pyconfig'):
+    AddOption('--pyconfig-silent',
+                dest = 'pyconfig_silent',
+                action = 'store_true',
+                default = False,
+                help = 'Don`t show pyconfig window')
+
+    if GetOption('pyconfig_silent'):    
+        from menuconfig import pyconfig_silent
+
+        pyconfig_silent(Rtt_Root)
+        exit(0)
+    elif GetOption('pyconfig'):
         from menuconfig import pyconfig
+
         pyconfig(Rtt_Root)
         exit(0)
 
@@ -797,6 +813,10 @@ def GenTargetProject(program = None):
         from cdk import CDKProject
         CDKProject('project.cdkproj', Projects)
 
+    if GetOption('target') == 'ses':
+        from ses import SESProject
+        SESProject(Env)
+
 def EndBuilding(target, program = None):
     import rtconfig
 
@@ -805,6 +825,12 @@ def EndBuilding(target, program = None):
     Env['target']  = program
     Env['project'] = Projects
 
+    if hasattr(rtconfig, 'BSP_LIBRARY_TYPE'):
+        Env['bsp_lib_type'] = rtconfig.BSP_LIBRARY_TYPE
+
+    if hasattr(rtconfig, 'dist_handle'):
+        Env['dist_handle'] = rtconfig.dist_handle
+
     Env.AddPostAction(target, rtconfig.POST_ACTION)
     # Add addition clean files
     Clean(target, 'cconfig.h')

+ 17 - 0
tools/menuconfig.py

@@ -251,3 +251,20 @@ def pyconfig(RTT_ROOT):
     if mtime != mtime2:
         mk_rtconfig(fn)
 
+
+# pyconfig_silent for windows and linux
+def pyconfig_silent(RTT_ROOT):
+    import pymenuconfig
+    print("In pyconfig silent mode. Don`t display menuconfig window.")
+
+    touch_env()
+    env_dir = get_env_dir()
+
+    os.environ['PKGS_ROOT'] = os.path.join(env_dir, 'packages')
+
+    fn = '.config'
+
+    pymenuconfig.main(['--kconfig', 'Kconfig', '--config', '.config', '--silent', 'True'])
+
+    # silent mode, force to make rtconfig.h
+    mk_rtconfig(fn)

+ 50 - 0
tools/mkdist.py

@@ -122,6 +122,24 @@ def bsp_update_kconfig(dist_dir):
                 line = line[0:position] + 'default: "rt-thread"\n'
                 found = 0
             f.write(line)
+            
+def bsp_update_kconfig_library(dist_dir):
+    # change RTT_ROOT in Kconfig
+    if not os.path.isfile(os.path.join(dist_dir, 'Kconfig')):
+        return
+
+    with open(os.path.join(dist_dir, 'Kconfig'), 'r') as f:
+        data = f.readlines()
+    with open(os.path.join(dist_dir, 'Kconfig'), 'w') as f:
+        found = 0
+        for line in data:
+            if line.find('RTT_ROOT') != -1:
+                found = 1
+            if line.find('../libraries') != -1 and found:
+                position = line.find('../libraries')
+                line = line[0:position] + 'libraries/Kconfig"\n'
+                found = 0
+            f.write(line)
 
 def bs_update_ide_project(bsp_root, rtt_root):
     import subprocess
@@ -169,6 +187,21 @@ def MkDist_Strip(program, BSP_ROOT, RTT_ROOT, Env):
     print('=> %s' % os.path.basename(BSP_ROOT))
     bsp_copy_files(BSP_ROOT, dist_dir)
 
+    # copy stm32 bsp libiary files
+    if os.path.basename(os.path.dirname(BSP_ROOT)) == 'stm32':
+        print("=> copy stm32 bsp library")
+        library_path = os.path.join(os.path.dirname(BSP_ROOT), 'libraries')
+        library_dir  = os.path.join(dist_dir, 'libraries')
+        bsp_copy_files(os.path.join(library_path, 'HAL_Drivers'), os.path.join(library_dir, 'HAL_Drivers'))
+        bsp_copy_files(os.path.join(library_path, Env['bsp_lib_type']), os.path.join(library_dir, Env['bsp_lib_type']))
+        shutil.copyfile(os.path.join(library_path, 'Kconfig'), os.path.join(library_dir, 'Kconfig'))
+
+    # do bsp special dist handle
+    if 'dist_handle' in Env:       
+        print("=> start dist handle")
+        dist_handle = Env['dist_handle']
+        dist_handle(BSP_ROOT)
+        
     # get all source files from program
     for item in program:
         walk_children(item)
@@ -260,6 +293,7 @@ def MkDist_Strip(program, BSP_ROOT, RTT_ROOT, Env):
     bsp_update_sconstruct(dist_dir)
     # change RTT_ROOT in Kconfig
     bsp_update_kconfig(dist_dir)
+    bsp_update_kconfig_library(dist_dir)
     # update all project files
     bs_update_ide_project(dist_dir, target_path)
 
@@ -280,6 +314,21 @@ def MkDist(program, BSP_ROOT, RTT_ROOT, Env):
     print('=> %s' % os.path.basename(BSP_ROOT))
     bsp_copy_files(BSP_ROOT, dist_dir)
 
+    # copy stm32 bsp libiary files
+    if os.path.basename(os.path.dirname(BSP_ROOT)) == 'stm32':
+        print("=> copy stm32 bsp library")
+        library_path = os.path.join(os.path.dirname(BSP_ROOT), 'libraries')
+        library_dir  = os.path.join(dist_dir, 'libraries')
+        bsp_copy_files(os.path.join(library_path, 'HAL_Drivers'), os.path.join(library_dir, 'HAL_Drivers'))
+        bsp_copy_files(os.path.join(library_path, Env['bsp_lib_type']), os.path.join(library_dir, Env['bsp_lib_type']))
+        shutil.copyfile(os.path.join(library_path, 'Kconfig'), os.path.join(library_dir, 'Kconfig'))
+
+    # do bsp special dist handle
+    if 'dist_handle' in Env:
+        print("=> start dist handle")
+        dist_handle = Env['dist_handle']
+        dist_handle(BSP_ROOT)
+
     # copy tools directory
     print('=> components')
     do_copy_folder(os.path.join(RTT_ROOT, 'components'), os.path.join(target_path, 'components'))
@@ -316,6 +365,7 @@ def MkDist(program, BSP_ROOT, RTT_ROOT, Env):
     bsp_update_sconstruct(dist_dir)
     # change RTT_ROOT in Kconfig
     bsp_update_kconfig(dist_dir)
+    bsp_update_kconfig_library(dist_dir)
     # update all project files
     bs_update_ide_project(dist_dir, target_path)
 

+ 41 - 8
tools/pymenuconfig.py

@@ -543,8 +543,11 @@ class MenuConfig(object):
         ('Save as', ACTION_SAVE_AS),
     )
 
-    def __init__(self, kconfig):
+    def __init__(self, kconfig, __silent=None):
         self.kconfig = kconfig
+        self.__silent = __silent
+        if self.__silent is True:
+            return
 
         # Instantiate Tk widgets
         self.root = tk.Tk()
@@ -728,6 +731,8 @@ class MenuConfig(object):
     def _close_window(self):
         if self.prevent_losing_changes():
             print('Exiting..')
+            if self.__silent is True:
+                return
             self.root.destroy()
 
     def _action_exit(self):
@@ -949,6 +954,8 @@ class MenuConfig(object):
         - current config path
         - status string (see set_status_string())
         """
+        if self.__silent is True:
+            return
         self.tk_status.set('{} [{}] {}'.format(
             '<UNSAVED>' if self.unsaved_changes else '',
             self.config_path if self.config_path else '',
@@ -1017,6 +1024,10 @@ class MenuConfig(object):
             self.mark_as_changed()
         if not self.unsaved_changes:
             return True
+        
+        if self.__silent:
+            saved = self.save_config()
+            return saved
         res = messagebox.askyesnocancel(
             parent=self.root,
             title='Unsaved changes',
@@ -1056,11 +1067,13 @@ class MenuConfig(object):
             self.kconfig.load_config(path)
         except IOError as e:
             self.set_status_string('Failed to load: \'{}\''.format(path))
-            self.refresh_display()
+            if not self.__silent:
+                self.refresh_display()
             print('Failed to load config \'{}\': {}'.format(path, e))
             return False
         self.set_status_string('Opened config')
-        self.refresh_display()
+        if not self.__silent:
+            self.refresh_display()
         return True
 
     def save_config(self, force_file_dialog=False):
@@ -1154,19 +1167,39 @@ def main(argv=None):
         type=str,
         help='path to .config file to load'
     )
+    if "--silent" in argv:
+        parser.add_argument(
+            '--silent',
+            dest = '_silent_',
+            type=str,
+            help='silent mode, not show window'
+        )
     args = parser.parse_args(argv)
     kconfig_path = args.kconfig
     config_path = args.config
     # Verify that Kconfig file exists
     if not os.path.isfile(kconfig_path):
         raise RuntimeError('\'{}\': no such file'.format(kconfig_path))
+
     # Parse Kconfig files
     kconf = kconfiglib.Kconfig(filename=kconfig_path)
-    mc = MenuConfig(kconf)
-    # If config file was specified, load it
-    if config_path:
-        mc.open_config(config_path)
-    tk.mainloop()
+
+    if "--silent" not in argv:
+        print("In normal mode. Will show menuconfig window.")
+        mc = MenuConfig(kconf)
+        # If config file was specified, load it
+        if config_path:
+            mc.open_config(config_path)
+
+        print("Enter mainloop. Waiting...")
+        tk.mainloop()
+    else:
+        print("In silent mode. Don`t show menuconfig window.")
+        mc = MenuConfig(kconf, True)
+        # If config file was specified, load it
+        if config_path:
+            mc.open_config(config_path)
+        mc._close_window()
 
 
 if __name__ == '__main__':

+ 92 - 0
tools/ses.py

@@ -0,0 +1,92 @@
+# SEGGER Embedded Studio Project Generator
+
+import os
+import sys
+
+import xml.etree.ElementTree as etree
+from xml.etree.ElementTree import SubElement
+from utils import _make_path_relative
+from utils import xml_indent
+from utils import ProjectInfo
+
+def SDKAddGroup(parent, name, files, project_path):
+    # don't add an empty group
+    if len(files) == 0:
+        return
+
+    group = SubElement(parent, 'folder', attrib={'Name': name})
+
+    for f in files:
+        fn = f.rfile()
+        name = fn.name
+        path = os.path.dirname(fn.abspath)
+
+        basename = os.path.basename(path)
+        path = _make_path_relative(project_path, path)
+        elm_attr_name = os.path.join(path, name)
+
+        file = SubElement(group, 'file', attrib={'file_name': elm_attr_name})
+
+    return group
+
+def SESProject(env) :
+    target = 'project.emProject'
+    tree = etree.parse('template.emProject')
+    # print(etree.dump(tree.getroot()))
+    # etree.dump(tree.getroot())
+
+    project = ProjectInfo(env)
+    # print(project)
+    # return 
+
+    project_path = os.path.abspath(env['BSP_ROOT'])
+    script = env['project']
+
+    root = tree.getroot()
+    out = file(target, 'w')
+    out.write('<!DOCTYPE CrossStudio_Project_File>\n')
+
+    CPPPATH = []
+    CPPDEFINES = []
+    LINKFLAGS = ''
+    CCFLAGS = ''
+
+    project_node = tree.find('project')
+
+    for group in script:
+        # print(group)
+
+        group_tree = SDKAddGroup(project_node, group['name'], group['src'], project_path)
+
+        # get each group's cc flags
+        if group.has_key('CCFLAGS') and group['CCFLAGS']:
+            if CCFLAGS:
+                CCFLAGS += ' ' + group['CCFLAGS']
+            else:
+                CCFLAGS += group['CCFLAGS']   
+                
+        # get each group's link flags
+        if group.has_key('LINKFLAGS') and group['LINKFLAGS']:
+            if LINKFLAGS:
+                LINKFLAGS += ' ' + group['LINKFLAGS']
+            else:
+                LINKFLAGS += group['LINKFLAGS']
+
+    # write include path, definitions and link flags
+    path = ';'.join([_make_path_relative(project_path, os.path.normpath(i)) for i in project['CPPPATH']])
+    path = path.replace('\\', '/')
+    defines = ';'.join(set(project['CPPDEFINES']))
+
+    node = tree.findall('project/configuration')
+    for item in node:
+        if item.get('c_preprocessor_definitions'):
+            item.set('c_preprocessor_definitions', defines)
+
+        if item.get('c_user_include_directories'):
+            item.set('c_user_include_directories', path)
+
+    xml_indent(root)
+    out.write(etree.tostring(root, encoding='utf-8'))
+    out.close()
+
+    return

+ 3 - 1
tools/utils.py

@@ -245,7 +245,9 @@ def ProjectInfo(env):
     return proj
 
 def VersionCmp(ver1, ver2):
-    la = ver1.split('.')
+    la=[];
+    if ver1:
+        la = ver1.split('.')
     lb = ver2.split('.')
     f = 0
     if len(la) > len(lb):