diff --git a/bsp/allwinner_tina/libcpu/interrupt.c b/bsp/allwinner_tina/libcpu/interrupt.c index af9b054da96694a68f3b77eacd8814de743d4a7c..b32a331c60840176fde8b185dbf5b55b0fb783be 100644 --- a/bsp/allwinner_tina/libcpu/interrupt.c +++ b/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; diff --git a/bsp/allwinner_tina/libcpu/interrupt.h b/bsp/allwinner_tina/libcpu/interrupt.h index 5389f0655bb74f26c2774874eede8cb200ebd892..2292b794bdc8c8cd4c14a0c7930c37672768da44 100644 --- a/bsp/allwinner_tina/libcpu/interrupt.h +++ b/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__ */ diff --git a/bsp/asm9260t/platform/interrupt.c b/bsp/asm9260t/platform/interrupt.c index 20b8b62e00585b3788a25bb11f10163e9429b1a3..6121203c23d66b1b6103e83f493ba2230488d296 100644 --- a/bsp/asm9260t/platform/interrupt.c +++ b/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; diff --git a/bsp/at91sam9260/platform/interrupt.c b/bsp/at91sam9260/platform/interrupt.c index b6231e3f03127317179552cf1e18722fe0318b97..7a83fca494b5224e6ea178fc2f900d6b4feb7dfd 100644 --- a/bsp/at91sam9260/platform/interrupt.c +++ b/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; diff --git a/bsp/dm365/platform/interrupt.c b/bsp/dm365/platform/interrupt.c index 7e8772ed6e5a8fd1d340b827b48b3f9ddd08c40b..eee5709da0328d1eed103ffd62adbe1417c0390f 100644 --- a/bsp/dm365/platform/interrupt.c +++ b/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; diff --git a/bsp/fh8620/drivers/interrupt.c b/bsp/fh8620/drivers/interrupt.c index a608b9a0727b76a4b699893a8a9329dcc66705ec..ab522fab703e1a722fabb065e34702baf1e2c1c1 100644 --- a/bsp/fh8620/drivers/interrupt.c +++ b/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; diff --git a/bsp/fh8620/drivers/interrupt.h b/bsp/fh8620/drivers/interrupt.h index 575b0a5442e1a65d249aea9072bf5b02ba282e64..fd4283b95c9b9aa348e1fdfa348f21b3e72ec1a4 100644 --- a/bsp/fh8620/drivers/interrupt.h +++ b/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_ */ diff --git a/bsp/gkipc/armv6/interrupt.c b/bsp/gkipc/armv6/interrupt.c index dc86fe5466f3a6dfbf4f7198d6152894cf2e5b8b..0eb03c9b2c20dc601836d96360cfdef2af312b1c 100644 --- a/bsp/gkipc/armv6/interrupt.c +++ b/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; diff --git a/bsp/hifive1/drivers/interrupt.c b/bsp/hifive1/drivers/interrupt.c index 5acd7f716724c16aa3ed410897f1c51ebfc93f79..30c5279a627ff2a1542063a6fadcd196db1f117e 100644 --- a/bsp/hifive1/drivers/interrupt.c +++ b/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; diff --git a/bsp/hifive1/drivers/interrupt.h b/bsp/hifive1/drivers/interrupt.h index 3266f881d7a1ef2685a53a9f92e797c6cb563f62..506634e6676832d1df97e773789081419a7d1219 100644 --- a/bsp/hifive1/drivers/interrupt.h +++ b/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 diff --git a/bsp/imx6sx/cortex-a9/cpu/interrupt.c b/bsp/imx6sx/cortex-a9/cpu/interrupt.c index 3934c84aafcae5bb0fb5d7a1c5fc09645fb822e8..fb6e3ff3e06f53dd7fa9a3ba7ccf7e6508a4424e 100644 --- a/bsp/imx6sx/cortex-a9/cpu/interrupt.c +++ b/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; diff --git a/bsp/qemu-vexpress-a9/cpu/interrupt.c b/bsp/qemu-vexpress-a9/cpu/interrupt.c index e66f74604258dfa2ad04d03140c3447c48fe08c6..f7b84422300e379284360b963713d4862b675907 100644 --- a/bsp/qemu-vexpress-a9/cpu/interrupt.c +++ b/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; diff --git a/bsp/qemu-vexpress-gemini/cpu/interrupt.c b/bsp/qemu-vexpress-gemini/cpu/interrupt.c index a189566222bcebc57ffc361a9f8df7122a412cb9..889f74b5caf45f283c9828a36f26268f571de1ab 100644 --- a/bsp/qemu-vexpress-gemini/cpu/interrupt.c +++ b/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; diff --git a/bsp/raspi2/cpu/interrupt.c b/bsp/raspi2/cpu/interrupt.c index b9f0a00dd713938dc1e6ec6f96cfd393f1d49173..d502977c3ec9898673226a99f55e734a4bdbc94e 100644 --- a/bsp/raspi2/cpu/interrupt.c +++ b/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; diff --git a/bsp/tm4c129x/.config b/bsp/tm4c129x/.config index 65b5b05742d3a26547b924342cafe8049ba541e8..ec901ddbe1a7ad458e574c7cab39c1ea5d74b899 100644 --- a/bsp/tm4c129x/.config +++ b/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 # diff --git a/bsp/tm4c129x/rtconfig.h b/bsp/tm4c129x/rtconfig.h index d9e6e561c901169a0594b1bb6c78805cd8d0133b..ec559845e211d85d3261df1d7e0e5416df6c081a 100644 --- a/bsp/tm4c129x/rtconfig.h +++ b/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 */ diff --git a/components/net/lwip-1.4.1/src/arch/include/arch/cc.h b/components/net/lwip-1.4.1/src/arch/include/arch/cc.h index 3889ec9577848decaf44f9472ae181d8e89af314..e0ad8cf588ac533e379a2a16cd84db6cccf18ae2 100644 --- a/components/net/lwip-1.4.1/src/arch/include/arch/cc.h +++ b/components/net/lwip-1.4.1/src/arch/include/arch/cc.h @@ -38,13 +38,14 @@ #include #include -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 +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" diff --git a/include/libc/libc_errno.h b/include/libc/libc_errno.h index 82ae8cf943b42f190ad4451e8b0e18bdc7d3a7f0..e1486048c7e7e665ac489d32aa39266fa5c16437 100644 --- a/include/libc/libc_errno.h +++ b/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 -#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 +#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 diff --git a/include/libc/libc_signal.h b/include/libc/libc_signal.h index 61a7e445e935111a769e35e9c48b2f61d210474f..71f8de125da415de47d6f2fa35c6ddff939edee6 100644 --- a/include/libc/libc_signal.h +++ b/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 diff --git a/include/rtdef.h b/include/rtdef.h index deb3295e2731fd7404cae3dcd03faf07fdf93d7d..5cb3687ce103586d473ebd4f3f5eb27ddcfe0e56 100644 --- a/include/rtdef.h +++ b/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 #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 */ diff --git a/include/rthw.h b/include/rthw.h index c6af392e6284207fd16e7f00e21ef7124e7a5bd8..f4ede56924f6760427b8f2f464f69815186ede55 100644 --- a/include/rthw.h +++ b/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); diff --git a/include/rtservice.h b/include/rtservice.h index 3b6fc94c922f0828dcef13ea34cefd3402de42f5..81d6c71f173b930da62951455b019a56bf3db49b 100644 --- a/include/rtservice.h +++ b/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 } diff --git a/libcpu/Kconfig b/libcpu/Kconfig index 3c80428b5d89b457b0fa774b99853f72f9fdfb00..22b4a6336a9fdee76ed32f3759d9ab68dece9730 100644 --- a/libcpu/Kconfig +++ b/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 diff --git a/libcpu/SConscript b/libcpu/SConscript index a42909e64c448f25d067eebf872ebe4a76795c1b..568da67cc97929311bd5b5465fe89616444a7f95 100644 --- a/libcpu/SConscript +++ b/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') diff --git a/libcpu/arm/AT91SAM7X/interrupt.c b/libcpu/arm/AT91SAM7X/interrupt.c index 62d487403dc24c00359b0cffe8d4918589f910fe..0c37f63ada84ff12c326734f91fea0229bb86d4e 100644 --- a/libcpu/arm/AT91SAM7X/interrupt.c +++ b/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) diff --git a/libcpu/arm/am335x/interrupt.c b/libcpu/arm/am335x/interrupt.c index c10d13b86c0dddc098c9d5dd7fd7b38f58f9003a..3acd8684962aadabc2acfe76974325a6e2c6588b 100644 --- a/libcpu/arm/am335x/interrupt.c +++ b/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; diff --git a/libcpu/arm/arm926/start_rvds.S b/libcpu/arm/arm926/start_rvds.S index 9f789b97f75dd24429698562d5733ff460c096b0..aca0e4577fb7915102cc7cd322b03864a1ada2c2 100644 --- a/libcpu/arm/arm926/start_rvds.S +++ b/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 diff --git a/libcpu/arm/cortex-a/interrupt.c b/libcpu/arm/cortex-a/interrupt.c index 3934c84aafcae5bb0fb5d7a1c5fc09645fb822e8..fb6e3ff3e06f53dd7fa9a3ba7ccf7e6508a4424e 100644 --- a/libcpu/arm/cortex-a/interrupt.c +++ b/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; diff --git a/libcpu/arm/cortex-m0/cpuport.c b/libcpu/arm/cortex-m0/cpuport.c index f5ff8ec1134b8541a6c2ae3e0e55d7e26738e801..5d36fa11fe5cc59055f913d83d3a90ce55641ce6 100644 --- a/libcpu/arm/cortex-m0/cpuport.c +++ b/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); +} diff --git a/libcpu/arm/cortex-r4/interrupt.c b/libcpu/arm/cortex-r4/interrupt.c index 5b3ad1ccc12ea246f63ea070ded45c37a11a22e6..30e14f5a2d337208e8fe2c81a1146bdca9571edb 100644 --- a/libcpu/arm/cortex-r4/interrupt.c +++ b/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; diff --git a/libcpu/arm/lpc214x/cpuport.c b/libcpu/arm/lpc214x/cpuport.c index d5c1c5dce6ad200861b0afb5e0160e8a0f3a6c24..2543a5e0a9e191fa653216cb29ebfbf9d4cff5ec 100644 --- a/libcpu/arm/lpc214x/cpuport.c +++ b/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; diff --git a/libcpu/arm/lpc24xx/interrupt.c b/libcpu/arm/lpc24xx/interrupt.c index 64609ef06e85f25769fac476e6f9252325c14105..a855de1e114db49580f095c4e9a87636a8b345c2 100644 --- a/libcpu/arm/lpc24xx/interrupt.c +++ b/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; diff --git a/libcpu/arm/realview-a8-vmm/interrupt.c b/libcpu/arm/realview-a8-vmm/interrupt.c index 05998d22343c2765d0be68b2992fcbdf29b63117..5ef0bdc46003ac3e3fa2ddac74ede5790ff7c170 100644 --- a/libcpu/arm/realview-a8-vmm/interrupt.c +++ b/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; diff --git a/libcpu/arm/s3c24x0/interrupt.c b/libcpu/arm/s3c24x0/interrupt.c index 10ff60b95a2c8aa4882f8c93c68ee06c02d0019b..8c7aebeb252fd860da6405c7b34dca98ad6244f1 100644 --- a/libcpu/arm/s3c24x0/interrupt.c +++ b/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; diff --git a/libcpu/arm/sep4020/interrupt.c b/libcpu/arm/sep4020/interrupt.c index f688286d19c60959c0c1c2d2b65d31046652bd90..ebc9c9625bd3bd69ef88c774b786d2632393add7 100644 --- a/libcpu/arm/sep4020/interrupt.c +++ b/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; diff --git a/libcpu/arm/zynq7000/interrupt.c b/libcpu/arm/zynq7000/interrupt.c index ce3fbc8dfbd32b9d96880d89d5b0b1f093979d1c..451785523a1eb705e7d5293c6139d50faa4d589c 100644 --- a/libcpu/arm/zynq7000/interrupt.c +++ b/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; diff --git a/libcpu/ia32/interrupt.c b/libcpu/ia32/interrupt.c index 4d86d593df11e7170b43e38a4ba1e34746854525..e620cbe76c070e0595ffe86a9c07796d679213b8 100644 --- a/libcpu/ia32/interrupt.c +++ b/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; diff --git a/libcpu/mips/loongson_1b/interrupt.c b/libcpu/mips/loongson_1b/interrupt.c index be65da914caa2c0bc1bdf7a71b64680e818f8180..998d1e49188d35c29f52bf4b035ca64c7e739e06 100644 --- a/libcpu/mips/loongson_1b/interrupt.c +++ b/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; diff --git a/libcpu/mips/loongson_1c/interrupt.c b/libcpu/mips/loongson_1c/interrupt.c index cc0b8e4e9c702e485183336a0a44d53b50217f24..407580d89e50ab1af5fb11c456df5d0f6af1079a 100644 --- a/libcpu/mips/loongson_1c/interrupt.c +++ b/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; diff --git a/libcpu/mips/x1000/interrupt.c b/libcpu/mips/x1000/interrupt.c index 394cd6cd1c01a08d8fd9ebfa9fee233b8595961f..2a7a42e7925dd9d4c0b848c5f53747ed0ff88f69 100644 --- a/libcpu/mips/x1000/interrupt.c +++ b/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; diff --git a/libcpu/mips/xburst/interrupt.c b/libcpu/mips/xburst/interrupt.c index 4d39c8f62151dc4e127209eaac244f83d6852dd5..337646c735136881234524545409c4b446564a71 100644 --- a/libcpu/mips/xburst/interrupt.c +++ b/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; diff --git a/libcpu/ppc/ppc405/interrupt.c b/libcpu/ppc/ppc405/interrupt.c index dc93dd67a3470104884ba585cf6c2d2e9c625402..27a528e2f0fe8c44f7387f927111639f6329aeda 100644 --- a/libcpu/ppc/ppc405/interrupt.c +++ b/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; diff --git a/libcpu/ti-dsp/c28x/context.s b/libcpu/ti-dsp/c28x/context.s new file mode 100644 index 0000000000000000000000000000000000000000..019b5def1378f5f9ce1488eb0ff1b0da5726ae11 --- /dev/null +++ b/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 diff --git a/libcpu/ti-dsp/c28x/cpuport.c b/libcpu/ti-dsp/c28x/cpuport.c new file mode 100644 index 0000000000000000000000000000000000000000..8885f647a9c9ac753a6bcfa7e05c364765dc58f6 --- /dev/null +++ b/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 + +/* 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); +} diff --git a/libcpu/unicore32/sep6200/interrupt.c b/libcpu/unicore32/sep6200/interrupt.c index 5d088f788aa6aef394584ba66362af08a24331c4..31078320eada32d7fa7ec1290d290b77ea56bc1d 100644 --- a/libcpu/unicore32/sep6200/interrupt.c +++ b/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; diff --git a/src/Kconfig b/src/Kconfig index 78a3bf6d67094b38d588e251fe3e66bda1cd4c26..138130dbaa02b028c630f737042574be7e61eeac 100644 --- a/src/Kconfig +++ b/src/Kconfig @@ -300,4 +300,10 @@ menu "Kernel Device Object" endmenu +config RT_VER_NUM + hex + default 0x30102 + help + RT-Thread version number + endmenu diff --git a/src/idle.c b/src/idle.c index ec7d6bea6ead7f18d427d9132e4e8dec8aa9cfeb..da9fefb3fd7668545ed63a4c7e51833dc9009c07 100644 --- a/src/idle.c +++ b/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) diff --git a/src/kservice.c b/src/kservice.c index dbc4a2fb0e0bb383ec91fa730bb5c69317ea1118..698033d0e46242efc892a43a142e8d819a23bf5b 100644 --- a/src/kservice.c +++ b/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); diff --git a/src/signal.c b/src/signal.c index 890f16f497d0c0152d79be8ca462f45dcc97ca5d..7a7b8877ba92f92505afd3f7a24072a995230f29 100644 --- a/src/signal.c +++ b/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; diff --git a/tools/building.py b/tools/building.py index cbd245b9480ad30a4e9d4ecd8a467f359e53976a..57e58b9ab0894f80d5fd73997b3826abff5a06a8 100644 --- a/tools/building.py +++ b/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') diff --git a/tools/menuconfig.py b/tools/menuconfig.py index ea221553d05a92640f0a6b9c0a2b2c7126cffe20..25504248027a848d72b4b93a2d3749830fd06f41 100644 --- a/tools/menuconfig.py +++ b/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) diff --git a/tools/mkdist.py b/tools/mkdist.py index eef6bfd1180877ebc21b78edc429e052f3dce27a..cf30e9528422cf0319d4ec7c68099da6db145047 100644 --- a/tools/mkdist.py +++ b/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) diff --git a/tools/pymenuconfig.py b/tools/pymenuconfig.py index 0e069355be63d0f58237c8fb53d4a0f480661fe9..67893d72812b8ce320d2ea97b054f78917655dfd 100644 --- a/tools/pymenuconfig.py +++ b/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( '' 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__': diff --git a/tools/ses.py b/tools/ses.py new file mode 100644 index 0000000000000000000000000000000000000000..dcd9d34442ce6340fd2a05d8ede6c4061476efb8 --- /dev/null +++ b/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('\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 diff --git a/tools/utils.py b/tools/utils.py index 692cf36c6925b7368f6239c294b95bb63b846a9b..6dc56322a508c0e21e313662b377b94a3bcb04cf 100644 --- a/tools/utils.py +++ b/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):