mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-11-09 20:45:41 +08:00
Merge pull request #1 from mysterywolf/littlefs-check
解决没有选定FAL和littlefs软件包的问题,解决挂载顺序不合理的问题,重命名spiflash设备为spiflash0
This commit is contained in:
25 files changed
+411
-350
No files matched your search
@@ -131,6 +131,7 @@ jobs:
|
||||
- {RTT_BSP: "at32/at32f407-start", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "smartfusion2", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "raspberry-pico", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "raspberry-pi/raspi4-32", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Python
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -23,6 +23,7 @@ config BCM2711_SOC
|
||||
select ARCH_ARMV8
|
||||
select RT_USING_COMPONENTS_INIT
|
||||
select RT_USING_USER_MAIN
|
||||
select RT_USING_GIC_V2
|
||||
default y
|
||||
|
||||
source "driver/Kconfig"
|
||||
File diff suppressed because it is too large.
Load diff
@@ -11,7 +11,7 @@
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = 0x8000;
|
||||
. = 0x200000;
|
||||
. = ALIGN(4096);
|
||||
.text :
|
||||
{
|
||||
|
||||
@@ -19,6 +19,9 @@
|
||||
#define RT_USING_TIMER_SOFT
|
||||
#define RT_TIMER_THREAD_PRIO 4
|
||||
#define RT_TIMER_THREAD_STACK_SIZE 2048
|
||||
|
||||
/* kservice optimization */
|
||||
|
||||
#define RT_DEBUG
|
||||
|
||||
/* Inter-Thread communication */
|
||||
@@ -41,7 +44,8 @@
|
||||
#define RT_USING_CONSOLE
|
||||
#define RT_CONSOLEBUF_SIZE 128
|
||||
#define RT_CONSOLE_DEVICE_NAME "uart1"
|
||||
#define RT_VER_NUM 0x40003
|
||||
#define RT_VER_NUM 0x40004
|
||||
#define RT_USING_GIC_V2
|
||||
#define ARCH_ARMV8
|
||||
|
||||
/* RT-Thread Components */
|
||||
@@ -84,6 +88,8 @@
|
||||
#define RT_DFS_ELM_WORD_ACCESS
|
||||
#define RT_DFS_ELM_USE_LFN_3
|
||||
#define RT_DFS_ELM_USE_LFN 3
|
||||
#define RT_DFS_ELM_LFN_UNICODE_0
|
||||
#define RT_DFS_ELM_LFN_UNICODE 0
|
||||
#define RT_DFS_ELM_MAX_LFN 255
|
||||
#define RT_DFS_ELM_DRIVES 2
|
||||
#define RT_DFS_ELM_MAX_SECTOR_SIZE 512
|
||||
@@ -98,6 +104,7 @@
|
||||
#define RT_SYSTEM_WORKQUEUE_STACKSIZE 2048
|
||||
#define RT_SYSTEM_WORKQUEUE_PRIORITY 23
|
||||
#define RT_USING_SERIAL
|
||||
#define RT_USING_SERIAL_V1
|
||||
#define RT_SERIAL_USING_DMA
|
||||
#define RT_SERIAL_RB_BUFSZ 512
|
||||
#define RT_USING_I2C
|
||||
@@ -120,12 +127,14 @@
|
||||
|
||||
#define RT_USING_LIBC
|
||||
#define RT_USING_POSIX
|
||||
#define RT_LIBC_DEFAULT_TIMEZONE 8
|
||||
|
||||
/* Network */
|
||||
|
||||
/* Socket abstraction layer */
|
||||
|
||||
#define RT_USING_SAL
|
||||
#define SAL_INTERNET_CHECK
|
||||
|
||||
/* protocol stack implement */
|
||||
|
||||
@@ -156,8 +165,8 @@
|
||||
|
||||
/* Static IPv4 Address */
|
||||
|
||||
#define RT_LWIP_IPADDR "192.168.1.30"
|
||||
#define RT_LWIP_GWADDR "192.168.1.1"
|
||||
#define RT_LWIP_IPADDR "192.168.111.172"
|
||||
#define RT_LWIP_GWADDR "192.168.111.1"
|
||||
#define RT_LWIP_MSKADDR "255.255.255.0"
|
||||
#define RT_LWIP_UDP
|
||||
#define RT_LWIP_TCP
|
||||
@@ -195,6 +204,9 @@
|
||||
/* Utilities */
|
||||
|
||||
|
||||
/* RT-Thread Utestcases */
|
||||
|
||||
|
||||
/* RT-Thread online packages */
|
||||
|
||||
/* IoT - internet of things */
|
||||
@@ -232,19 +244,16 @@
|
||||
/* peripheral libraries and drivers */
|
||||
|
||||
|
||||
/* AI packages */
|
||||
|
||||
|
||||
/* miscellaneous packages */
|
||||
|
||||
|
||||
/* samples: kernel and components samples */
|
||||
|
||||
|
||||
/* games: games run on RT-Thread console */
|
||||
|
||||
|
||||
/* Privated Packages of RealThread */
|
||||
|
||||
|
||||
/* Network Utilities */
|
||||
/* entertainment: terminal games and other interesting software packages */
|
||||
|
||||
#define BCM2711_SOC
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ if PLATFORM == 'gcc':
|
||||
|
||||
DEVICE = ' -march=armv8-a -mtune=cortex-a72'
|
||||
CFLAGS = DEVICE + ' -Wall'
|
||||
AFLAGS = ' -c' + ' -x assembler-with-cpp -D__ASSEMBLY__'
|
||||
AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -D__ASSEMBLY__'
|
||||
LFLAGS = DEVICE + ' -nostartfiles -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,system_vectors -T link.lds'
|
||||
CPATH = ''
|
||||
LPATH = ''
|
||||
|
||||
@@ -41,9 +41,9 @@ struct rt_stm32_eth
|
||||
/* interface address info, hw address */
|
||||
rt_uint8_t dev_addr[MAX_ADDR_LEN];
|
||||
/* ETH_Speed */
|
||||
uint32_t ETH_Speed;
|
||||
rt_uint32_t ETH_Speed;
|
||||
/* ETH_Duplex_Mode */
|
||||
uint32_t ETH_Mode;
|
||||
rt_uint32_t ETH_Mode;
|
||||
};
|
||||
|
||||
static ETH_DMADescTypeDef *DMARxDscrTab, *DMATxDscrTab;
|
||||
@@ -167,8 +167,14 @@ static rt_err_t rt_stm32_eth_control(rt_device_t dev, int cmd, void *args)
|
||||
{
|
||||
case NIOCTL_GADDR:
|
||||
/* get mac address */
|
||||
if (args) rt_memcpy(args, stm32_eth_device.dev_addr, 6);
|
||||
else return -RT_ERROR;
|
||||
if (args)
|
||||
{
|
||||
SMEMCPY(args, stm32_eth_device.dev_addr, 6);
|
||||
}
|
||||
else
|
||||
{
|
||||
return -RT_ERROR;
|
||||
}
|
||||
break;
|
||||
|
||||
default :
|
||||
@@ -214,7 +220,7 @@ rt_err_t rt_stm32_eth_tx(rt_device_t dev, struct pbuf *p)
|
||||
while ((byteslefttocopy + bufferoffset) > ETH_TX_BUF_SIZE)
|
||||
{
|
||||
/* Copy data to Tx buffer*/
|
||||
memcpy((uint8_t *)((uint8_t *)buffer + bufferoffset), (uint8_t *)((uint8_t *)q->payload + payloadoffset), (ETH_TX_BUF_SIZE - bufferoffset));
|
||||
SMEMCPY((uint8_t *)((uint8_t *)buffer + bufferoffset), (uint8_t *)((uint8_t *)q->payload + payloadoffset), (ETH_TX_BUF_SIZE - bufferoffset));
|
||||
|
||||
/* Point to next descriptor */
|
||||
DmaTxDesc = (ETH_DMADescTypeDef *)(DmaTxDesc->Buffer2NextDescAddr);
|
||||
@@ -236,7 +242,7 @@ rt_err_t rt_stm32_eth_tx(rt_device_t dev, struct pbuf *p)
|
||||
}
|
||||
|
||||
/* Copy the remaining bytes */
|
||||
memcpy((uint8_t *)((uint8_t *)buffer + bufferoffset), (uint8_t *)((uint8_t *)q->payload + payloadoffset), byteslefttocopy);
|
||||
SMEMCPY((uint8_t *)((uint8_t *)buffer + bufferoffset), (uint8_t *)((uint8_t *)q->payload + payloadoffset), byteslefttocopy);
|
||||
bufferoffset = bufferoffset + byteslefttocopy;
|
||||
framelength = framelength + byteslefttocopy;
|
||||
}
|
||||
@@ -327,7 +333,7 @@ struct pbuf *rt_stm32_eth_rx(rt_device_t dev)
|
||||
while ((byteslefttocopy + bufferoffset) > ETH_RX_BUF_SIZE)
|
||||
{
|
||||
/* Copy data to pbuf */
|
||||
memcpy((uint8_t *)((uint8_t *)q->payload + payloadoffset), (uint8_t *)((uint8_t *)buffer + bufferoffset), (ETH_RX_BUF_SIZE - bufferoffset));
|
||||
SMEMCPY((uint8_t *)((uint8_t *)q->payload + payloadoffset), (uint8_t *)((uint8_t *)buffer + bufferoffset), (ETH_RX_BUF_SIZE - bufferoffset));
|
||||
|
||||
/* Point to next descriptor */
|
||||
dmarxdesc = (ETH_DMADescTypeDef *)(dmarxdesc->Buffer2NextDescAddr);
|
||||
@@ -338,7 +344,7 @@ struct pbuf *rt_stm32_eth_rx(rt_device_t dev)
|
||||
bufferoffset = 0;
|
||||
}
|
||||
/* Copy remaining data in pbuf */
|
||||
memcpy((uint8_t *)((uint8_t *)q->payload + payloadoffset), (uint8_t *)((uint8_t *)buffer + bufferoffset), byteslefttocopy);
|
||||
SMEMCPY((uint8_t *)((uint8_t *)q->payload + payloadoffset), (uint8_t *)((uint8_t *)buffer + bufferoffset), byteslefttocopy);
|
||||
bufferoffset = bufferoffset + byteslefttocopy;
|
||||
}
|
||||
}
|
||||
@@ -385,7 +391,9 @@ void HAL_ETH_RxCpltCallback(ETH_HandleTypeDef *heth)
|
||||
rt_err_t result;
|
||||
result = eth_device_ready(&(stm32_eth_device.parent));
|
||||
if (result != RT_EOK)
|
||||
{
|
||||
LOG_I("RxCpltCallback err = %d", result);
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_ETH_ErrorCallback(ETH_HandleTypeDef *heth)
|
||||
|
||||
@@ -28,13 +28,12 @@
|
||||
|
||||
/* The PHY ID one register */
|
||||
#define PHY_ID1_REG 0x02U
|
||||
|
||||
/* The PHY ID two register */
|
||||
#define PHY_ID2_REG 0x03U
|
||||
|
||||
/* The PHY auto-negotiate advertise register */
|
||||
#define PHY_AUTONEG_ADVERTISE_REG 0x04U
|
||||
|
||||
|
||||
#ifdef PHY_USING_LAN8720A
|
||||
/* The PHY interrupt source flag register. */
|
||||
#define PHY_INTERRUPT_FLAG_REG 0x1DU
|
||||
@@ -51,9 +50,8 @@
|
||||
#define PHY_Status_SPEED_10M(sr) ((sr) & PHY_10M_MASK)
|
||||
#define PHY_Status_SPEED_100M(sr) ((sr) & PHY_100M_MASK)
|
||||
#define PHY_Status_FULL_DUPLEX(sr) ((sr) & PHY_FULL_DUPLEX_MASK)
|
||||
#endif /* PHY_USING_LAN8720A */
|
||||
|
||||
#ifdef PHY_USING_DM9161CEP
|
||||
#elif defined(PHY_USING_DM9161CEP)
|
||||
#define PHY_Status_REG 0x11U
|
||||
#define PHY_10M_MASK ((1<<12) || (1<<13))
|
||||
#define PHY_100M_MASK ((1<<14) || (1<<15))
|
||||
@@ -69,9 +67,7 @@
|
||||
#define PHY_LINK_CHANGE_MASK (1<<9)
|
||||
#define PHY_INT_MASK 0
|
||||
|
||||
#endif /* PHY_USING_DM9161CEP */
|
||||
|
||||
#ifdef PHY_USING_DP83848C
|
||||
#elif defined(PHY_USING_DP83848C)
|
||||
#define PHY_Status_REG 0x10U
|
||||
#define PHY_10M_MASK (1<<1)
|
||||
#define PHY_FULL_DUPLEX_MASK (1<<2)
|
||||
@@ -87,6 +83,6 @@
|
||||
/* The PHY interrupt mask register. */
|
||||
#define PHY_INTERRUPT_MASK_REG 0x12U
|
||||
#define PHY_INT_MASK (1<<5)
|
||||
#endif /* PHY_USING_DP83848C */
|
||||
#endif
|
||||
|
||||
#endif /* __DRV_ETH_H__ */
|
||||
@@ -99,6 +99,9 @@ menu "Onboard Peripheral Drivers"
|
||||
select RT_USING_MTD_NOR
|
||||
select BSP_USING_SPI_FLASH
|
||||
select BSP_USING_FS
|
||||
select PKG_USING_FAL
|
||||
select FAL_USING_SFUD_PORT
|
||||
select PKG_USING_LITTLEFS
|
||||
select RT_USING_SYSTEM_WORKQUEUE
|
||||
default n
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
#include <dfs_romfs.h>
|
||||
#include <dfs_fs.h>
|
||||
#include <dfs_posix.h>
|
||||
#include <fal.h>
|
||||
|
||||
#if DFS_FILESYSTEMS_MAX < 4
|
||||
#error "Please define DFS_FILESYSTEMS_MAX more than 4"
|
||||
@@ -77,55 +76,34 @@ static int onboard_sdcard_mount(void)
|
||||
#endif
|
||||
|
||||
#ifdef BSP_USING_SPI_FLASH_LITTLEFS
|
||||
#include <fal.h>
|
||||
#define FS_PARTITION_NAME "spiflash0"
|
||||
|
||||
#define FS_PARTITION_NAME "filesystem"
|
||||
|
||||
static void spiflash_mount(void *parameter)
|
||||
static int onboard_spiflash_mount(void)
|
||||
{
|
||||
struct rt_device *mtd_dev = RT_NULL;
|
||||
|
||||
fal_init();
|
||||
mtd_dev = fal_mtd_nor_device_create(FS_PARTITION_NAME);
|
||||
if (!mtd_dev)
|
||||
{
|
||||
LOG_E("Can't create a mtd device on '%s' partition.", FS_PARTITION_NAME);
|
||||
}
|
||||
while (1)
|
||||
{
|
||||
rt_thread_mdelay(500);
|
||||
if(rt_device_find(FS_PARTITION_NAME) != RT_NULL)
|
||||
{
|
||||
if (dfs_mount(FS_PARTITION_NAME, "/flash", "lfs", 0, 0) == RT_EOK)
|
||||
{
|
||||
LOG_I("spi flash mount to '/flash'");
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_W("spi flash mount to '/flash' failed!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int onboard_spiflash_mount(void)
|
||||
{
|
||||
rt_thread_t tid;
|
||||
|
||||
if (dfs_mount(FS_PARTITION_NAME, "/flash", "lfs", 0, 0) == RT_EOK)
|
||||
if (dfs_mount(FS_PARTITION_NAME, "/spiflash", "lfs", 0, 0) == RT_EOK)
|
||||
{
|
||||
LOG_I("spi flash mount to '/flash'");
|
||||
LOG_I("spi flash mount to '/spiflash'");
|
||||
}
|
||||
else
|
||||
{
|
||||
tid = rt_thread_create("spiflash_mount", spiflash_mount, RT_NULL,
|
||||
1024, RT_THREAD_PRIORITY_MAX - 3, 20);
|
||||
if (tid != RT_NULL)
|
||||
dfs_mkfs("lfs", FS_PARTITION_NAME);
|
||||
if (dfs_mount(FS_PARTITION_NAME, "/spiflash", "lfs", 0, 0) == RT_EOK)
|
||||
{
|
||||
rt_thread_startup(tid);
|
||||
LOG_I("spi flash mount to '/spiflash'");
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_E("create spiflash_mount thread err!");
|
||||
LOG_E("spi flash failed to mount to '/spiflash'");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -133,7 +111,6 @@ static int onboard_spiflash_mount(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
static const struct romfs_dirent _romfs_root[] =
|
||||
{
|
||||
#ifdef BSP_USING_SDCARD
|
||||
@@ -141,7 +118,7 @@ static const struct romfs_dirent _romfs_root[] =
|
||||
#endif
|
||||
|
||||
#ifdef BSP_USING_SPI_FLASH_LITTLEFS
|
||||
{ROMFS_DIRENT_DIR, "flash", RT_NULL, 0},
|
||||
{ROMFS_DIRENT_DIR, "spiflash", RT_NULL, 0},
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ extern const struct fal_flash_dev stm32_onchip_flash_128k;
|
||||
#ifdef BSP_USING_SPI_FLASH_LITTLEFS
|
||||
#define FAL_PART_TABLE \
|
||||
{ \
|
||||
{FAL_PART_MAGIC_WROD, "filesystem",FAL_USING_NOR_FLASH_DEV_NAME, 0 , 16 * 1024 * 1024, 0}, \
|
||||
{FAL_PART_MAGIC_WROD, "spiflash0", FAL_USING_NOR_FLASH_DEV_NAME, 0 , 16 * 1024 * 1024, 0}, \
|
||||
}
|
||||
#else
|
||||
#define FAL_PART_TABLE \
|
||||
|
||||
@@ -222,6 +222,13 @@
|
||||
#define LWIP_DBG_TYPES_ON (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH|LWIP_DBG_HALT)
|
||||
|
||||
/* ---------- Memory options ---------- */
|
||||
#ifdef RT_USING_ASM_MEMCPY
|
||||
#define MEMCPY(dst,src,len) rt_memcpy(dst,src,len)
|
||||
#else
|
||||
#define MEMCPY(dst,src,len) memcpy(dst,src,len)
|
||||
#endif /* RT_USING_ASM_MEMCPY */
|
||||
#define SMEMCPY(dst,src,len) MEMCPY(dst,src,len)
|
||||
|
||||
#define MEM_ALIGNMENT 4
|
||||
|
||||
#define MEM_LIBC_MALLOC 1
|
||||
|
||||
@@ -201,14 +201,14 @@ int lwip_netdev_ping(struct netdev *netif, const char *host, size_t data_len,
|
||||
{
|
||||
return -RT_ERROR;
|
||||
}
|
||||
rt_memcpy(&h, &res->ai_addr, sizeof(struct sockaddr_in *));
|
||||
rt_memcpy(&ina, &h->sin_addr, sizeof(ina));
|
||||
SMEMCPY(&h, &res->ai_addr, sizeof(struct sockaddr_in *));
|
||||
SMEMCPY(&ina, &h->sin_addr, sizeof(ina));
|
||||
lwip_freeaddrinfo(res);
|
||||
if (inet_aton(inet_ntoa(ina), &target_addr) == 0)
|
||||
{
|
||||
return -RT_ERROR;
|
||||
}
|
||||
rt_memcpy(&(ping_resp->ip_addr), &target_addr, sizeof(ip_addr_t));
|
||||
SMEMCPY(&(ping_resp->ip_addr), &target_addr, sizeof(ip_addr_t));
|
||||
|
||||
/* new a socket */
|
||||
if ((s = lwip_socket(AF_INET, SOCK_RAW, IP_PROTO_ICMP)) < 0)
|
||||
@@ -331,7 +331,7 @@ static int netdev_add(struct netif *lwip_netif)
|
||||
netdev->mtu = lwip_netif->mtu;
|
||||
netdev->ops = &lwip_netdev_ops;
|
||||
netdev->hwaddr_len = lwip_netif->hwaddr_len;
|
||||
rt_memcpy(netdev->hwaddr, lwip_netif->hwaddr, lwip_netif->hwaddr_len);
|
||||
SMEMCPY(netdev->hwaddr, lwip_netif->hwaddr, lwip_netif->hwaddr_len);
|
||||
netdev->ip_addr = lwip_netif->ip_addr;
|
||||
netdev->gw = lwip_netif->gw;
|
||||
netdev->netmask = lwip_netif->netmask;
|
||||
|
||||
@@ -230,14 +230,21 @@
|
||||
#define LWIP_DBG_TYPES_ON (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH|LWIP_DBG_HALT)
|
||||
|
||||
/* ---------- Memory options ---------- */
|
||||
#ifdef RT_USING_ASM_MEMCPY
|
||||
#define MEMCPY(dst,src,len) rt_memcpy(dst,src,len)
|
||||
#else
|
||||
#define MEMCPY(dst,src,len) memcpy(dst,src,len)
|
||||
#endif /* RT_USING_ASM_MEMCPY */
|
||||
#define SMEMCPY(dst,src,len) MEMCPY(dst,src,len)
|
||||
|
||||
#ifdef RT_LWIP_MEM_ALIGNMENT
|
||||
#define MEM_ALIGNMENT RT_LWIP_MEM_ALIGNMENT
|
||||
#else
|
||||
#define MEM_ALIGNMENT 4
|
||||
#endif
|
||||
|
||||
#define MEMP_OVERFLOW_CHECK 1 ////
|
||||
#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 1 ////
|
||||
#define MEMP_OVERFLOW_CHECK 1
|
||||
#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 1
|
||||
//#define MEM_LIBC_MALLOC 1
|
||||
//#define MEM_USE_POOLS 1
|
||||
//#define MEMP_USE_CUSTOM_POOLS 1
|
||||
|
||||
@@ -210,14 +210,14 @@ int lwip_netdev_ping(struct netdev *netif, const char *host, size_t data_len,
|
||||
{
|
||||
return -RT_ERROR;
|
||||
}
|
||||
rt_memcpy(&h, &res->ai_addr, sizeof(struct sockaddr_in *));
|
||||
rt_memcpy(&ina, &h->sin_addr, sizeof(ina));
|
||||
SMEMCPY(&h, &res->ai_addr, sizeof(struct sockaddr_in *));
|
||||
SMEMCPY(&ina, &h->sin_addr, sizeof(ina));
|
||||
lwip_freeaddrinfo(res);
|
||||
if (inet_aton(inet_ntoa(ina), &target_addr) == 0)
|
||||
{
|
||||
return -RT_ERROR;
|
||||
}
|
||||
rt_memcpy(&(ping_resp->ip_addr), &target_addr, sizeof(ip_addr_t));
|
||||
SMEMCPY(&(ping_resp->ip_addr), &target_addr, sizeof(ip_addr_t));
|
||||
|
||||
/* new a socket */
|
||||
if ((s = lwip_socket(AF_INET, SOCK_RAW, IP_PROTO_ICMP)) < 0)
|
||||
@@ -340,7 +340,7 @@ static int netdev_add(struct netif *lwip_netif)
|
||||
netdev->mtu = lwip_netif->mtu;
|
||||
netdev->ops = &lwip_netdev_ops;
|
||||
netdev->hwaddr_len = lwip_netif->hwaddr_len;
|
||||
rt_memcpy(netdev->hwaddr, lwip_netif->hwaddr, lwip_netif->hwaddr_len);
|
||||
SMEMCPY(netdev->hwaddr, lwip_netif->hwaddr, lwip_netif->hwaddr_len);
|
||||
netdev->ip_addr = lwip_netif->ip_addr;
|
||||
netdev->gw = lwip_netif->gw;
|
||||
netdev->netmask = lwip_netif->netmask;
|
||||
|
||||
@@ -230,14 +230,21 @@
|
||||
#define LWIP_DBG_TYPES_ON (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH|LWIP_DBG_HALT)
|
||||
|
||||
/* ---------- Memory options ---------- */
|
||||
#ifdef RT_USING_ASM_MEMCPY
|
||||
#define MEMCPY(dst,src,len) rt_memcpy(dst,src,len)
|
||||
#else
|
||||
#define MEMCPY(dst,src,len) memcpy(dst,src,len)
|
||||
#endif /* RT_USING_ASM_MEMCPY */
|
||||
#define SMEMCPY(dst,src,len) MEMCPY(dst,src,len)
|
||||
|
||||
#ifdef RT_LWIP_MEM_ALIGNMENT
|
||||
#define MEM_ALIGNMENT RT_LWIP_MEM_ALIGNMENT
|
||||
#else
|
||||
#define MEM_ALIGNMENT 4
|
||||
#endif
|
||||
|
||||
#define MEMP_OVERFLOW_CHECK 1 ////
|
||||
#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 1 ////
|
||||
#define MEMP_OVERFLOW_CHECK 1
|
||||
#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 1
|
||||
//#define MEM_LIBC_MALLOC 1
|
||||
//#define MEM_USE_POOLS 1
|
||||
//#define MEMP_USE_CUSTOM_POOLS 1
|
||||
|
||||
@@ -210,14 +210,14 @@ int lwip_netdev_ping(struct netdev *netif, const char *host, size_t data_len,
|
||||
{
|
||||
return -RT_ERROR;
|
||||
}
|
||||
rt_memcpy(&h, &res->ai_addr, sizeof(struct sockaddr_in *));
|
||||
rt_memcpy(&ina, &h->sin_addr, sizeof(ina));
|
||||
SMEMCPY(&h, &res->ai_addr, sizeof(struct sockaddr_in *));
|
||||
SMEMCPY(&ina, &h->sin_addr, sizeof(ina));
|
||||
lwip_freeaddrinfo(res);
|
||||
if (inet_aton(inet_ntoa(ina), &target_addr) == 0)
|
||||
{
|
||||
return -RT_ERROR;
|
||||
}
|
||||
rt_memcpy(&(ping_resp->ip_addr), &target_addr, sizeof(ip_addr_t));
|
||||
SMEMCPY(&(ping_resp->ip_addr), &target_addr, sizeof(ip_addr_t));
|
||||
|
||||
/* new a socket */
|
||||
if ((s = lwip_socket(AF_INET, SOCK_RAW, IP_PROTO_ICMP)) < 0)
|
||||
@@ -340,7 +340,7 @@ static int netdev_add(struct netif *lwip_netif)
|
||||
netdev->mtu = lwip_netif->mtu;
|
||||
netdev->ops = &lwip_netdev_ops;
|
||||
netdev->hwaddr_len = lwip_netif->hwaddr_len;
|
||||
rt_memcpy(netdev->hwaddr, lwip_netif->hwaddr, lwip_netif->hwaddr_len);
|
||||
SMEMCPY(netdev->hwaddr, lwip_netif->hwaddr, lwip_netif->hwaddr_len);
|
||||
netdev->ip_addr = lwip_netif->ip_addr;
|
||||
netdev->gw = lwip_netif->gw;
|
||||
netdev->netmask = lwip_netif->netmask;
|
||||
|
||||
@@ -242,9 +242,16 @@
|
||||
#endif
|
||||
|
||||
/* ---------- Memory options ---------- */
|
||||
#ifdef RT_USING_ASM_MEMCPY
|
||||
#define MEMCPY(dst,src,len) rt_memcpy(dst,src,len)
|
||||
#else
|
||||
#define MEMCPY(dst,src,len) memcpy(dst,src,len)
|
||||
#endif /* RT_USING_ASM_MEMCPY */
|
||||
#define SMEMCPY(dst,src,len) MEMCPY(dst,src,len)
|
||||
|
||||
#define MEM_ALIGNMENT 4
|
||||
#define MEMP_OVERFLOW_CHECK 1 ////
|
||||
#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 1 ////
|
||||
#define MEMP_OVERFLOW_CHECK 1
|
||||
#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 1
|
||||
//#define MEM_LIBC_MALLOC 1
|
||||
//#define MEM_USE_POOLS 1
|
||||
//#define MEMP_USE_CUSTOM_POOLS 1
|
||||
|
||||
@@ -208,14 +208,14 @@ int lwip_netdev_ping(struct netdev *netif, const char *host, size_t data_len,
|
||||
{
|
||||
return -RT_ERROR;
|
||||
}
|
||||
rt_memcpy(&h, &res->ai_addr, sizeof(struct sockaddr_in *));
|
||||
rt_memcpy(&ina, &h->sin_addr, sizeof(ina));
|
||||
SMEMCPY(&h, &res->ai_addr, sizeof(struct sockaddr_in *));
|
||||
SMEMCPY(&ina, &h->sin_addr, sizeof(ina));
|
||||
lwip_freeaddrinfo(res);
|
||||
if (inet_aton(inet_ntoa(ina), &target_addr) == 0)
|
||||
{
|
||||
return -RT_ERROR;
|
||||
}
|
||||
rt_memcpy(&(ping_resp->ip_addr), &target_addr, sizeof(ip_addr_t));
|
||||
SMEMCPY(&(ping_resp->ip_addr), &target_addr, sizeof(ip_addr_t));
|
||||
|
||||
/* new a socket */
|
||||
if ((s = lwip_socket(AF_INET, SOCK_RAW, IP_PROTO_ICMP)) < 0)
|
||||
@@ -338,7 +338,7 @@ static int netdev_add(struct netif *lwip_netif)
|
||||
netdev->mtu = lwip_netif->mtu;
|
||||
netdev->ops = &lwip_netdev_ops;
|
||||
netdev->hwaddr_len = lwip_netif->hwaddr_len;
|
||||
rt_memcpy(netdev->hwaddr, lwip_netif->hwaddr, lwip_netif->hwaddr_len);
|
||||
SMEMCPY(netdev->hwaddr, lwip_netif->hwaddr, lwip_netif->hwaddr_len);
|
||||
netdev->ip_addr = lwip_netif->ip_addr;
|
||||
netdev->gw = lwip_netif->gw;
|
||||
netdev->netmask = lwip_netif->netmask;
|
||||
|
||||
@@ -131,6 +131,10 @@ config RT_KSERVICE_USING_TINY_SIZE
|
||||
bool "Enable kservice to use tiny size"
|
||||
default n
|
||||
|
||||
config RT_USING_ASM_MEMCPY
|
||||
bool
|
||||
default n
|
||||
|
||||
endmenu
|
||||
|
||||
menuconfig RT_DEBUG
|
||||
|
||||
+2
-2
@@ -139,7 +139,7 @@ rt_err_t rt_thread_idle_delhook(void (*hook)(void))
|
||||
|
||||
#ifdef RT_USING_MODULE
|
||||
/* Return whether there is defunctional thread to be deleted. */
|
||||
rt_inline int _has_defunct_thread(void)
|
||||
rt_inline int _idle_has_defunct_thread(void)
|
||||
{
|
||||
/* The rt_list_isempty has prototype of "int rt_list_isempty(const rt_list_t *l)".
|
||||
* So the compiler has a good reason that the _rt_thread_defunct list does
|
||||
@@ -207,7 +207,7 @@ static void rt_defunct_execute(void)
|
||||
|
||||
#ifdef RT_USING_MODULE
|
||||
/* check whether list is empty */
|
||||
if (!_has_defunct_thread())
|
||||
if (!_idle_has_defunct_thread())
|
||||
{
|
||||
rt_hw_interrupt_enable(lock);
|
||||
break;
|
||||
|
||||
+3
-1
@@ -198,6 +198,7 @@ RT_WEAK void *rt_memset(void *s, int c, rt_ubase_t count)
|
||||
}
|
||||
RTM_EXPORT(rt_memset);
|
||||
|
||||
#ifndef RT_USING_ASM_MEMCPY
|
||||
/**
|
||||
* This function will copy memory content from source address to destination
|
||||
* address.
|
||||
@@ -208,7 +209,7 @@ RTM_EXPORT(rt_memset);
|
||||
*
|
||||
* @return the address of destination memory
|
||||
*/
|
||||
RT_WEAK void *rt_memcpy(void *dst, const void *src, rt_ubase_t count)
|
||||
void *rt_memcpy(void *dst, const void *src, rt_ubase_t count)
|
||||
{
|
||||
#ifdef RT_KSERVICE_USING_TINY_SIZE
|
||||
char *tmp = (char *)dst, *s = (char *)src;
|
||||
@@ -280,6 +281,7 @@ RT_WEAK void *rt_memcpy(void *dst, const void *src, rt_ubase_t count)
|
||||
#endif /* RT_KSERVICE_USING_TINY_SIZE */
|
||||
}
|
||||
RTM_EXPORT(rt_memcpy);
|
||||
#endif /* RT_USING_ASM_MEMCPY */
|
||||
|
||||
#ifndef RT_KSERVICE_USING_STDLIB
|
||||
|
||||
|
||||
+7
-7
@@ -23,7 +23,7 @@
|
||||
* 2013-12-21 Grissiom add rt_critical_level
|
||||
* 2018-11-22 Jesven remove the current task from ready queue
|
||||
* add per cpu ready queue
|
||||
* add _get_highest_priority_thread to find highest priority task
|
||||
* add _scheduler_get_highest_priority_thread to find highest priority task
|
||||
* rt_schedule_insert_thread won't insert current task to ready queue
|
||||
* in smp version, rt_hw_context_switch_interrupt maybe switch to
|
||||
* new task directly
|
||||
@@ -119,7 +119,7 @@ static void _rt_scheduler_stack_check(struct rt_thread *thread)
|
||||
* get the highest priority thread in ready queue
|
||||
*/
|
||||
#ifdef RT_USING_SMP
|
||||
static struct rt_thread* _get_highest_priority_thread(rt_ubase_t *highest_prio)
|
||||
static struct rt_thread* _scheduler_get_highest_priority_thread(rt_ubase_t *highest_prio)
|
||||
{
|
||||
register struct rt_thread *highest_priority_thread;
|
||||
register rt_ubase_t highest_ready_priority, local_highest_ready_priority;
|
||||
@@ -155,7 +155,7 @@ static struct rt_thread* _get_highest_priority_thread(rt_ubase_t *highest_prio)
|
||||
return highest_priority_thread;
|
||||
}
|
||||
#else
|
||||
static struct rt_thread* _get_highest_priority_thread(rt_ubase_t *highest_prio)
|
||||
static struct rt_thread* _scheduler_get_highest_priority_thread(rt_ubase_t *highest_prio)
|
||||
{
|
||||
register struct rt_thread *highest_priority_thread;
|
||||
register rt_ubase_t highest_ready_priority;
|
||||
@@ -241,7 +241,7 @@ void rt_system_scheduler_start(void)
|
||||
register struct rt_thread *to_thread;
|
||||
rt_ubase_t highest_ready_priority;
|
||||
|
||||
to_thread = _get_highest_priority_thread(&highest_ready_priority);
|
||||
to_thread = _scheduler_get_highest_priority_thread(&highest_ready_priority);
|
||||
|
||||
#ifdef RT_USING_SMP
|
||||
to_thread->oncpu = rt_hw_cpu_id();
|
||||
@@ -329,7 +329,7 @@ void rt_schedule(void)
|
||||
|
||||
if (rt_thread_ready_priority_group != 0 || pcpu->priority_group != 0)
|
||||
{
|
||||
to_thread = _get_highest_priority_thread(&highest_ready_priority);
|
||||
to_thread = _scheduler_get_highest_priority_thread(&highest_ready_priority);
|
||||
current_thread->oncpu = RT_CPU_DETACHED;
|
||||
if ((current_thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_RUNNING)
|
||||
{
|
||||
@@ -429,7 +429,7 @@ void rt_schedule(void)
|
||||
/* need_insert_from_thread: need to insert from_thread to ready queue */
|
||||
int need_insert_from_thread = 0;
|
||||
|
||||
to_thread = _get_highest_priority_thread(&highest_ready_priority);
|
||||
to_thread = _scheduler_get_highest_priority_thread(&highest_ready_priority);
|
||||
|
||||
if ((rt_current_thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_RUNNING)
|
||||
{
|
||||
@@ -582,7 +582,7 @@ void rt_scheduler_do_irq_switch(void *context)
|
||||
|
||||
if (rt_thread_ready_priority_group != 0 || pcpu->priority_group != 0)
|
||||
{
|
||||
to_thread = _get_highest_priority_thread(&highest_ready_priority);
|
||||
to_thread = _scheduler_get_highest_priority_thread(&highest_ready_priority);
|
||||
current_thread->oncpu = RT_CPU_DETACHED;
|
||||
if ((current_thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_RUNNING)
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user