Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2301_77017786
rt-thread
提交
fe27b975
R
rt-thread
项目概览
2301_77017786
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
fe27b975
编写于
12月 21, 2017
作者:
lymzzyh
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'upstream/master'
上级
92f5b437
d78f5eb6
变更
23
隐藏空白更改
内联
并排
Showing
23 changed file
with
685 addition
and
354 deletion
+685
-354
bsp/stm32f107/drivers/stm32_eth.c
bsp/stm32f107/drivers/stm32_eth.c
+122
-1
bsp/stm32f40x/drivers/stm32f4xx_eth.c
bsp/stm32f40x/drivers/stm32f4xx_eth.c
+121
-1
components/CMSIS/Kconfig
components/CMSIS/Kconfig
+20
-0
components/Kconfig
components/Kconfig
+2
-0
components/dfs/Kconfig
components/dfs/Kconfig
+16
-13
components/net/Kconfig
components/net/Kconfig
+4
-3
components/net/lwip-2.0.2/src/netif/ethernetif.c
components/net/lwip-2.0.2/src/netif/ethernetif.c
+20
-4
libcpu/Kconfig
libcpu/Kconfig
+8
-0
libcpu/arm/AT91SAM7S/stack.c
libcpu/arm/AT91SAM7S/stack.c
+25
-22
libcpu/arm/AT91SAM7X/stack.c
libcpu/arm/AT91SAM7X/stack.c
+25
-23
libcpu/arm/am335x/stack.c
libcpu/arm/am335x/stack.c
+29
-26
libcpu/arm/arm926/stack.c
libcpu/arm/arm926/stack.c
+6
-7
libcpu/arm/armv6/stack.c
libcpu/arm/armv6/stack.c
+37
-34
libcpu/arm/cortex-a/stack.c
libcpu/arm/cortex-a/stack.c
+27
-25
libcpu/arm/cortex-r4/stack.c
libcpu/arm/cortex-r4/stack.c
+30
-28
libcpu/arm/dm36x/stack.c
libcpu/arm/dm36x/stack.c
+36
-34
libcpu/arm/lpc24xx/stack.c
libcpu/arm/lpc24xx/stack.c
+29
-26
libcpu/arm/realview-a8-vmm/stack.c
libcpu/arm/realview-a8-vmm/stack.c
+28
-26
libcpu/arm/s3c24x0/stack.c
libcpu/arm/s3c24x0/stack.c
+26
-23
libcpu/arm/s3c44b0/stack.c
libcpu/arm/s3c44b0/stack.c
+24
-22
libcpu/arm/sep4020/stack.c
libcpu/arm/sep4020/stack.c
+25
-23
libcpu/arm/zynq7000/stack.c
libcpu/arm/zynq7000/stack.c
+15
-13
tools/menuconfig.py
tools/menuconfig.py
+10
-0
未找到文件。
bsp/stm32f107/drivers/stm32_eth.c
浏览文件 @
fe27b975
...
...
@@ -3027,6 +3027,9 @@ struct rt_stm32_eth
/* interface address info. */
rt_uint8_t
dev_addr
[
MAX_ADDR_LEN
];
/* hw address */
uint32_t
ETH_HashTableHigh
;
uint32_t
ETH_HashTableLow
;
};
static
struct
rt_stm32_eth
stm32_eth_device
;
static
struct
rt_semaphore
tx_buf_free
;
...
...
@@ -3082,10 +3085,118 @@ void ETH_IRQHandler(void)
/* RT-Thread Device Interface */
#if (LWIP_IPV4 && LWIP_IGMP) || (LWIP_IPV6 && LWIP_IPV6_MLD)
/* polynomial: 0x04C11DB7 */
static
uint32_t
ethcrc
(
const
uint8_t
*
data
,
size_t
length
)
{
uint32_t
crc
=
0xffffffff
;
size_t
i
;
int
j
;
for
(
i
=
0
;
i
<
length
;
i
++
)
{
for
(
j
=
0
;
j
<
8
;
j
++
)
{
if
(((
crc
>>
31
)
^
(
data
[
i
]
>>
j
))
&
0x01
)
{
/* x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1 */
crc
=
(
crc
<<
1
)
^
0x04C11DB7
;
}
else
{
crc
=
crc
<<
1
;
}
}
}
return
~
crc
;
}
#define HASH_BITS 6
/* #bits in hash */
static
void
register_multicast_address
(
struct
rt_stm32_eth
*
stm32_eth
,
const
uint8_t
*
mac
)
{
uint32_t
crc
;
uint8_t
hash
;
/* calculate crc32 value of mac address */
crc
=
ethcrc
(
mac
,
6
);
/* only upper 6 bits (HASH_BITS) are used
* which point to specific bit in he hash registers
*/
hash
=
(
crc
>>
26
)
&
0x3F
;
//rt_kprintf("register_multicast_address crc: %08X hash: %02X\n", crc, hash);
if
(
hash
>
31
)
{
stm32_eth
->
ETH_HashTableHigh
|=
1
<<
(
hash
-
32
);
ETH
->
MACHTHR
=
stm32_eth
->
ETH_HashTableHigh
;
}
else
{
stm32_eth
->
ETH_HashTableLow
|=
1
<<
hash
;
ETH
->
MACHTLR
=
stm32_eth
->
ETH_HashTableLow
;
}
}
#endif
/* (LWIP_IPV4 && LWIP_IGMP) || (LWIP_IPV6 && LWIP_IPV6_MLD) */
#if LWIP_IPV4 && LWIP_IGMP
static
err_t
igmp_mac_filter
(
struct
netif
*
netif
,
const
ip4_addr_t
*
ip4_addr
,
u8_t
action
)
{
uint8_t
mac
[
6
];
const
uint8_t
*
p
=
(
const
uint8_t
*
)
ip4_addr
;
struct
rt_stm32_eth
*
stm32_eth
=
(
struct
rt_stm32_eth
*
)
netif
->
state
;
mac
[
0
]
=
0x01
;
mac
[
1
]
=
0x00
;
mac
[
2
]
=
0x5E
;
mac
[
3
]
=
*
(
p
+
1
)
&
0x7F
;
mac
[
4
]
=
*
(
p
+
2
);
mac
[
5
]
=
*
(
p
+
3
);
register_multicast_address
(
stm32_eth
,
mac
);
if
(
1
)
{
rt_kprintf
(
"%s %s %s "
,
__FUNCTION__
,
(
action
==
NETIF_ADD_MAC_FILTER
)
?
"add"
:
"del"
,
ip4addr_ntoa
(
ip4_addr
));
rt_kprintf
(
"%02X:%02X:%02X:%02X:%02X:%02X
\n
"
,
mac
[
0
],
mac
[
1
],
mac
[
2
],
mac
[
3
],
mac
[
4
],
mac
[
5
]);
}
return
0
;
}
#endif
/* LWIP_IPV4 && LWIP_IGMP */
#if LWIP_IPV6 && LWIP_IPV6_MLD
static
err_t
mld_mac_filter
(
struct
netif
*
netif
,
const
ip6_addr_t
*
ip6_addr
,
u8_t
action
)
{
uint8_t
mac
[
6
];
const
uint8_t
*
p
=
(
const
uint8_t
*
)
&
ip6_addr
->
addr
[
3
];
struct
rt_stm32_eth
*
stm32_eth
=
(
struct
rt_stm32_eth
*
)
netif
->
state
;
mac
[
0
]
=
0x33
;
mac
[
1
]
=
0x33
;
mac
[
2
]
=
*
(
p
+
0
);
mac
[
3
]
=
*
(
p
+
1
);
mac
[
4
]
=
*
(
p
+
2
);
mac
[
5
]
=
*
(
p
+
3
);
register_multicast_address
(
stm32_eth
,
mac
);
if
(
1
)
{
rt_kprintf
(
"%s %s %s "
,
__FUNCTION__
,
(
action
==
NETIF_ADD_MAC_FILTER
)
?
"add"
:
"del"
,
ip6addr_ntoa
(
ip6_addr
));
rt_kprintf
(
"%02X:%02X:%02X:%02X:%02X:%02X
\n
"
,
mac
[
0
],
mac
[
1
],
mac
[
2
],
mac
[
3
],
mac
[
4
],
mac
[
5
]);
}
return
0
;
}
#endif
/* LWIP_IPV6 && LWIP_IPV6_MLD */
/* initialize the interface */
static
rt_err_t
rt_stm32_eth_init
(
rt_device_t
dev
)
{
vu32
Value
=
0
;
struct
rt_stm32_eth
*
stm32_eth
=
(
struct
rt_stm32_eth
*
)
dev
;
/* Reset ETHERNET on AHB Bus */
ETH_DeInit
();
...
...
@@ -3112,7 +3223,9 @@ static rt_err_t rt_stm32_eth_init(rt_device_t dev)
ETH_InitStructure
.
ETH_ReceiveAll
=
ETH_ReceiveAll_Enable
;
ETH_InitStructure
.
ETH_BroadcastFramesReception
=
ETH_BroadcastFramesReception_Disable
;
ETH_InitStructure
.
ETH_PromiscuousMode
=
ETH_PromiscuousMode_Disable
;
ETH_InitStructure
.
ETH_MulticastFramesFilter
=
ETH_MulticastFramesFilter_Perfect
;
ETH_InitStructure
.
ETH_MulticastFramesFilter
=
ETH_MulticastFramesFilter_HashTable
;
ETH_InitStructure
.
ETH_HashTableHigh
=
stm32_eth
->
ETH_HashTableHigh
;
ETH_InitStructure
.
ETH_HashTableLow
=
stm32_eth
->
ETH_HashTableLow
;
ETH_InitStructure
.
ETH_UnicastFramesFilter
=
ETH_UnicastFramesFilter_Perfect
;
#if CHECKSUM_BY_HARDWARE
ETH_InitStructure
.
ETH_ChecksumOffload
=
ETH_ChecksumOffload_Enable
;
...
...
@@ -3153,6 +3266,14 @@ static rt_err_t rt_stm32_eth_init(rt_device_t dev)
/* Enable MAC and DMA transmission and reception */
ETH_Start
();
#if LWIP_IPV4 && LWIP_IGMP
netif_set_igmp_mac_filter
(
stm32_eth
->
parent
.
netif
,
igmp_mac_filter
);
#endif
/* LWIP_IPV4 && LWIP_IGMP */
#if LWIP_IPV6 && LWIP_IPV6_MLD
netif_set_mld_mac_filter
(
stm32_eth
->
parent
.
netif
,
mld_mac_filter
);
#endif
/* LWIP_IPV6 && LWIP_IPV6_MLD */
return
RT_EOK
;
}
...
...
bsp/stm32f40x/drivers/stm32f4xx_eth.c
浏览文件 @
fe27b975
...
...
@@ -3274,6 +3274,9 @@ struct rt_stm32_eth
uint32_t
ETH_Speed
;
/*!< @ref ETH_Speed */
uint32_t
ETH_Mode
;
/*!< @ref ETH_Duplex_Mode */
uint32_t
ETH_HashTableHigh
;
uint32_t
ETH_HashTableLow
;
};
static
struct
rt_stm32_eth
stm32_eth_device
;
static
struct
rt_semaphore
tx_wait
;
...
...
@@ -3408,6 +3411,113 @@ void ETH_IRQHandler(void)
#include <lwip/icmp.h>
#include "lwipopts.h"
#if (LWIP_IPV4 && LWIP_IGMP) || (LWIP_IPV6 && LWIP_IPV6_MLD)
/* polynomial: 0x04C11DB7 */
static
uint32_t
ethcrc
(
const
uint8_t
*
data
,
size_t
length
)
{
uint32_t
crc
=
0xffffffff
;
size_t
i
;
int
j
;
for
(
i
=
0
;
i
<
length
;
i
++
)
{
for
(
j
=
0
;
j
<
8
;
j
++
)
{
if
(((
crc
>>
31
)
^
(
data
[
i
]
>>
j
))
&
0x01
)
{
/* x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1 */
crc
=
(
crc
<<
1
)
^
0x04C11DB7
;
}
else
{
crc
=
crc
<<
1
;
}
}
}
return
~
crc
;
}
#define HASH_BITS 6
/* #bits in hash */
static
void
register_multicast_address
(
struct
rt_stm32_eth
*
stm32_eth
,
const
uint8_t
*
mac
)
{
uint32_t
crc
;
uint8_t
hash
;
/* calculate crc32 value of mac address */
crc
=
ethcrc
(
mac
,
6
);
/* only upper 6 bits (HASH_BITS) are used
* which point to specific bit in he hash registers
*/
hash
=
(
crc
>>
26
)
&
0x3F
;
//rt_kprintf("register_multicast_address crc: %08X hash: %02X\n", crc, hash);
if
(
hash
>
31
)
{
stm32_eth
->
ETH_HashTableHigh
|=
1
<<
(
hash
-
32
);
ETH
->
MACHTHR
=
stm32_eth
->
ETH_HashTableHigh
;
}
else
{
stm32_eth
->
ETH_HashTableLow
|=
1
<<
hash
;
ETH
->
MACHTLR
=
stm32_eth
->
ETH_HashTableLow
;
}
}
#endif
/* (LWIP_IPV4 && LWIP_IGMP) || (LWIP_IPV6 && LWIP_IPV6_MLD) */
#if LWIP_IPV4 && LWIP_IGMP
static
err_t
igmp_mac_filter
(
struct
netif
*
netif
,
const
ip4_addr_t
*
ip4_addr
,
u8_t
action
)
{
uint8_t
mac
[
6
];
const
uint8_t
*
p
=
(
const
uint8_t
*
)
ip4_addr
;
struct
rt_stm32_eth
*
stm32_eth
=
(
struct
rt_stm32_eth
*
)
netif
->
state
;
mac
[
0
]
=
0x01
;
mac
[
1
]
=
0x00
;
mac
[
2
]
=
0x5E
;
mac
[
3
]
=
*
(
p
+
1
)
&
0x7F
;
mac
[
4
]
=
*
(
p
+
2
);
mac
[
5
]
=
*
(
p
+
3
);
register_multicast_address
(
stm32_eth
,
mac
);
if
(
1
)
{
rt_kprintf
(
"%s %s %s "
,
__FUNCTION__
,
(
action
==
NETIF_ADD_MAC_FILTER
)
?
"add"
:
"del"
,
ip4addr_ntoa
(
ip4_addr
));
rt_kprintf
(
"%02X:%02X:%02X:%02X:%02X:%02X
\n
"
,
mac
[
0
],
mac
[
1
],
mac
[
2
],
mac
[
3
],
mac
[
4
],
mac
[
5
]);
}
return
0
;
}
#endif
/* LWIP_IPV4 && LWIP_IGMP */
#if LWIP_IPV6 && LWIP_IPV6_MLD
static
err_t
mld_mac_filter
(
struct
netif
*
netif
,
const
ip6_addr_t
*
ip6_addr
,
u8_t
action
)
{
uint8_t
mac
[
6
];
const
uint8_t
*
p
=
(
const
uint8_t
*
)
&
ip6_addr
->
addr
[
3
];
struct
rt_stm32_eth
*
stm32_eth
=
(
struct
rt_stm32_eth
*
)
netif
->
state
;
mac
[
0
]
=
0x33
;
mac
[
1
]
=
0x33
;
mac
[
2
]
=
*
(
p
+
0
);
mac
[
3
]
=
*
(
p
+
1
);
mac
[
4
]
=
*
(
p
+
2
);
mac
[
5
]
=
*
(
p
+
3
);
register_multicast_address
(
stm32_eth
,
mac
);
if
(
1
)
{
rt_kprintf
(
"%s %s %s "
,
__FUNCTION__
,
(
action
==
NETIF_ADD_MAC_FILTER
)
?
"add"
:
"del"
,
ip6addr_ntoa
(
ip6_addr
));
rt_kprintf
(
"%02X:%02X:%02X:%02X:%02X:%02X
\n
"
,
mac
[
0
],
mac
[
1
],
mac
[
2
],
mac
[
3
],
mac
[
4
],
mac
[
5
]);
}
return
0
;
}
#endif
/* LWIP_IPV6 && LWIP_IPV6_MLD */
/* initialize the interface */
static
rt_err_t
rt_stm32_eth_init
(
rt_device_t
dev
)
{
...
...
@@ -3445,7 +3555,9 @@ static rt_err_t rt_stm32_eth_init(rt_device_t dev)
ETH_InitStructure
.
ETH_ReceiveAll
=
ETH_ReceiveAll_Disable
;
ETH_InitStructure
.
ETH_BroadcastFramesReception
=
ETH_BroadcastFramesReception_Enable
;
ETH_InitStructure
.
ETH_PromiscuousMode
=
ETH_PromiscuousMode_Disable
;
ETH_InitStructure
.
ETH_MulticastFramesFilter
=
ETH_MulticastFramesFilter_Perfect
;
ETH_InitStructure
.
ETH_MulticastFramesFilter
=
ETH_MulticastFramesFilter_HashTable
;
ETH_InitStructure
.
ETH_HashTableHigh
=
stm32_eth
->
ETH_HashTableHigh
;
ETH_InitStructure
.
ETH_HashTableLow
=
stm32_eth
->
ETH_HashTableLow
;
ETH_InitStructure
.
ETH_UnicastFramesFilter
=
ETH_UnicastFramesFilter_Perfect
;
#ifdef CHECKSUM_BY_HARDWARE
ETH_InitStructure
.
ETH_ChecksumOffload
=
ETH_ChecksumOffload_Enable
;
...
...
@@ -3486,6 +3598,14 @@ static rt_err_t rt_stm32_eth_init(rt_device_t dev)
/* Enable MAC and DMA transmission and reception */
ETH_Start
();
#if LWIP_IPV4 && LWIP_IGMP
netif_set_igmp_mac_filter
(
stm32_eth
->
parent
.
netif
,
igmp_mac_filter
);
#endif
/* LWIP_IPV4 && LWIP_IGMP */
#if LWIP_IPV6 && LWIP_IPV6_MLD
netif_set_mld_mac_filter
(
stm32_eth
->
parent
.
netif
,
mld_mac_filter
);
#endif
/* LWIP_IPV6 && LWIP_IPV6_MLD */
return
RT_EOK
;
}
...
...
components/CMSIS/Kconfig
0 → 100644
浏览文件 @
fe27b975
if ARCH_ARM_CORTEX_M
menu "ARM CMSIS"
config RT_USING_CMSIS_OS
bool "Using CMSIS RTOS API"
default n
help
Enable CMSIS RTOS API, which is implemented above RT-Thread.
config RT_USING_RTT_CMSIS
bool "Using CMSIS Header files in RT-Thread"
default n
help
Use CMSIS header files in RT-Thread/components/CMSIS. Otherwise, use the
CMSIS header files in BSP.
endmenu
endif
components/Kconfig
浏览文件 @
fe27b975
...
...
@@ -28,4 +28,6 @@ source "$RTT_DIR/components/vbus/Kconfig"
source "$RTT_DIR/components/utilities/Kconfig"
source "$RTT_DIR/components/CMSIS/Kconfig"
endmenu
components/dfs/Kconfig
浏览文件 @
fe27b975
...
...
@@ -12,17 +12,20 @@ if RT_USING_DFS
default y
config DFS_FILESYSTEMS_MAX
int "The maximal number of mounted file system"
default 2
int "The maximal number of mounted file system"
default 4 if RT_USING_DFS_NFS
default 2
config DFS_FILESYSTEM_TYPES_MAX
int "The maximal number of file system type"
default 2
default 4 if RT_USING_DFS_NFS
default 2
config DFS_FD_MAX
int "The maximal number of opened files"
default 16 if RT_USING_DFS_NFS
default 4
config RT_USING_DFS_ELMFAT
bool "Enable elm-chan fatfs"
default y
...
...
@@ -51,18 +54,18 @@ if RT_USING_DFS
config RT_DFS_ELM_USE_LFN_2
bool "2: LFN with dynamic LFN working buffer on the stack"
config RT_DFS_ELM_USE_LFN_3
bool "3: LFN with dynamic LFN working buffer on the heap"
endchoice
config RT_DFS_ELM_USE_LFN
int
default 0 if RT_DFS_ELM_USE_LFN_0
default 1 if RT_DFS_ELM_USE_LFN_1
default 2 if RT_DFS_ELM_USE_LFN_2
default 3 if RT_DFS_ELM_USE_LFN_3
config RT_DFS_ELM_MAX_LFN
int "Maximal size of file name length"
range 12 255
...
...
@@ -81,7 +84,7 @@ if RT_USING_DFS
config RT_DFS_ELM_USE_ERASE
bool "Enable sector erase feature"
default n
config RT_DFS_ELM_REENTRANT
bool "Enable the reentrancy (thread safe) of the FatFs module"
default y
...
...
@@ -91,7 +94,7 @@ if RT_USING_DFS
config RT_USING_DFS_DEVFS
bool "Using devfs for device objects"
default y
config RT_USING_DFS_NET
bool "Enable BSD socket operated by file system API"
select RT_USING_LWIP
...
...
@@ -140,23 +143,23 @@ if RT_USING_DFS
config RT_UFFS_ECC_MODE_2
bool "2: Flash driver(or by hardware) calculate the ECC"
config RT_UFFS_ECC_MODE_3
bool "3: Hardware calculate the ECC and automatically write to spare."
endchoice
config RT_UFFS_ECC_MODE
int
default 0 if RT_UFFS_ECC_MODE_0
default 1 if RT_UFFS_ECC_MODE_1
default 2 if RT_UFFS_ECC_MODE_2
default 3 if RT_UFFS_ECC_MODE_3
endif
config RT_USING_DFS_NFS
bool "Using NFS v3 client file system"
depends on
RT_USING_LWIP
select
RT_USING_LWIP
default n
if RT_USING_DFS_NFS
...
...
components/net/Kconfig
浏览文件 @
fe27b975
...
...
@@ -27,7 +27,7 @@ config RT_USING_LWIP
config RT_LWIP_IGMP
bool "IGMP protocol"
default
n
default
y
config RT_LWIP_ICMP
bool "ICMP protocol"
...
...
@@ -91,12 +91,12 @@ config RT_USING_LWIP
config RT_LWIP_PPPOE
bool "PPPoE protocol"
default n
config RT_LWIP_PPPOS
bool "PPPoS protocol"
default n
endif
config RT_MEMP_NUM_NETCONN
int "the number of struct netconns"
default 8
...
...
@@ -111,6 +111,7 @@ config RT_USING_LWIP
config RT_LWIP_UDP_PCB_NUM
int "the number of UDP socket"
default 8 if RT_USING_DFS_NFS
default 4
if RT_LWIP_TCP
...
...
components/net/lwip-2.0.2/src/netif/ethernetif.c
浏览文件 @
fe27b975
...
...
@@ -173,10 +173,26 @@ static err_t eth_netif_device_init(struct netif *netif)
netif
->
flags
=
(
ethif
->
flags
&
0xff
);
#if LWIP_IPV6
netif
->
output_ip6
=
ethip6_output
;
netif
->
ip6_autoconfig_enabled
=
1
;
netif_create_ip6_linklocal_address
(
netif
,
1
);
netif
->
flags
|=
NETIF_FLAG_MLD6
;
netif
->
output_ip6
=
ethip6_output
;
netif
->
ip6_autoconfig_enabled
=
1
;
netif_create_ip6_linklocal_address
(
netif
,
1
);
#if LWIP_IPV6_MLD
netif
->
flags
|=
NETIF_FLAG_MLD6
;
/*
* For hardware/netifs that implement MAC filtering.
* All-nodes link-local is handled by default, so we must let the hardware know
* to allow multicast packets in.
* Should set mld_mac_filter previously. */
if
(
netif
->
mld_mac_filter
!=
NULL
)
{
ip6_addr_t
ip6_allnodes_ll
;
ip6_addr_set_allnodes_linklocal
(
&
ip6_allnodes_ll
);
netif
->
mld_mac_filter
(
netif
,
&
ip6_allnodes_ll
,
NETIF_ADD_MAC_FILTER
);
}
#endif
/* LWIP_IPV6_MLD */
#endif
/* LWIP_IPV6 */
/* set default netif */
...
...
libcpu/Kconfig
浏览文件 @
fe27b975
...
...
@@ -33,6 +33,14 @@ config ARCH_ARM_MMU
bool
depends on ARCH_ARM
config ARCH_ARM_ARM9
bool
select ARCH_ARM
config ARCH_ARM_ARM11
bool
select ARCH_ARM
config ARCH_ARM_CORTEX_A
bool
select ARCH_ARM
...
...
libcpu/arm/AT91SAM7S/stack.c
浏览文件 @
fe27b975
...
...
@@ -30,31 +30,34 @@
* @return stack address
*/
rt_uint8_t
*
rt_hw_stack_init
(
void
*
tentry
,
void
*
parameter
,
rt_uint8_t
*
stack_addr
,
void
*
texit
)
rt_uint8_t
*
stack_addr
,
void
*
texit
)
{
unsigned
long
*
stk
;
rt_uint32_t
*
stk
;
stk
=
(
unsigned
long
*
)
stack_addr
;
*
(
stk
)
=
(
unsigned
long
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
unsigned
long
)
texit
;
/* lr */
*
(
--
stk
)
=
0
;
/* r12 */
*
(
--
stk
)
=
0
;
/* r11 */
*
(
--
stk
)
=
0
;
/* r10 */
*
(
--
stk
)
=
0
;
/* r9 */
*
(
--
stk
)
=
0
;
/* r8 */
*
(
--
stk
)
=
0
;
/* r7 */
*
(
--
stk
)
=
0
;
/* r6 */
*
(
--
stk
)
=
0
;
/* r5 */
*
(
--
stk
)
=
0
;
/* r4 */
*
(
--
stk
)
=
0
;
/* r3 */
*
(
--
stk
)
=
0
;
/* r2 */
*
(
--
stk
)
=
0
;
/* r1 */
*
(
--
stk
)
=
(
unsigned
long
)
parameter
;
/* r0 : argument */
*
(
--
stk
)
=
SVCMODE
;
/* cpsr */
*
(
--
stk
)
=
SVCMODE
;
/* spsr */
stack_addr
+=
sizeof
(
rt_uint32_t
);
stack_addr
=
(
rt_uint8_t
*
)
RT_ALIGN_DOWN
((
rt_uint32_t
)
stack_addr
,
8
);
stk
=
(
rt_uint32_t
*
)
stack_addr
;
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
*
(
--
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
*
(
--
stk
)
=
0xdeadbeef
;
/* r12 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r11 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r10 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r9 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r8 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r7 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r6 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r5 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r4 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r3 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r2 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
*
(
--
stk
)
=
SVCMODE
;
/* cpsr */
*
(
--
stk
)
=
SVCMODE
;
/* spsr */
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
}
/*@}*/
libcpu/arm/AT91SAM7X/stack.c
浏览文件 @
fe27b975
...
...
@@ -13,7 +13,7 @@
*/
#include <rtthread.h>
#define SVCMODE
0x13
#define SVCMODE
0x13
/**
* @addtogroup AT91SAM7
...
...
@@ -31,31 +31,33 @@
* @return stack address
*/
rt_uint8_t
*
rt_hw_stack_init
(
void
*
tentry
,
void
*
parameter
,
rt_uint8_t
*
stack_addr
,
void
*
texit
)
rt_uint8_t
*
stack_addr
,
void
*
texit
)
{
unsigned
long
*
stk
;
rt_uint32_t
*
stk
;
stk
=
(
unsigned
long
*
)
stack_addr
;
*
(
stk
)
=
(
unsigned
long
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
unsigned
long
)
texit
;
/* lr */
*
(
--
stk
)
=
0
;
/* r12 */
*
(
--
stk
)
=
0
;
/* r11 */
*
(
--
stk
)
=
0
;
/* r10 */
*
(
--
stk
)
=
0
;
/* r9 */
*
(
--
stk
)
=
0
;
/* r8 */
*
(
--
stk
)
=
0
;
/* r7 */
*
(
--
stk
)
=
0
;
/* r6 */
*
(
--
stk
)
=
0
;
/* r5 */
*
(
--
stk
)
=
0
;
/* r4 */
*
(
--
stk
)
=
0
;
/* r3 */
*
(
--
stk
)
=
0
;
/* r2 */
*
(
--
stk
)
=
0
;
/* r1 */
*
(
--
stk
)
=
(
unsigned
long
)
parameter
;
/* r0 : argument */
*
(
--
stk
)
=
SVCMODE
;
/* cpsr */
*
(
--
stk
)
=
SVCMODE
;
/* spsr */
stack_addr
+=
sizeof
(
rt_uint32_t
);
stack_addr
=
(
rt_uint8_t
*
)
RT_ALIGN_DOWN
((
rt_uint32_t
)
stack_addr
,
8
);
stk
=
(
rt_uint32_t
*
)
stack_addr
;
*
(
--
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
*
(
--
stk
)
=
0xdeadbeef
;
/* r12 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r11 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r10 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r9 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r8 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r7 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r6 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r5 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r4 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r3 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r2 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
*
(
--
stk
)
=
SVCMODE
;
/* cpsr */
*
(
--
stk
)
=
SVCMODE
;
/* spsr */
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
}
/*@}*/
libcpu/arm/am335x/stack.c
浏览文件 @
fe27b975
...
...
@@ -24,42 +24,45 @@
* This function will initialize thread stack
*
* @param tentry the entry of thread
* @param parameter the parameter of entry
* @param parameter the parameter of entry
* @param stack_addr the beginning stack address
* @param texit the function will be called when thread exit
*
* @return stack address
*/
rt_uint8_t
*
rt_hw_stack_init
(
void
*
tentry
,
void
*
parameter
,
rt_uint8_t
*
stack_addr
,
void
*
texit
)
rt_uint8_t
*
stack_addr
,
void
*
texit
)
{
rt_uint32_t
*
stk
;
rt_uint32_t
*
stk
;
stk
=
(
rt_uint32_t
*
)
stack_addr
;
*
(
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
*
(
--
stk
)
=
0
;
/* r12 */
*
(
--
stk
)
=
0
;
/* r11 */
*
(
--
stk
)
=
0
;
/* r10 */
*
(
--
stk
)
=
0
;
/* r9 */
*
(
--
stk
)
=
0
;
/* r8 */
*
(
--
stk
)
=
0
;
/* r7 */
*
(
--
stk
)
=
0
;
/* r6 */
*
(
--
stk
)
=
0
;
/* r5 */
*
(
--
stk
)
=
0
;
/* r4 */
*
(
--
stk
)
=
0
;
/* r3 */
*
(
--
stk
)
=
0
;
/* r2 */
*
(
--
stk
)
=
0
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
stack_addr
+=
sizeof
(
rt_uint32_t
);
stack_addr
=
(
rt_uint8_t
*
)
RT_ALIGN_DOWN
((
rt_uint32_t
)
stack_addr
,
8
);
stk
=
(
rt_uint32_t
*
)
stack_addr
;
/* cpsr */
if
((
rt_uint32_t
)
tentry
&
0x01
)
*
(
--
stk
)
=
SVCMODE
|
0x20
;
/* thumb mode */
else
*
(
--
stk
)
=
SVCMODE
;
/* arm mode */
*
(
--
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
*
(
--
stk
)
=
0xdeadbeef
;
/* r12 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r11 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r10 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r9 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r8 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r7 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r6 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r5 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r4 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r3 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r2 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
/* cpsr */
if
((
rt_uint32_t
)
tentry
&
0x01
)
*
(
--
stk
)
=
SVCMODE
|
0x20
;
/* thumb mode */
else
*
(
--
stk
)
=
SVCMODE
;
/* arm mode */
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
}
/*@}*/
libcpu/arm/arm926/stack.c
浏览文件 @
fe27b975
...
...
@@ -50,10 +50,9 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
{
rt_uint32_t
*
stk
;
//stk = (rt_uint32_t*)stack_addr;
stack_addr
+=
sizeof
(
rt_uint32_t
);
stack_addr
=
(
rt_uint8_t
*
)
RT_ALIGN_DOWN
((
rt_uint32_t
)
stack_addr
,
8
);
stk
=
(
rt_uint32_t
*
)
stack_addr
;
stk
=
(
rt_uint32_t
*
)
stack_addr
;
*
(
--
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
...
...
@@ -70,11 +69,11 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
*
(
--
stk
)
=
0xdeadbeef
;
/* r2 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
/* cpsr */
if
((
rt_uint32_t
)
tentry
&
0x01
)
*
(
--
stk
)
=
SVCMODE
|
0x20
;
/* thumb mode */
else
*
(
--
stk
)
=
SVCMODE
;
/* arm mode */
/* cpsr */
if
((
rt_uint32_t
)
tentry
&
0x01
)
*
(
--
stk
)
=
SVCMODE
|
0x20
;
/* thumb mode */
else
*
(
--
stk
)
=
SVCMODE
;
/* arm mode */
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
...
...
libcpu/arm/armv6/stack.c
浏览文件 @
fe27b975
...
...
@@ -26,54 +26,57 @@
/*****************************/
/* CPU Mode */
/*****************************/
#define USERMODE
0x10
#define FIQMODE
0x11
#define IRQMODE
0x12
#define SVCMODE
0x13
#define ABORTMODE
0x17
#define UNDEFMODE
0x1b
#define MODEMASK
0x1f
#define NOINT
0xc0
#define USERMODE
0x10
#define FIQMODE
0x11
#define IRQMODE
0x12
#define SVCMODE
0x13
#define ABORTMODE
0x17
#define UNDEFMODE
0x1b
#define MODEMASK
0x1f
#define NOINT
0xc0
/**
* This function will initialize thread stack
*
* @param tentry the entry of thread
* @param parameter the parameter of entry
* @param parameter the parameter of entry
* @param stack_addr the beginning stack address
* @param texit the function will be called when thread exit
*
* @return stack address
*/
rt_uint8_t
*
rt_hw_stack_init
(
void
*
tentry
,
void
*
parameter
,
rt_uint8_t
*
stack_addr
,
void
*
texit
)
rt_uint8_t
*
stack_addr
,
void
*
texit
)
{
rt_uint32_t
*
stk
;
rt_uint32_t
*
stk
;
stk
=
(
rt_uint32_t
*
)
stack_addr
;
*
(
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
*
(
--
stk
)
=
0
;
/* r12 */
*
(
--
stk
)
=
0
;
/* r11 */
*
(
--
stk
)
=
0
;
/* r10 */
*
(
--
stk
)
=
0
;
/* r9 */
*
(
--
stk
)
=
0
;
/* r8 */
*
(
--
stk
)
=
0
;
/* r7 */
*
(
--
stk
)
=
0
;
/* r6 */
*
(
--
stk
)
=
0
;
/* r5 */
*
(
--
stk
)
=
0
;
/* r4 */
*
(
--
stk
)
=
0
;
/* r3 */
*
(
--
stk
)
=
0
;
/* r2 */
*
(
--
stk
)
=
0
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
stack_addr
+=
sizeof
(
rt_uint32_t
);
stack_addr
=
(
rt_uint8_t
*
)
RT_ALIGN_DOWN
((
rt_uint32_t
)
stack_addr
,
8
);
stk
=
(
rt_uint32_t
*
)
stack_addr
;
/* cpsr */
if
((
rt_uint32_t
)
tentry
&
0x01
)
*
(
--
stk
)
=
SVCMODE
|
0x20
;
/* thumb mode */
else
*
(
--
stk
)
=
SVCMODE
;
/* arm mode */
*
(
--
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
*
(
--
stk
)
=
0xdeadbeef
;
/* r12 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r11 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r10 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r9 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r8 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r7 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r6 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r5 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r4 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r3 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r2 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
/* cpsr */
if
((
rt_uint32_t
)
tentry
&
0x01
)
*
(
--
stk
)
=
SVCMODE
|
0x20
;
/* thumb mode */
else
*
(
--
stk
)
=
SVCMODE
;
/* arm mode */
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
}
libcpu/arm/cortex-a/stack.c
浏览文件 @
fe27b975
...
...
@@ -32,35 +32,37 @@
* @return stack address
*/
rt_uint8_t
*
rt_hw_stack_init
(
void
*
tentry
,
void
*
parameter
,
rt_uint8_t
*
stack_addr
,
void
*
texit
)
rt_uint8_t
*
stack_addr
,
void
*
texit
)
{
rt_uint32_t
*
stk
;
rt_uint32_t
*
stk
;
stk
=
(
rt_uint32_t
*
)
stack_addr
;
*
(
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
*
(
--
stk
)
=
0
;
/* r12 */
*
(
--
stk
)
=
0
;
/* r11 */
*
(
--
stk
)
=
0
;
/* r10 */
*
(
--
stk
)
=
0
;
/* r9 */
*
(
--
stk
)
=
0
;
/* r8 */
*
(
--
stk
)
=
0
;
/* r7 */
*
(
--
stk
)
=
0
;
/* r6 */
*
(
--
stk
)
=
0
;
/* r5 */
*
(
--
stk
)
=
0
;
/* r4 */
*
(
--
stk
)
=
0
;
/* r3 */
*
(
--
stk
)
=
0
;
/* r2 */
*
(
--
stk
)
=
0
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
stack_addr
+=
sizeof
(
rt_uint32_t
);
stack_addr
=
(
rt_uint8_t
*
)
RT_ALIGN_DOWN
((
rt_uint32_t
)
stack_addr
,
8
);
stk
=
(
rt_uint32_t
*
)
stack_addr
;
*
(
--
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
*
(
--
stk
)
=
0xdeadbeef
;
/* r12 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r11 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r10 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r9 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r8 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r7 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r6 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r5 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r4 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r3 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r2 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
/* cpsr */
if
((
rt_uint32_t
)
tentry
&
0x01
)
*
(
--
stk
)
=
SVCMODE
|
0x20
;
/* thumb mode */
else
*
(
--
stk
)
=
SVCMODE
;
/* arm mode */
/* cpsr */
if
((
rt_uint32_t
)
tentry
&
0x01
)
*
(
--
stk
)
=
SVCMODE
|
0x20
;
/* thumb mode */
else
*
(
--
stk
)
=
SVCMODE
;
/* arm mode */
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
}
/*@}*/
libcpu/arm/cortex-r4/stack.c
浏览文件 @
fe27b975
...
...
@@ -24,39 +24,41 @@
* This function will initialize thread stack
*
* @param tentry the entry of thread
* @param parameter the parameter of entry
* @param parameter the parameter of entry
* @param stack_addr the beginning stack address
* @param texit the function will be called when thread exit
*
* @return stack address
*/
rt_uint8_t
*
rt_hw_stack_init
(
void
*
tentry
,
void
*
parameter
,
rt_uint8_t
*
stack_addr
,
void
*
texit
)
rt_uint8_t
*
stack_addr
,
void
*
texit
)
{
unsigned
long
*
stk
;
rt_uint32_t
*
stk
;
stk
=
(
unsigned
long
*
)
stack_addr
;
*
(
stk
)
=
(
unsigned
long
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
unsigned
long
)
texit
;
/* lr */
*
(
--
stk
)
=
0
;
/* r12 */
*
(
--
stk
)
=
0
;
/* r11 */
*
(
--
stk
)
=
0
;
/* r10 */
*
(
--
stk
)
=
0
;
/* r9 */
*
(
--
stk
)
=
0
;
/* r8 */
*
(
--
stk
)
=
0
;
/* r7 */
*
(
--
stk
)
=
0
;
/* r6 */
*
(
--
stk
)
=
0
;
/* r5 */
*
(
--
stk
)
=
0
;
/* r4 */
*
(
--
stk
)
=
0
;
/* r3 */
*
(
--
stk
)
=
0
;
/* r2 */
*
(
--
stk
)
=
0
;
/* r1 */
*
(
--
stk
)
=
(
unsigned
long
)
parameter
;
/* r0 : argument */
stack_addr
+=
sizeof
(
rt_uint32_t
);
stack_addr
=
(
rt_uint8_t
*
)
RT_ALIGN_DOWN
((
rt_uint32_t
)
stack_addr
,
8
);
stk
=
(
rt_uint32_t
*
)
stack_addr
;
*
(
--
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
*
(
--
stk
)
=
0xdeadbeef
;
/* r12 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r11 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r10 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r9 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r8 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r7 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r6 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r5 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r4 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r3 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r2 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
/* cpsr */
if
((
rt_uint32_t
)
tentry
&
0x01
)
*
(
--
stk
)
=
SVCMODE
|
0x20
;
/* thumb mode */
else
*
(
--
stk
)
=
SVCMODE
;
/* arm mode */
/* cpsr */
if
((
rt_uint32_t
)
tentry
&
0x01
)
*
(
--
stk
)
=
SVCMODE
|
0x20
;
/* thumb mode */
else
*
(
--
stk
)
=
SVCMODE
;
/* arm mode */
#if defined(__TI_VFP_SUPPORT__) || (defined (__VFP_FP__) && !defined(__SOFTFP__))
#ifndef RT_VFP_LAZY_STACKING
...
...
@@ -73,13 +75,13 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
*
(
--
stk
)
=
0x40000000
;
}
#else
/* FPEXC. Disable the FVP by default. */
*
(
--
stk
)
=
0x00000000
;
/* FPEXC. Disable the FVP by default. */
*
(
--
stk
)
=
0x00000000
;
#endif
#endif
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
}
/*@}*/
libcpu/arm/dm36x/stack.c
浏览文件 @
fe27b975
...
...
@@ -26,54 +26,56 @@
/*****************************/
/* CPU Mode */
/*****************************/
#define USERMODE
0x10
#define FIQMODE
0x11
#define IRQMODE
0x12
#define SVCMODE
0x13
#define ABORTMODE
0x17
#define UNDEFMODE
0x1b
#define MODEMASK
0x1f
#define NOINT
0xc0
#define USERMODE
0x10
#define FIQMODE
0x11
#define IRQMODE
0x12
#define SVCMODE
0x13
#define ABORTMODE
0x17
#define UNDEFMODE
0x1b
#define MODEMASK
0x1f
#define NOINT
0xc0
/**
* This function will initialize thread stack
*
* @param tentry the entry of thread
* @param parameter the parameter of entry
* @param parameter the parameter of entry
* @param stack_addr the beginning stack address
* @param texit the function will be called when thread exit
*
* @return stack address
*/
rt_uint8_t
*
rt_hw_stack_init
(
void
*
tentry
,
void
*
parameter
,
rt_uint8_t
*
stack_addr
,
void
*
texit
)
rt_uint8_t
*
stack_addr
,
void
*
texit
)
{
rt_uint32_t
*
stk
;
rt_uint32_t
*
stk
;
stk
=
(
rt_uint32_t
*
)
stack_addr
;
*
(
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
*
(
--
stk
)
=
0
;
/* r12 */
*
(
--
stk
)
=
0
;
/* r11 */
*
(
--
stk
)
=
0
;
/* r10 */
*
(
--
stk
)
=
0
;
/* r9 */
*
(
--
stk
)
=
0
;
/* r8 */
*
(
--
stk
)
=
0
;
/* r7 */
*
(
--
stk
)
=
0
;
/* r6 */
*
(
--
stk
)
=
0
;
/* r5 */
*
(
--
stk
)
=
0
;
/* r4 */
*
(
--
stk
)
=
0
;
/* r3 */
*
(
--
stk
)
=
0
;
/* r2 */
*
(
--
stk
)
=
0
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
stack_addr
+=
sizeof
(
rt_uint32_t
);
stack_addr
=
(
rt_uint8_t
*
)
RT_ALIGN_DOWN
((
rt_uint32_t
)
stack_addr
,
8
);
stk
=
(
rt_uint32_t
*
)
stack_addr
;
*
(
--
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
*
(
--
stk
)
=
0xdeadbeef
;
/* r12 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r11 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r10 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r9 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r8 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r7 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r6 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r5 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r4 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r3 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r2 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
/* cpsr */
if
((
rt_uint32_t
)
tentry
&
0x01
)
*
(
--
stk
)
=
SVCMODE
|
0x20
;
/* thumb mode */
else
*
(
--
stk
)
=
SVCMODE
;
/* arm mode */
/* cpsr */
if
((
rt_uint32_t
)
tentry
&
0x01
)
*
(
--
stk
)
=
SVCMODE
|
0x20
;
/* thumb mode */
else
*
(
--
stk
)
=
SVCMODE
;
/* arm mode */
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
}
libcpu/arm/lpc24xx/stack.c
浏览文件 @
fe27b975
...
...
@@ -23,42 +23,45 @@
* This function will initialize thread stack
*
* @param tentry the entry of thread
* @param parameter the parameter of entry
* @param parameter the parameter of entry
* @param stack_addr the beginning stack address
* @param texit the function will be called when thread exit
*
* @return stack address
*/
rt_uint8_t
*
rt_hw_stack_init
(
void
*
tentry
,
void
*
parameter
,
rt_uint8_t
*
stack_addr
,
void
*
texit
)
rt_uint8_t
*
stack_addr
,
void
*
texit
)
{
unsigned
long
*
stk
;
rt_uint32_t
*
stk
;
stk
=
(
unsigned
long
*
)
stack_addr
;
*
(
stk
)
=
(
unsigned
long
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
unsigned
long
)
texit
;
/* lr */
*
(
--
stk
)
=
0
;
/* r12 */
*
(
--
stk
)
=
0
;
/* r11 */
*
(
--
stk
)
=
0
;
/* r10 */
*
(
--
stk
)
=
0
;
/* r9 */
*
(
--
stk
)
=
0
;
/* r8 */
*
(
--
stk
)
=
0
;
/* r7 */
*
(
--
stk
)
=
0
;
/* r6 */
*
(
--
stk
)
=
0
;
/* r5 */
*
(
--
stk
)
=
0
;
/* r4 */
*
(
--
stk
)
=
0
;
/* r3 */
*
(
--
stk
)
=
0
;
/* r2 */
*
(
--
stk
)
=
0
;
/* r1 */
*
(
--
stk
)
=
(
unsigned
long
)
parameter
;
/* r0 : argument */
stack_addr
+=
sizeof
(
rt_uint32_t
);
stack_addr
=
(
rt_uint8_t
*
)
RT_ALIGN_DOWN
((
rt_uint32_t
)
stack_addr
,
8
);
stk
=
(
rt_uint32_t
*
)
stack_addr
;
/* cpsr */
if
((
rt_uint32_t
)
tentry
&
0x01
)
*
(
--
stk
)
=
SVCMODE
|
0x20
;
/* thumb mode */
else
*
(
--
stk
)
=
SVCMODE
;
/* arm mode */
*
(
--
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
*
(
--
stk
)
=
0xdeadbeef
;
/* r12 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r11 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r10 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r9 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r8 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r7 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r6 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r5 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r4 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r3 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r2 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
/* cpsr */
if
((
rt_uint32_t
)
tentry
&
0x01
)
*
(
--
stk
)
=
SVCMODE
|
0x20
;
/* thumb mode */
else
*
(
--
stk
)
=
SVCMODE
;
/* arm mode */
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
}
/*@}*/
libcpu/arm/realview-a8-vmm/stack.c
浏览文件 @
fe27b975
...
...
@@ -24,42 +24,44 @@
* This function will initialize thread stack
*
* @param tentry the entry of thread
* @param parameter the parameter of entry
* @param parameter the parameter of entry
* @param stack_addr the beginning stack address
* @param texit the function will be called when thread exit
*
* @return stack address
*/
rt_uint8_t
*
rt_hw_stack_init
(
void
*
tentry
,
void
*
parameter
,
rt_uint8_t
*
stack_addr
,
void
*
texit
)
rt_uint8_t
*
stack_addr
,
void
*
texit
)
{
rt_uint32_t
*
stk
;
rt_uint32_t
*
stk
;
stk
=
(
rt_uint32_t
*
)
stack_addr
;
*
(
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
*
(
--
stk
)
=
0
;
/* r12 */
*
(
--
stk
)
=
0
;
/* r11 */
*
(
--
stk
)
=
0
;
/* r10 */
*
(
--
stk
)
=
0
;
/* r9 */
*
(
--
stk
)
=
0
;
/* r8 */
*
(
--
stk
)
=
0
;
/* r7 */
*
(
--
stk
)
=
0
;
/* r6 */
*
(
--
stk
)
=
0
;
/* r5 */
*
(
--
stk
)
=
0
;
/* r4 */
*
(
--
stk
)
=
0
;
/* r3 */
*
(
--
stk
)
=
0
;
/* r2 */
*
(
--
stk
)
=
0
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
stack_addr
+=
sizeof
(
rt_uint32_t
);
stack_addr
=
(
rt_uint8_t
*
)
RT_ALIGN_DOWN
((
rt_uint32_t
)
stack_addr
,
8
);
stk
=
(
rt_uint32_t
*
)
stack_addr
;
*
(
--
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
*
(
--
stk
)
=
0xdeadbeef
;
/* r12 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r11 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r10 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r9 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r8 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r7 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r6 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r5 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r4 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r3 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r2 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
/* cpsr */
if
((
rt_uint32_t
)
tentry
&
0x01
)
*
(
--
stk
)
=
SVCMODE
|
0x20
;
/* thumb mode */
else
*
(
--
stk
)
=
SVCMODE
;
/* arm mode */
/* cpsr */
if
((
rt_uint32_t
)
tentry
&
0x01
)
*
(
--
stk
)
=
SVCMODE
|
0x20
;
/* thumb mode */
else
*
(
--
stk
)
=
SVCMODE
;
/* arm mode */
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
}
/*@}*/
libcpu/arm/s3c24x0/stack.c
浏览文件 @
fe27b975
...
...
@@ -23,38 +23,41 @@
* This function will initialize thread stack
*
* @param tentry the entry of thread
* @param parameter the parameter of entry
* @param parameter the parameter of entry
* @param stack_addr the beginning stack address
* @param texit the function will be called when thread exit
*
* @return stack address
*/
rt_uint8_t
*
rt_hw_stack_init
(
void
*
tentry
,
void
*
parameter
,
rt_uint8_t
*
stack_addr
,
void
*
texit
)
rt_uint8_t
*
stack_addr
,
void
*
texit
)
{
rt_uint32_t
*
stk
;
rt_uint32_t
*
stk
;
stk
=
(
rt_uint32_t
*
)
stack_addr
;
*
(
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
*
(
--
stk
)
=
0
;
/* r12 */
*
(
--
stk
)
=
0
;
/* r11 */
*
(
--
stk
)
=
0
;
/* r10 */
*
(
--
stk
)
=
0
;
/* r9 */
*
(
--
stk
)
=
0
;
/* r8 */
*
(
--
stk
)
=
0
;
/* r7 */
*
(
--
stk
)
=
0
;
/* r6 */
*
(
--
stk
)
=
0
;
/* r5 */
*
(
--
stk
)
=
0
;
/* r4 */
*
(
--
stk
)
=
0
;
/* r3 */
*
(
--
stk
)
=
0
;
/* r2 */
*
(
--
stk
)
=
0
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
*
(
--
stk
)
=
SVCMODE
;
/* cpsr */
*
(
--
stk
)
=
SVCMODE
;
/* spsr */
stack_addr
+=
sizeof
(
rt_uint32_t
);
stack_addr
=
(
rt_uint8_t
*
)
RT_ALIGN_DOWN
((
rt_uint32_t
)
stack_addr
,
8
);
stk
=
(
rt_uint32_t
*
)
stack_addr
;
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
*
(
--
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
*
(
--
stk
)
=
0xdeadbeef
;
/* r12 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r11 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r10 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r9 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r8 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r7 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r6 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r5 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r4 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r3 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r2 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
*
(
--
stk
)
=
SVCMODE
;
/* cpsr */
*
(
--
stk
)
=
SVCMODE
;
/* spsr */
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
}
/*@}*/
libcpu/arm/s3c44b0/stack.c
浏览文件 @
fe27b975
...
...
@@ -30,31 +30,33 @@
* @return stack address
*/
rt_uint8_t
*
rt_hw_stack_init
(
void
*
tentry
,
void
*
parameter
,
rt_uint8_t
*
stack_addr
,
void
*
texit
)
rt_uint8_t
*
stack_addr
,
void
*
texit
)
{
unsigned
long
*
stk
;
rt_uint32_t
*
stk
;
stk
=
(
unsigned
long
*
)
stack_addr
;
*
(
stk
)
=
(
unsigned
long
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
unsigned
long
)
texit
;
/* lr */
*
(
--
stk
)
=
0
;
/* r12 */
*
(
--
stk
)
=
0
;
/* r11 */
*
(
--
stk
)
=
0
;
/* r10 */
*
(
--
stk
)
=
0
;
/* r9 */
*
(
--
stk
)
=
0
;
/* r8 */
*
(
--
stk
)
=
0
;
/* r7 */
*
(
--
stk
)
=
0
;
/* r6 */
*
(
--
stk
)
=
0
;
/* r5 */
*
(
--
stk
)
=
0
;
/* r4 */
*
(
--
stk
)
=
0
;
/* r3 */
*
(
--
stk
)
=
0
;
/* r2 */
*
(
--
stk
)
=
0
;
/* r1 */
*
(
--
stk
)
=
(
unsigned
long
)
parameter
;
/* r0 : argument */
*
(
--
stk
)
=
SVCMODE
;
/* cpsr */
*
(
--
stk
)
=
SVCMODE
;
/* spsr */
stack_addr
+=
sizeof
(
rt_uint32_t
);
stack_addr
=
(
rt_uint8_t
*
)
RT_ALIGN_DOWN
((
rt_uint32_t
)
stack_addr
,
8
);
stk
=
(
rt_uint32_t
*
)
stack_addr
;
*
(
--
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
*
(
--
stk
)
=
0xdeadbeef
;
/* r12 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r11 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r10 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r9 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r8 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r7 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r6 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r5 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r4 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r3 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r2 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
*
(
--
stk
)
=
SVCMODE
;
/* cpsr */
*
(
--
stk
)
=
SVCMODE
;
/* spsr */
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
}
/*@}*/
libcpu/arm/sep4020/stack.c
浏览文件 @
fe27b975
...
...
@@ -22,38 +22,40 @@
* This function will initialize thread stack
*
* @param tentry the entry of thread
* @param parameter the parameter of entry
* @param parameter the parameter of entry
* @param stack_addr the beginning stack address
* @param texit the function will be called when thread exit
*
* @return stack address
*/
rt_uint8_t
*
rt_hw_stack_init
(
void
*
tentry
,
void
*
parameter
,
rt_uint8_t
*
stack_addr
,
void
*
texit
)
rt_uint8_t
*
stack_addr
,
void
*
texit
)
{
rt_uint32_t
*
stk
;
rt_uint32_t
*
stk
;
stk
=
(
rt_uint32_t
*
)
stack_addr
;
*
(
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
*
(
--
stk
)
=
0
;
/* r12 */
*
(
--
stk
)
=
0
;
/* r11 */
*
(
--
stk
)
=
0
;
/* r10 */
*
(
--
stk
)
=
0
;
/* r9 */
*
(
--
stk
)
=
0
;
/* r8 */
*
(
--
stk
)
=
0
;
/* r7 */
*
(
--
stk
)
=
0
;
/* r6 */
*
(
--
stk
)
=
0
;
/* r5 */
*
(
--
stk
)
=
0
;
/* r4 */
*
(
--
stk
)
=
0
;
/* r3 */
*
(
--
stk
)
=
0
;
/* r2 */
*
(
--
stk
)
=
0
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
*
(
--
stk
)
=
Mode_SVC
;
/* cpsr */
*
(
--
stk
)
=
Mode_SVC
;
/* spsr */
stack_addr
+=
sizeof
(
rt_uint32_t
);
stack_addr
=
(
rt_uint8_t
*
)
RT_ALIGN_DOWN
((
rt_uint32_t
)
stack_addr
,
8
);
stk
=
(
rt_uint32_t
*
)
stack_addr
;
*
(
--
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
*
(
--
stk
)
=
0xdeadbeef
;
/* r12 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r11 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r10 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r9 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r8 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r7 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r6 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r5 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r4 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r3 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r2 */
*
(
--
stk
)
=
0xdeadbeef
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
*
(
--
stk
)
=
Mode_SVC
;
/* cpsr */
*
(
--
stk
)
=
Mode_SVC
;
/* spsr */
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
/* return task's current stack address */
return
(
rt_uint8_t
*
)
stk
;
}
/*@}*/
libcpu/arm/zynq7000/stack.c
浏览文件 @
fe27b975
...
...
@@ -31,21 +31,23 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
{
rt_uint32_t
*
stk
;
stack_addr
+=
sizeof
(
rt_uint32_t
);
stack_addr
=
(
rt_uint8_t
*
)
RT_ALIGN_DOWN
((
rt_uint32_t
)
stack_addr
,
8
);
stk
=
(
rt_uint32_t
*
)
stack_addr
;
*
(
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
tentry
;
/* entry point */
*
(
--
stk
)
=
(
rt_uint32_t
)
texit
;
/* lr */
*
(
--
stk
)
=
0
;
/* r12 */
*
(
--
stk
)
=
0
;
/* r11 */
*
(
--
stk
)
=
0
;
/* r10 */
*
(
--
stk
)
=
0
;
/* r9 */
*
(
--
stk
)
=
0
;
/* r8 */
*
(
--
stk
)
=
0
;
/* r7 */
*
(
--
stk
)
=
0
;
/* r6 */
*
(
--
stk
)
=
0
;
/* r5 */
*
(
--
stk
)
=
0
;
/* r4 */
*
(
--
stk
)
=
0
;
/* r3 */
*
(
--
stk
)
=
0
;
/* r2 */
*
(
--
stk
)
=
0
;
/* r1 */
*
(
--
stk
)
=
0
xdeadbeef
;
/* r12 */
*
(
--
stk
)
=
0
xdeadbeef
;
/* r11 */
*
(
--
stk
)
=
0
xdeadbeef
;
/* r10 */
*
(
--
stk
)
=
0
xdeadbeef
;
/* r9 */
*
(
--
stk
)
=
0
xdeadbeef
;
/* r8 */
*
(
--
stk
)
=
0
xdeadbeef
;
/* r7 */
*
(
--
stk
)
=
0
xdeadbeef
;
/* r6 */
*
(
--
stk
)
=
0
xdeadbeef
;
/* r5 */
*
(
--
stk
)
=
0
xdeadbeef
;
/* r4 */
*
(
--
stk
)
=
0
xdeadbeef
;
/* r3 */
*
(
--
stk
)
=
0
xdeadbeef
;
/* r2 */
*
(
--
stk
)
=
0
xdeadbeef
;
/* r1 */
*
(
--
stk
)
=
(
rt_uint32_t
)
parameter
;
/* r0 : argument */
/* cpsr */
...
...
tools/menuconfig.py
浏览文件 @
fe27b975
...
...
@@ -80,7 +80,17 @@ def touch_env():
os
.
mkdir
(
env_dir
)
os
.
mkdir
(
os
.
path
.
join
(
env_dir
,
'local_pkgs'
))
os
.
mkdir
(
os
.
path
.
join
(
env_dir
,
'packages'
))
os
.
system
(
'git clone https://github.com/RT-Thread/packages.git ~/.env/packages/packages'
)
kconfig
=
file
(
os
.
path
.
join
(
env_dir
,
'packages'
,
'Kconfig'
),
'w'
)
kconfig
.
write
(
'source "$PKGS_DIR/packages/Kconfig"'
)
os
.
mkdir
(
os
.
path
.
join
(
env_dir
,
'tools'
))
os
.
system
(
'git clone https://github.com/RT-Thread/env.git ~/.env/tools/scripts'
)
env_sh
=
file
(
os
.
path
.
join
(
env_dir
,
'env.sh'
),
'w'
)
env_sh
.
write
(
'export $PATH=~/.env/tools/scripts:$PATH'
)
# menuconfig for Linux
def
menuconfig
(
RTT_ROOT
):
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录