未验证 提交 af33226f 编写于 作者: B Bernard Xiong 提交者: GitHub

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

Sync the code to v3.1.2
...@@ -132,7 +132,7 @@ void rt_hw_interrupt_umask(int vector) ...@@ -132,7 +132,7 @@ void rt_hw_interrupt_umask(int vector)
* @return old handler * @return old handler
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
rt_uint32_t pend_addr, en_addr, data; rt_uint32_t pend_addr, en_addr, data;
......
...@@ -102,6 +102,6 @@ typedef struct tina_intc *tina_intc_t; ...@@ -102,6 +102,6 @@ typedef struct tina_intc *tina_intc_t;
void rt_hw_interrupt_init(void); void rt_hw_interrupt_init(void);
void rt_hw_interrupt_mask(int vector); void rt_hw_interrupt_mask(int vector);
void rt_hw_interrupt_umask(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__ */ #endif /* __INTERRUPT_H__ */
...@@ -151,7 +151,7 @@ void rt_hw_interrupt_umask(int irq) ...@@ -151,7 +151,7 @@ void rt_hw_interrupt_umask(int irq)
* @return old handler * @return old handler
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -319,7 +319,7 @@ void rt_hw_interrupt_umask(int irq) ...@@ -319,7 +319,7 @@ void rt_hw_interrupt_umask(int irq)
* @return old handler * @return old handler
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -253,7 +253,7 @@ void rt_hw_interrupt_umask(int irq) ...@@ -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, 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -169,7 +169,7 @@ void rt_hw_interrupt_umask(int irq) ...@@ -169,7 +169,7 @@ void rt_hw_interrupt_umask(int irq)
* @return old handler * @return old handler
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -35,6 +35,6 @@ void rt_hw_interrupt_init(void); ...@@ -35,6 +35,6 @@ void rt_hw_interrupt_init(void);
void rt_hw_interrupt_mask(int irq); void rt_hw_interrupt_mask(int irq);
void rt_hw_interrupt_umask(int irq); void rt_hw_interrupt_umask(int irq);
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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);
#endif /* INTERRUPT_H_ */ #endif /* INTERRUPT_H_ */
...@@ -97,7 +97,7 @@ void rt_hw_interrupt_umask(int irq) ...@@ -97,7 +97,7 @@ void rt_hw_interrupt_umask(int irq)
* @return old handler * @return old handler
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -110,7 +110,7 @@ void rt_hw_interrupt_ack(rt_uint32_t fiq_irq, rt_uint32_t id) ...@@ -110,7 +110,7 @@ void rt_hw_interrupt_ack(rt_uint32_t fiq_irq, rt_uint32_t id)
* @return old handler * @return old handler
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -32,6 +32,6 @@ void rt_hw_interrupt_init(void); ...@@ -32,6 +32,6 @@ void rt_hw_interrupt_init(void);
rt_uint32_t rt_hw_interrupt_get_active(rt_uint32_t fiq_irq); 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); 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, 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 #endif
...@@ -110,7 +110,7 @@ void rt_hw_interrupt_umask(int vector) ...@@ -110,7 +110,7 @@ void rt_hw_interrupt_umask(int vector)
* @param old_handler the old interrupt service routine * @param old_handler the old interrupt service routine
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -91,7 +91,7 @@ void rt_hw_interrupt_umask(int vector) ...@@ -91,7 +91,7 @@ void rt_hw_interrupt_umask(int vector)
* @param old_handler the old interrupt service routine * @param old_handler the old interrupt service routine
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -108,7 +108,7 @@ void rt_hw_interrupt_umask(int vector) ...@@ -108,7 +108,7 @@ void rt_hw_interrupt_umask(int vector)
* @param old_handler the old interrupt service routine * @param old_handler the old interrupt service routine
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -114,7 +114,7 @@ void rt_hw_interrupt_umask(int vector) ...@@ -114,7 +114,7 @@ void rt_hw_interrupt_umask(int vector)
* @param old_handler the old interrupt service routine * @param old_handler the old interrupt service routine
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -98,7 +98,7 @@ CONFIG_RT_USING_SERIAL=y ...@@ -98,7 +98,7 @@ CONFIG_RT_USING_SERIAL=y
# #
# POSIX layer and C standard library # 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 # CONFIG_RT_USING_PTHREADS is not set
# #
......
...@@ -89,7 +89,7 @@ ...@@ -89,7 +89,7 @@
/* POSIX layer and C standard library */ /* POSIX layer and C standard library */
/* RT_USING_LIBC is not set */ #define RT_USING_LIBC
/* RT_USING_PTHREADS is not set */ /* RT_USING_PTHREADS is not set */
/* Network stack */ /* Network stack */
......
...@@ -38,13 +38,14 @@ ...@@ -38,13 +38,14 @@
#include <rthw.h> #include <rthw.h>
#include <rtthread.h> #include <rtthread.h>
typedef rt_uint8_t u8_t; #include <stdint.h>
typedef rt_int8_t s8_t; typedef uint8_t u8_t;
typedef rt_uint16_t u16_t; typedef int8_t s8_t;
typedef rt_int16_t s16_t; typedef uint16_t u16_t;
typedef rt_uint32_t u32_t; typedef int16_t s16_t;
typedef rt_int32_t s32_t; typedef uint32_t u32_t;
typedef rt_uint32_t mem_ptr_t; typedef int32_t s32_t;
typedef uintptr_t mem_ptr_t;
#define U16_F "hu" #define U16_F "hu"
#define S16_F "hd" #define S16_F "hd"
......
...@@ -2,10 +2,6 @@ ...@@ -2,10 +2,6 @@
* Copyright (c) 2006-2018, RT-Thread Development Team * Copyright (c) 2006-2018, RT-Thread Development Team
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/
/*
* File : libc_errno.h
* *
* Change Logs: * Change Logs:
* Date Author Notes * Date Author Notes
...@@ -17,145 +13,194 @@ ...@@ -17,145 +13,194 @@
#include <rtconfig.h> #include <rtconfig.h>
#if defined(RT_USING_NEWLIB) || defined(_WIN32) #if defined(RT_USING_NEWLIB) || defined(_WIN32) || defined(__CC_ARM) || defined(__IAR_SYSTEMS_ICC__)
/* use errno.h file in newlib */ /* use errno.h file in toolchains */
#include <errno.h> #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 #else
/* define errno self. */
#define EPERM 1 #define ERROR_BASE_NO 0
#define ENOENT 2 #endif
#define ESRCH 3
#define EINTR 4 #if !defined(RT_USING_NEWLIB) && !defined(_WIN32)
#define EIO 5
#define ENXIO 6 #define EPERM (ERROR_BASE_NO + 1)
#define E2BIG 7 #define ENOENT (ERROR_BASE_NO + 2)
#define ENOEXEC 8 #define ESRCH (ERROR_BASE_NO + 3)
#define EBADF 9 #define EINTR (ERROR_BASE_NO + 4)
#define ECHILD 10 #define EIO (ERROR_BASE_NO + 5)
#define EAGAIN 11 #define ENXIO (ERROR_BASE_NO + 6)
#define ENOMEM 12 #define E2BIG (ERROR_BASE_NO + 7)
#define EACCES 13 #define ENOEXEC (ERROR_BASE_NO + 8)
#define EFAULT 14 #define EBADF (ERROR_BASE_NO + 9)
#define ENOTBLK 15 #define ECHILD (ERROR_BASE_NO + 10)
#define EBUSY 16 #define EAGAIN (ERROR_BASE_NO + 11)
#define EEXIST 17
#define EXDEV 18 #ifndef ENOMEM
#define ENODEV 19 #define ENOMEM (ERROR_BASE_NO + 12)
#define ENOTDIR 20 #endif
#define EISDIR 21
#define EINVAL 22 #define EACCES (ERROR_BASE_NO + 13)
#define ENFILE 23 #define EFAULT (ERROR_BASE_NO + 14)
#define EMFILE 24 #define ENOTBLK (ERROR_BASE_NO + 15)
#define ENOTTY 25 #define EBUSY (ERROR_BASE_NO + 16)
#define ETXTBSY 26 #define EEXIST (ERROR_BASE_NO + 17)
#define EFBIG 27 #define EXDEV (ERROR_BASE_NO + 18)
#define ENOSPC 28 #define ENODEV (ERROR_BASE_NO + 19)
#define ESPIPE 29 #define ENOTDIR (ERROR_BASE_NO + 20)
#define EROFS 30 #define EISDIR (ERROR_BASE_NO + 21)
#define EMLINK 31
#define EPIPE 32 #ifndef EINVAL
#define EDOM 33 #define EINVAL (ERROR_BASE_NO + 22)
#define ERANGE 34 #endif
#define EDEADLK 35
#define ENAMETOOLONG 36 #define ENFILE (ERROR_BASE_NO + 23)
#define ENOLCK 37 #define EMFILE (ERROR_BASE_NO + 24)
#define ENOSYS 38 #define ENOTTY (ERROR_BASE_NO + 25)
#define ENOTEMPTY 39 #define ETXTBSY (ERROR_BASE_NO + 26)
#define ELOOP 40 #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 EWOULDBLOCK EAGAIN
#define ENOMSG 42 #define ENOMSG (ERROR_BASE_NO + 42)
#define EIDRM 43 #define EIDRM (ERROR_BASE_NO + 43)
#define ECHRNG 44 #define ECHRNG (ERROR_BASE_NO + 44)
#define EL2NSYNC 45 #define EL2NSYNC (ERROR_BASE_NO + 45)
#define EL3HLT 46 #define EL3HLT (ERROR_BASE_NO + 46)
#define EL3RST 47 #define EL3RST (ERROR_BASE_NO + 47)
#define ELNRNG 48 #define ELNRNG (ERROR_BASE_NO + 48)
#define EUNATCH 49 #define EUNATCH (ERROR_BASE_NO + 49)
#define ENOCSI 50 #define ENOCSI (ERROR_BASE_NO + 50)
#define EL2HLT 51 #define EL2HLT (ERROR_BASE_NO + 51)
#define EBADE 52 #define EBADE (ERROR_BASE_NO + 52)
#define EBADR 53 #define EBADR (ERROR_BASE_NO + 53)
#define EXFULL 54 #define EXFULL (ERROR_BASE_NO + 54)
#define ENOANO 55 #define ENOANO (ERROR_BASE_NO + 55)
#define EBADRQC 56 #define EBADRQC (ERROR_BASE_NO + 56)
#define EBADSLT 57 #define EBADSLT (ERROR_BASE_NO + 57)
#define EDEADLOCK EDEADLK #define EDEADLOCK EDEADLK
#define EBFONT 59 #define EBFONT (ERROR_BASE_NO + 59)
#define ENOSTR 60 #define ENOSTR (ERROR_BASE_NO + 60)
#define ENODATA 61 #define ENODATA (ERROR_BASE_NO + 61)
#define ETIME 62 #define ETIME (ERROR_BASE_NO + 62)
#define ENOSR 63 #define ENOSR (ERROR_BASE_NO + 63)
#define ENONET 64 #define ENONET (ERROR_BASE_NO + 64)
#define ENOPKG 65 #define ENOPKG (ERROR_BASE_NO + 65)
#define EREMOTE 66 #define EREMOTE (ERROR_BASE_NO + 66)
#define ENOLINK 67 #define ENOLINK (ERROR_BASE_NO + 67)
#define EADV 68 #define EADV (ERROR_BASE_NO + 68)
#define ESRMNT 69 #define ESRMNT (ERROR_BASE_NO + 69)
#define ECOMM 70 #define ECOMM (ERROR_BASE_NO + 70)
#define EPROTO 71 #define EPROTO (ERROR_BASE_NO + 71)
#define EMULTIHOP 72 #define EMULTIHOP (ERROR_BASE_NO + 72)
#define EDOTDOT 73 #define EDOTDOT (ERROR_BASE_NO + 73)
#define EBADMSG 74 #define EBADMSG (ERROR_BASE_NO + 74)
#define EOVERFLOW 75 #define EOVERFLOW (ERROR_BASE_NO + 75)
#define ENOTUNIQ 76 #define ENOTUNIQ (ERROR_BASE_NO + 76)
#define EBADFD 77 #define EBADFD (ERROR_BASE_NO + 77)
#define EREMCHG 78 #define EREMCHG (ERROR_BASE_NO + 78)
#define ELIBACC 79 #define ELIBACC (ERROR_BASE_NO + 79)
#define ELIBBAD 80 #define ELIBBAD (ERROR_BASE_NO + 80)
#define ELIBSCN 81 #define ELIBSCN (ERROR_BASE_NO + 81)
#define ELIBMAX 82 #define ELIBMAX (ERROR_BASE_NO + 82)
#define ELIBEXEC 83 #define ELIBEXEC (ERROR_BASE_NO + 83)
#define EILSEQ 84
#define ERESTART 85 #ifndef EILSEQ
#define ESTRPIPE 86 #define EILSEQ (ERROR_BASE_NO + 84)
#define EUSERS 87 #endif
#define ENOTSOCK 88
#define EDESTADDRREQ 89 #define ERESTART (ERROR_BASE_NO + 85)
#define EMSGSIZE 90 #define ESTRPIPE (ERROR_BASE_NO + 86)
#define EPROTOTYPE 91 #define EUSERS (ERROR_BASE_NO + 87)
#define ENOPROTOOPT 92 #define ENOTSOCK (ERROR_BASE_NO + 88)
#define EPROTONOSUPPORT 93 #define EDESTADDRREQ (ERROR_BASE_NO + 89)
#define ESOCKTNOSUPPORT 94 #define EMSGSIZE (ERROR_BASE_NO + 90)
#define EOPNOTSUPP 95 #define EPROTOTYPE (ERROR_BASE_NO + 91)
#define ENOTSUP EOPNOTSUPP #define ENOPROTOOPT (ERROR_BASE_NO + 92)
#define EPFNOSUPPORT 96 #define EPROTONOSUPPORT (ERROR_BASE_NO + 93)
#define EAFNOSUPPORT 97 #define ESOCKTNOSUPPORT (ERROR_BASE_NO + 94)
#define EADDRINUSE 98 #define EOPNOTSUPP (ERROR_BASE_NO + 95)
#define EADDRNOTAVAIL 99 #define ENOTSUP EOPNOTSUPP )
#define ENETDOWN 100 #define EPFNOSUPPORT (ERROR_BASE_NO + 96)
#define ENETUNREACH 101 #define EAFNOSUPPORT (ERROR_BASE_NO + 97)
#define ENETRESET 102 #define EADDRINUSE (ERROR_BASE_NO + 98)
#define ECONNABORTED 103 #define EADDRNOTAVAIL (ERROR_BASE_NO + 99)
#define ECONNRESET 104 #define ENETDOWN (ERROR_BASE_NO + 100)
#define ENOBUFS 105 #define ENETUNREACH (ERROR_BASE_NO + 101)
#define EISCONN 106 #define ENETRESET (ERROR_BASE_NO + 102)
#define ENOTCONN 107 #define ECONNABORTED (ERROR_BASE_NO + 103)
#define ESHUTDOWN 108 #define ECONNRESET (ERROR_BASE_NO + 104)
#define ETOOMANYREFS 109 #define ENOBUFS (ERROR_BASE_NO + 105)
#define ETIMEDOUT 110 #define EISCONN (ERROR_BASE_NO + 106)
#define ECONNREFUSED 111 #define ENOTCONN (ERROR_BASE_NO + 107)
#define EHOSTDOWN 112 #define ESHUTDOWN (ERROR_BASE_NO + 108)
#define EHOSTUNREACH 113 #define ETOOMANYREFS (ERROR_BASE_NO + 109)
#define EALREADY 114 #define ETIMEDOUT (ERROR_BASE_NO + 110)
#define EINPROGRESS 115 #define ECONNREFUSED (ERROR_BASE_NO + 111)
#define ESTALE 116 #define EHOSTDOWN (ERROR_BASE_NO + 112)
#define EUCLEAN 117 #define EHOSTUNREACH (ERROR_BASE_NO + 113)
#define ENOTNAM 118 #define EALREADY (ERROR_BASE_NO + 114)
#define ENAVAIL 119 #define EINPROGRESS (ERROR_BASE_NO + 115)
#define EISNAM 120 #define ESTALE (ERROR_BASE_NO + 116)
#define EREMOTEIO 121 #define EUCLEAN (ERROR_BASE_NO + 117)
#define EDQUOT 122 #define ENOTNAM (ERROR_BASE_NO + 118)
#define ENOMEDIUM 123 #define ENAVAIL (ERROR_BASE_NO + 119)
#define EMEDIUMTYPE 124 #define EISNAM (ERROR_BASE_NO + 120)
#define ECANCELED 125 #define EREMOTEIO (ERROR_BASE_NO + 121)
#define ENOKEY 126 #define EDQUOT (ERROR_BASE_NO + 122)
#define EKEYEXPIRED 127 #define ENOMEDIUM (ERROR_BASE_NO + 123)
#define EKEYREVOKED 128 #define EMEDIUMTYPE (ERROR_BASE_NO + 124)
#define EKEYREJECTED 129 #define ECANCELED (ERROR_BASE_NO + 125)
#define EOWNERDEAD 130 #define ENOKEY (ERROR_BASE_NO + 126)
#define ENOTRECOVERABLE 131 #define EKEYEXPIRED (ERROR_BASE_NO + 127)
#define ERFKILL 132 #define EKEYREVOKED (ERROR_BASE_NO + 128)
#define EHWPOISON 133 #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
#endif #endif
...@@ -2,10 +2,6 @@ ...@@ -2,10 +2,6 @@
* Copyright (c) 2006-2018, RT-Thread Development Team * Copyright (c) 2006-2018, RT-Thread Development Team
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/
/*
* File : libc_signal.h
* *
* Change Logs: * Change Logs:
* Date Author Notes * Date Author Notes
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
* 2018-05-31 Bernard change version number to v3.1.0 * 2018-05-31 Bernard change version number to v3.1.0
* 2018-09-04 Bernard change version number to v3.1.1 * 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-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__ #ifndef __RT_DEF_H__
...@@ -45,7 +46,7 @@ extern "C" { ...@@ -45,7 +46,7 @@ extern "C" {
/* RT-Thread version information */ /* RT-Thread version information */
#define RT_VERSION 3L /**< major version number */ #define RT_VERSION 3L /**< major version number */
#define RT_SUBVERSION 1L /**< minor 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 */ /* RT-Thread version */
#define RTTHREAD_VERSION ((RT_VERSION * 10000) + \ #define RTTHREAD_VERSION ((RT_VERSION * 10000) + \
...@@ -121,11 +122,11 @@ typedef rt_base_t rt_off_t; /**< Type for offset */ ...@@ -121,11 +122,11 @@ typedef rt_base_t rt_off_t; /**< Type for offset */
#include <stdarg.h> #include <stdarg.h>
#else #else
/* the version of GNU GCC must be greater than 4.x */ /* the version of GNU GCC must be greater than 4.x */
typedef __builtin_va_list __gnuc_va_list; typedef __builtin_va_list __gnuc_va_list;
typedef __gnuc_va_list va_list; typedef __gnuc_va_list va_list;
#define va_start(v,l) __builtin_va_start(v,l) #define va_start(v,l) __builtin_va_start(v,l)
#define va_end(v) __builtin_va_end(v) #define va_end(v) __builtin_va_end(v)
#define va_arg(v,l) __builtin_va_arg(v,l) #define va_arg(v,l) __builtin_va_arg(v,l)
#endif #endif
#define SECTION(x) __attribute__((section(x))) #define SECTION(x) __attribute__((section(x)))
...@@ -247,7 +248,7 @@ typedef int (*init_fn_t)(void); ...@@ -247,7 +248,7 @@ typedef int (*init_fn_t)(void);
* @addtogroup Error * @addtogroup Error
*/ */
/*@{*/ /**@{*/
/* RT-Thread error code definitions */ /* RT-Thread error code definitions */
#define RT_EOK 0 /**< There is no error */ #define RT_EOK 0 /**< There is no error */
...@@ -262,7 +263,7 @@ typedef int (*init_fn_t)(void); ...@@ -262,7 +263,7 @@ typedef int (*init_fn_t)(void);
#define RT_EINTR 9 /**< Interrupted system call */ #define RT_EINTR 9 /**< Interrupted system call */
#define RT_EINVAL 10 /**< Invalid argument */ #define RT_EINVAL 10 /**< Invalid argument */
/*@}*/ /**@}*/
/** /**
* @ingroup BasicDef * @ingroup BasicDef
...@@ -313,7 +314,7 @@ typedef struct rt_slist_node rt_slist_t; /**< Type for single lis ...@@ -313,7 +314,7 @@ typedef struct rt_slist_node rt_slist_t; /**< Type for single lis
* @addtogroup KernelObject * @addtogroup KernelObject
*/ */
/*@{*/ /**@{*/
/* /*
* kernel object macros * kernel object macros
...@@ -390,13 +391,13 @@ struct rt_object_information ...@@ -390,13 +391,13 @@ struct rt_object_information
#define RT_OBJECT_HOOK_CALL(func, argv) #define RT_OBJECT_HOOK_CALL(func, argv)
#endif #endif
/*@}*/ /**@}*/
/** /**
* @addtogroup Clock * @addtogroup Clock
*/ */
/*@{*/ /**@{*/
/** /**
* clock & timer macros * clock & timer macros
...@@ -440,7 +441,7 @@ struct rt_timer ...@@ -440,7 +441,7 @@ struct rt_timer
}; };
typedef struct rt_timer *rt_timer_t; typedef struct rt_timer *rt_timer_t;
/*@}*/ /**@}*/
/** /**
* @addtogroup Signal * @addtogroup Signal
...@@ -453,13 +454,13 @@ typedef siginfo_t rt_siginfo_t; ...@@ -453,13 +454,13 @@ typedef siginfo_t rt_siginfo_t;
#define RT_SIG_MAX 32 #define RT_SIG_MAX 32
#endif #endif
/*@}*/ /**@}*/
/** /**
* @addtogroup Thread * @addtogroup Thread
*/ */
/*@{*/ /**@{*/
/* /*
* Thread * Thread
...@@ -558,13 +559,13 @@ struct rt_thread ...@@ -558,13 +559,13 @@ struct rt_thread
}; };
typedef struct rt_thread *rt_thread_t; typedef struct rt_thread *rt_thread_t;
/*@}*/ /**@}*/
/** /**
* @addtogroup IPC * @addtogroup IPC
*/ */
/*@{*/ /**@{*/
/** /**
* IPC flags and control command definitions * IPC flags and control command definitions
...@@ -682,13 +683,13 @@ struct rt_messagequeue ...@@ -682,13 +683,13 @@ struct rt_messagequeue
typedef struct rt_messagequeue *rt_mq_t; typedef struct rt_messagequeue *rt_mq_t;
#endif #endif
/*@}*/ /**@}*/
/** /**
* @addtogroup MM * @addtogroup MM
*/ */
/*@{*/ /**@{*/
/* /*
* memory management * memory management
...@@ -756,14 +757,14 @@ struct rt_mempool ...@@ -756,14 +757,14 @@ struct rt_mempool
typedef struct rt_mempool *rt_mp_t; typedef struct rt_mempool *rt_mp_t;
#endif #endif
/*@}*/ /**@}*/
#ifdef RT_USING_DEVICE #ifdef RT_USING_DEVICE
/** /**
* @addtogroup Device * @addtogroup Device
*/ */
/*@{*/ /**@{*/
/** /**
* device (I/O) class type * device (I/O) class type
...@@ -1008,7 +1009,7 @@ struct rt_device_graphic_ops ...@@ -1008,7 +1009,7 @@ struct rt_device_graphic_ops
}; };
#define rt_graphix_ops(device) ((struct rt_device_graphic_ops *)(device->user_data)) #define rt_graphix_ops(device) ((struct rt_device_graphic_ops *)(device->user_data))
/*@}*/ /**@}*/
#endif #endif
/* definitions for libc */ /* definitions for libc */
......
...@@ -90,7 +90,7 @@ void rt_hw_interrupt_umask(int vector); ...@@ -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 rt_hw_interrupt_install(int vector,
rt_isr_handler_t handler, rt_isr_handler_t handler,
void *param, void *param,
char *name); const char *name);
rt_base_t rt_hw_interrupt_disable(void); rt_base_t rt_hw_interrupt_disable(void);
void rt_hw_interrupt_enable(rt_base_t level); void rt_hw_interrupt_enable(rt_base_t level);
......
...@@ -24,7 +24,7 @@ extern "C" { ...@@ -24,7 +24,7 @@ extern "C" {
* @addtogroup KernelService * @addtogroup KernelService
*/ */
/*@{*/ /**@{*/
/** /**
* rt_container_of - return the member address of ptr, if the type of ptr is the * 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) ...@@ -306,7 +306,7 @@ rt_inline int rt_slist_isempty(rt_slist_t *l)
#define rt_slist_tail_entry(ptr, type, member) \ #define rt_slist_tail_entry(ptr, type, member) \
rt_slist_entry(rt_slist_tail(ptr), type, member) rt_slist_entry(rt_slist_tail(ptr), type, member)
/*@}*/ /**@}*/
#ifdef __cplusplus #ifdef __cplusplus
} }
......
...@@ -86,6 +86,14 @@ config ARCH_RISCV ...@@ -86,6 +86,14 @@ config ARCH_RISCV
config ARCH_IA32 config ARCH_IA32
bool bool
config ARCH_TIDSP
bool
config ARCH_TIDSP_C28X
bool
select ARCH_TIDSP
select ARCH_CPU_STACK_GROWS_UPWARD
config ARCH_HOST_SIMULATOR config ARCH_HOST_SIMULATOR
bool bool
......
...@@ -2,30 +2,37 @@ Import('RTT_ROOT') ...@@ -2,30 +2,37 @@ Import('RTT_ROOT')
Import('rtconfig') Import('rtconfig')
from building import * from building import *
arch = rtconfig.ARCH
comm = rtconfig.ARCH + '/common' comm = rtconfig.ARCH + '/common'
path = rtconfig.ARCH + '/' + rtconfig.CPU path = rtconfig.ARCH + '/' + rtconfig.CPU
src = []
ASFLAGS = '' ASFLAGS = ''
# The set of source files associated with this SConscript file. # The set of source files associated with this SConscript file.
if rtconfig.PLATFORM == 'armcc': 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': 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': 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': if rtconfig.PLATFORM == 'cl':
src = Glob(path + '/*.c') src = Glob(path + '/*.c')
if rtconfig.PLATFORM == 'mingw': if rtconfig.PLATFORM == 'mingw':
src = Glob(path + '/*.c') src = Glob(path + '/*.c')
if rtconfig.PLATFORM == 'armcc' and rtconfig.ARCH == 'arm' and rtconfig.CPU == 'arm926': if rtconfig.PLATFORM == 'armcc' and rtconfig.ARCH == 'arm' and rtconfig.CPU == 'arm926':
ASFLAGS = ' --cpreproc' 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) group = DefineGroup(rtconfig.CPU.upper(), src, depend = [''], CPPPATH = CPPPATH, ASFLAGS = ASFLAGS)
Return('group') Return('group')
...@@ -91,7 +91,7 @@ void rt_hw_interrupt_umask(int vector) ...@@ -91,7 +91,7 @@ void rt_hw_interrupt_umask(int vector)
* @return the old handler * @return the old handler
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
if(vector >= 0 && vector < MAX_HANDLERS) if(vector >= 0 && vector < MAX_HANDLERS)
......
...@@ -158,7 +158,7 @@ void rt_hw_interrupt_ack(int fiq_irq) ...@@ -158,7 +158,7 @@ void rt_hw_interrupt_ack(int fiq_irq)
* @param old_handler the old interrupt service routine * @param old_handler the old interrupt service routine
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -25,7 +25,14 @@ ...@@ -25,7 +25,14 @@
; * 2015-06-04 aozima Align stack address to 8 byte. ; * 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_FRAME_SIZE EQU (18*4) ;72
;S_SPSR EQU (17*4) ;SPSR ;S_SPSR EQU (17*4) ;SPSR
......
...@@ -110,7 +110,7 @@ void rt_hw_interrupt_umask(int vector) ...@@ -110,7 +110,7 @@ void rt_hw_interrupt_umask(int vector)
* @param old_handler the old interrupt service routine * @param old_handler the old interrupt service routine
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -114,3 +114,22 @@ void rt_hw_hard_fault_exception(struct exception_stack_frame *contex) ...@@ -114,3 +114,22 @@ void rt_hw_hard_fault_exception(struct exception_stack_frame *contex)
while (1); 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);
}
...@@ -86,7 +86,7 @@ void rt_hw_interrupt_umask(int vector) ...@@ -86,7 +86,7 @@ void rt_hw_interrupt_umask(int vector)
* @return the old handler * @return the old handler
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -137,7 +137,7 @@ void rt_hw_interrupt_umask(int vector) ...@@ -137,7 +137,7 @@ void rt_hw_interrupt_umask(int vector)
* @return old handler * @return old handler
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -83,7 +83,7 @@ void rt_hw_interrupt_umask(int vector) ...@@ -83,7 +83,7 @@ void rt_hw_interrupt_umask(int vector)
* @return the old handler * @return the old handler
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -103,7 +103,7 @@ void rt_hw_interrupt_umask(int vector) ...@@ -103,7 +103,7 @@ void rt_hw_interrupt_umask(int vector)
* @param old_handler the old interrupt service routine * @param old_handler the old interrupt service routine
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -104,7 +104,7 @@ void rt_hw_interrupt_umask(int vector) ...@@ -104,7 +104,7 @@ void rt_hw_interrupt_umask(int vector)
* @param old_handler the old interrupt service routine * @param old_handler the old interrupt service routine
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -107,7 +107,7 @@ void rt_hw_interrupt_umask(int vector) ...@@ -107,7 +107,7 @@ void rt_hw_interrupt_umask(int vector)
* @param old_handler the old interrupt service routine * @param old_handler the old interrupt service routine
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -112,7 +112,7 @@ void rt_hw_interrupt_umask(int vector) ...@@ -112,7 +112,7 @@ void rt_hw_interrupt_umask(int vector)
* @param old_handler the old interrupt service routine * @param old_handler the old interrupt service routine
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -131,7 +131,7 @@ void rt_hw_interrupt_mask(int vector) ...@@ -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 rt_hw_interrupt_install(int vector,
rt_isr_handler_t handler, rt_isr_handler_t handler,
void *param, void *param,
char *name) const char *name)
{ {
rt_isr_handler_t old_handler = RT_NULL; rt_isr_handler_t old_handler = RT_NULL;
......
...@@ -96,7 +96,7 @@ void rt_hw_interrupt_umask(int vector) ...@@ -96,7 +96,7 @@ void rt_hw_interrupt_umask(int vector)
* @param old_handler the old interrupt service routine * @param old_handler the old interrupt service routine
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -112,7 +112,7 @@ void rt_hw_interrupt_umask(int vector) ...@@ -112,7 +112,7 @@ void rt_hw_interrupt_umask(int vector)
* @param old_handler the old interrupt service routine * @param old_handler the old interrupt service routine
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -80,7 +80,7 @@ void rt_hw_interrupt_umask(int vector) ...@@ -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, 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -95,7 +95,7 @@ void rt_hw_interrupt_umask(int vector) ...@@ -95,7 +95,7 @@ void rt_hw_interrupt_umask(int vector)
* @return old handler * @return old handler
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -79,7 +79,7 @@ void uic_interrupt(rt_uint32_t uic_base, int vec_base) ...@@ -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, 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; int intVal;
rt_isr_handler_t old_handler; rt_isr_handler_t old_handler;
......
;
; 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
/*
* 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);
}
...@@ -199,7 +199,7 @@ void rt_hw_interrupt_umask(int irq) ...@@ -199,7 +199,7 @@ void rt_hw_interrupt_umask(int irq)
* @param old_handler the old interrupt service routine * @param old_handler the old interrupt service routine
*/ */
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t 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_isr_handler_t old_handler = RT_NULL;
......
...@@ -300,4 +300,10 @@ menu "Kernel Device Object" ...@@ -300,4 +300,10 @@ menu "Kernel Device Object"
endmenu endmenu
config RT_VER_NUM
hex
default 0x30102
help
RT-Thread version number
endmenu endmenu
...@@ -221,14 +221,12 @@ void rt_thread_idle_excute(void) ...@@ -221,14 +221,12 @@ void rt_thread_idle_excute(void)
static void rt_thread_idle_entry(void *parameter) static void rt_thread_idle_entry(void *parameter)
{ {
#ifdef RT_USING_IDLE_HOOK
rt_size_t i;
#endif
while (1) while (1)
{ {
#ifdef RT_USING_IDLE_HOOK #ifdef RT_USING_IDLE_HOOK
rt_size_t i;
for (i = 0; i < RT_IDEL_HOOK_LIST_SIZE; i++) for (i = 0; i < RT_IDEL_HOOK_LIST_SIZE; i++)
{ {
if (idle_hook_list[i] != RT_NULL) if (idle_hook_list[i] != RT_NULL)
......
...@@ -535,7 +535,7 @@ void rt_show_version(void) ...@@ -535,7 +535,7 @@ void rt_show_version(void)
rt_kprintf("- RT - Thread Operating System\n"); rt_kprintf("- RT - Thread Operating System\n");
rt_kprintf(" / | \\ %d.%d.%d build %s\n", rt_kprintf(" / | \\ %d.%d.%d build %s\n",
RT_VERSION, RT_SUBVERSION, RT_REVISION, __DATE__); 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); RTM_EXPORT(rt_show_version);
......
...@@ -108,7 +108,7 @@ static void _signal_deliver(rt_thread_t tid) ...@@ -108,7 +108,7 @@ static void _signal_deliver(rt_thread_t tid)
/* do signal action in self thread context */ /* do signal action in self thread context */
rt_thread_handle_sig(RT_TRUE); 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 */ /* add signal state */
tid->stat |= RT_THREAD_STAT_SIGNAL; tid->stat |= RT_THREAD_STAT_SIGNAL;
......
...@@ -105,8 +105,11 @@ class Win32Spawn: ...@@ -105,8 +105,11 @@ class Win32Spawn:
try: try:
proc = subprocess.Popen(cmdline, env=_e, shell=False) proc = subprocess.Popen(cmdline, env=_e, shell=False)
except Exception as e: except Exception as e:
print ('Error in calling:\n' + cmdline) print ('Error in calling command:' + cmdline.split(' ')[0])
print ('Exception: ' + e + ': ' + os.strerror(e.errno)) 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 return e.errno
finally: finally:
os.environ['PATH'] = old_path os.environ['PATH'] = old_path
...@@ -128,7 +131,7 @@ def GenCconfigFile(env, BuildOptions): ...@@ -128,7 +131,7 @@ def GenCconfigFile(env, BuildOptions):
f = open('cconfig.h', 'r') f = open('cconfig.h', 'r')
if f: if f:
contents = f.read() contents = f.read()
f.close(); f.close()
prep = PatchedPreProcessor() prep = PatchedPreProcessor()
prep.process_contents(contents) prep.process_contents(contents)
...@@ -184,7 +187,7 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [ ...@@ -184,7 +187,7 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [
AddOption('--target', AddOption('--target',
dest = 'target', dest = 'target',
type = 'string', 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', AddOption('--genconfig',
dest = 'genconfig', dest = 'genconfig',
action = 'store_true', action = 'store_true',
...@@ -224,7 +227,8 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [ ...@@ -224,7 +227,8 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [
'vsc' : ('gcc', 'gcc'), 'vsc' : ('gcc', 'gcc'),
'cb':('keil', 'armcc'), 'cb':('keil', 'armcc'),
'ua':('gcc', 'gcc'), 'ua':('gcc', 'gcc'),
'cdk':('gcc', 'gcc')} 'cdk':('gcc', 'gcc'),
'ses' : ('gcc', 'gcc')}
tgt_name = GetOption('target') tgt_name = GetOption('target')
if tgt_name: if tgt_name:
...@@ -345,8 +349,20 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [ ...@@ -345,8 +349,20 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [
action = 'store_true', action = 'store_true',
default = False, default = False,
help = 'make menuconfig for RT-Thread BSP') 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 from menuconfig import pyconfig
pyconfig(Rtt_Root) pyconfig(Rtt_Root)
exit(0) exit(0)
...@@ -797,6 +813,10 @@ def GenTargetProject(program = None): ...@@ -797,6 +813,10 @@ def GenTargetProject(program = None):
from cdk import CDKProject from cdk import CDKProject
CDKProject('project.cdkproj', Projects) CDKProject('project.cdkproj', Projects)
if GetOption('target') == 'ses':
from ses import SESProject
SESProject(Env)
def EndBuilding(target, program = None): def EndBuilding(target, program = None):
import rtconfig import rtconfig
...@@ -805,6 +825,12 @@ def EndBuilding(target, program = None): ...@@ -805,6 +825,12 @@ def EndBuilding(target, program = None):
Env['target'] = program Env['target'] = program
Env['project'] = Projects 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) Env.AddPostAction(target, rtconfig.POST_ACTION)
# Add addition clean files # Add addition clean files
Clean(target, 'cconfig.h') Clean(target, 'cconfig.h')
......
...@@ -251,3 +251,20 @@ def pyconfig(RTT_ROOT): ...@@ -251,3 +251,20 @@ def pyconfig(RTT_ROOT):
if mtime != mtime2: if mtime != mtime2:
mk_rtconfig(fn) 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)
...@@ -122,6 +122,24 @@ def bsp_update_kconfig(dist_dir): ...@@ -122,6 +122,24 @@ def bsp_update_kconfig(dist_dir):
line = line[0:position] + 'default: "rt-thread"\n' line = line[0:position] + 'default: "rt-thread"\n'
found = 0 found = 0
f.write(line) 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): def bs_update_ide_project(bsp_root, rtt_root):
import subprocess import subprocess
...@@ -169,6 +187,21 @@ def MkDist_Strip(program, BSP_ROOT, RTT_ROOT, Env): ...@@ -169,6 +187,21 @@ def MkDist_Strip(program, BSP_ROOT, RTT_ROOT, Env):
print('=> %s' % os.path.basename(BSP_ROOT)) print('=> %s' % os.path.basename(BSP_ROOT))
bsp_copy_files(BSP_ROOT, dist_dir) 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 # get all source files from program
for item in program: for item in program:
walk_children(item) walk_children(item)
...@@ -260,6 +293,7 @@ def MkDist_Strip(program, BSP_ROOT, RTT_ROOT, Env): ...@@ -260,6 +293,7 @@ def MkDist_Strip(program, BSP_ROOT, RTT_ROOT, Env):
bsp_update_sconstruct(dist_dir) bsp_update_sconstruct(dist_dir)
# change RTT_ROOT in Kconfig # change RTT_ROOT in Kconfig
bsp_update_kconfig(dist_dir) bsp_update_kconfig(dist_dir)
bsp_update_kconfig_library(dist_dir)
# update all project files # update all project files
bs_update_ide_project(dist_dir, target_path) bs_update_ide_project(dist_dir, target_path)
...@@ -280,6 +314,21 @@ def MkDist(program, BSP_ROOT, RTT_ROOT, Env): ...@@ -280,6 +314,21 @@ def MkDist(program, BSP_ROOT, RTT_ROOT, Env):
print('=> %s' % os.path.basename(BSP_ROOT)) print('=> %s' % os.path.basename(BSP_ROOT))
bsp_copy_files(BSP_ROOT, dist_dir) 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 # copy tools directory
print('=> components') print('=> components')
do_copy_folder(os.path.join(RTT_ROOT, 'components'), os.path.join(target_path, '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): ...@@ -316,6 +365,7 @@ def MkDist(program, BSP_ROOT, RTT_ROOT, Env):
bsp_update_sconstruct(dist_dir) bsp_update_sconstruct(dist_dir)
# change RTT_ROOT in Kconfig # change RTT_ROOT in Kconfig
bsp_update_kconfig(dist_dir) bsp_update_kconfig(dist_dir)
bsp_update_kconfig_library(dist_dir)
# update all project files # update all project files
bs_update_ide_project(dist_dir, target_path) bs_update_ide_project(dist_dir, target_path)
......
...@@ -543,8 +543,11 @@ class MenuConfig(object): ...@@ -543,8 +543,11 @@ class MenuConfig(object):
('Save as', ACTION_SAVE_AS), ('Save as', ACTION_SAVE_AS),
) )
def __init__(self, kconfig): def __init__(self, kconfig, __silent=None):
self.kconfig = kconfig self.kconfig = kconfig
self.__silent = __silent
if self.__silent is True:
return
# Instantiate Tk widgets # Instantiate Tk widgets
self.root = tk.Tk() self.root = tk.Tk()
...@@ -728,6 +731,8 @@ class MenuConfig(object): ...@@ -728,6 +731,8 @@ class MenuConfig(object):
def _close_window(self): def _close_window(self):
if self.prevent_losing_changes(): if self.prevent_losing_changes():
print('Exiting..') print('Exiting..')
if self.__silent is True:
return
self.root.destroy() self.root.destroy()
def _action_exit(self): def _action_exit(self):
...@@ -949,6 +954,8 @@ class MenuConfig(object): ...@@ -949,6 +954,8 @@ class MenuConfig(object):
- current config path - current config path
- status string (see set_status_string()) - status string (see set_status_string())
""" """
if self.__silent is True:
return
self.tk_status.set('{} [{}] {}'.format( self.tk_status.set('{} [{}] {}'.format(
'<UNSAVED>' if self.unsaved_changes else '', '<UNSAVED>' if self.unsaved_changes else '',
self.config_path if self.config_path else '', self.config_path if self.config_path else '',
...@@ -1017,6 +1024,10 @@ class MenuConfig(object): ...@@ -1017,6 +1024,10 @@ class MenuConfig(object):
self.mark_as_changed() self.mark_as_changed()
if not self.unsaved_changes: if not self.unsaved_changes:
return True return True
if self.__silent:
saved = self.save_config()
return saved
res = messagebox.askyesnocancel( res = messagebox.askyesnocancel(
parent=self.root, parent=self.root,
title='Unsaved changes', title='Unsaved changes',
...@@ -1056,11 +1067,13 @@ class MenuConfig(object): ...@@ -1056,11 +1067,13 @@ class MenuConfig(object):
self.kconfig.load_config(path) self.kconfig.load_config(path)
except IOError as e: except IOError as e:
self.set_status_string('Failed to load: \'{}\''.format(path)) 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)) print('Failed to load config \'{}\': {}'.format(path, e))
return False return False
self.set_status_string('Opened config') self.set_status_string('Opened config')
self.refresh_display() if not self.__silent:
self.refresh_display()
return True return True
def save_config(self, force_file_dialog=False): def save_config(self, force_file_dialog=False):
...@@ -1154,19 +1167,39 @@ def main(argv=None): ...@@ -1154,19 +1167,39 @@ def main(argv=None):
type=str, type=str,
help='path to .config file to load' 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) args = parser.parse_args(argv)
kconfig_path = args.kconfig kconfig_path = args.kconfig
config_path = args.config config_path = args.config
# Verify that Kconfig file exists # Verify that Kconfig file exists
if not os.path.isfile(kconfig_path): if not os.path.isfile(kconfig_path):
raise RuntimeError('\'{}\': no such file'.format(kconfig_path)) raise RuntimeError('\'{}\': no such file'.format(kconfig_path))
# Parse Kconfig files # Parse Kconfig files
kconf = kconfiglib.Kconfig(filename=kconfig_path) kconf = kconfiglib.Kconfig(filename=kconfig_path)
mc = MenuConfig(kconf)
# If config file was specified, load it if "--silent" not in argv:
if config_path: print("In normal mode. Will show menuconfig window.")
mc.open_config(config_path) mc = MenuConfig(kconf)
tk.mainloop() # 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__': if __name__ == '__main__':
......
# 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
...@@ -245,7 +245,9 @@ def ProjectInfo(env): ...@@ -245,7 +245,9 @@ def ProjectInfo(env):
return proj return proj
def VersionCmp(ver1, ver2): def VersionCmp(ver1, ver2):
la = ver1.split('.') la=[];
if ver1:
la = ver1.split('.')
lb = ver2.split('.') lb = ver2.split('.')
f = 0 f = 0
if len(la) > len(lb): if len(la) > len(lb):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册