optim sys
This commit is contained in:
@@ -8,18 +8,18 @@ if (${CONFIG_ARCH} STREQUAL "cortex-m3" OR
|
||||
# -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
|
||||
-fPIC -fPIE -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
|
||||
-z max-page-size=0x4 -z common-page-size=0x4 \
|
||||
\
|
||||
" )
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
|
||||
-fPIC -fPIE -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
|
||||
-z max-page-size=0x4 -z common-page-size=0x \
|
||||
\
|
||||
" )
|
||||
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} \
|
||||
-fPIC -fPIE -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
|
||||
-z max-page-size=0x4 -z common-page-size=0x4 \
|
||||
\
|
||||
" )
|
||||
#-Ttext-segment=0x0
|
||||
set(CORTEX_M_LINK_FLAGS "-pie -z max-page-size=0x4 -z common-page-size=0x4 ")
|
||||
#-Ttext-segment=0x0 -z max-page-size=0x4 -z common-page-size=0x4
|
||||
set(CORTEX_M_LINK_FLAGS "-pie ")
|
||||
set(LIBC_NAME "muslc")
|
||||
set(ARCH_NAME "armv7_8m")
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.13)
|
||||
if (${ARCH_NAME} STREQUAL "armv7_8m")
|
||||
# add_subdirectory(modbus)
|
||||
add_subdirectory(mlibc)
|
||||
add_subdirectory(mlibc_shared)
|
||||
# add_subdirectory(mlibc_shared)
|
||||
add_subdirectory(mr)
|
||||
# add_subdirectory(at_device)
|
||||
elseif(${CONFIG_ARCH} STREQUAL "aarch64")
|
||||
|
||||
@@ -1461,7 +1461,7 @@ void shellExec(Shell *shell)
|
||||
params_len += strlen(shell->parser.param[i]) + 1;
|
||||
}
|
||||
//!< 内建命令中未找到,则执行应用
|
||||
if (pm_run_app(shell->parser.param[0], 0/*PM_APP_BG_RUN*/, params, params_len) < 0)
|
||||
if (pm_run_app(shell->parser.param[0], PM_APP_BG_RUN/*PM_APP_BG_RUN*/, params, params_len) < 0)
|
||||
{
|
||||
shellWriteString(shell, shellText[SHELL_TEXT_CMD_NOT_FOUND]);
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ file(GLOB
|
||||
|
||||
${CMAKE_CURRENT_LIST_DIR}/src/apps/lwiperf/lwiperf.c
|
||||
)
|
||||
message("lwip:${deps}")
|
||||
# message("lwip:${deps}")
|
||||
add_library(
|
||||
lwip
|
||||
${deps}
|
||||
|
||||
@@ -65,8 +65,12 @@ extern "C" {
|
||||
/* If your port already typedef's sa_family_t, define SA_FAMILY_T_DEFINED
|
||||
to prevent this code from redefining it. */
|
||||
#if !defined(sa_family_t) && !defined(SA_FAMILY_T_DEFINED)
|
||||
#ifdef MKRTOS
|
||||
typedef u16_t sa_family_t;
|
||||
#else
|
||||
typedef u8_t sa_family_t;
|
||||
#endif
|
||||
#endif
|
||||
/* If your port already typedef's in_port_t, define IN_PORT_T_DEFINED
|
||||
to prevent this code from redefining it. */
|
||||
#if !defined(in_port_t) && !defined(IN_PORT_T_DEFINED)
|
||||
@@ -334,6 +338,9 @@ typedef struct ip_mreq {
|
||||
#if LWIP_IPV4
|
||||
struct in_pktinfo {
|
||||
unsigned int ipi_ifindex; /* Interface index */
|
||||
#ifdef MKRTOS
|
||||
struct in_addr ipi_spec_dst;
|
||||
#endif
|
||||
struct in_addr ipi_addr; /* Destination (from header) address */
|
||||
};
|
||||
#endif /* LWIP_IPV4 */
|
||||
|
||||
@@ -14,6 +14,9 @@ typedef uint32_t in_addr_t;
|
||||
struct in_addr { in_addr_t s_addr; };
|
||||
|
||||
struct sockaddr_in {
|
||||
#ifdef MKRTOS
|
||||
uint8_t sin_len;
|
||||
#endif
|
||||
sa_family_t sin_family;
|
||||
in_port_t sin_port;
|
||||
struct in_addr sin_addr;
|
||||
|
||||
@@ -80,6 +80,7 @@ extern "C" {
|
||||
#include <u_types.h>
|
||||
|
||||
obj_handler_t pthread_hd_get(pthread_t th);
|
||||
size_t pthread_struct_size(void);
|
||||
int pthread_create(pthread_t *__restrict, const pthread_attr_t *__restrict, void *(*)(void *), void *__restrict);
|
||||
int pthread_detach(pthread_t);
|
||||
_Noreturn void pthread_exit(void *);
|
||||
|
||||
@@ -367,11 +367,17 @@ struct linger {
|
||||
#define SCM_CREDENTIALS 0x02
|
||||
|
||||
struct sockaddr {
|
||||
#ifdef MKRTOS
|
||||
unsigned char sa_len;
|
||||
#endif
|
||||
sa_family_t sa_family;
|
||||
char sa_data[14];
|
||||
};
|
||||
|
||||
struct sockaddr_storage {
|
||||
#ifdef MKRTOS
|
||||
unsigned char sa_len;
|
||||
#endif
|
||||
sa_family_t ss_family;
|
||||
char __ss_padding[128-sizeof(long)-sizeof(sa_family_t)];
|
||||
unsigned long __ss_align;
|
||||
|
||||
@@ -5,3 +5,8 @@ obj_handler_t pthread_hd_get(pthread_t th)
|
||||
{
|
||||
return th->hd;
|
||||
}
|
||||
|
||||
size_t pthread_struct_size(void)
|
||||
{
|
||||
return sizeof(struct pthread);
|
||||
}
|
||||
@@ -47,7 +47,7 @@ int net_accept(sd_t s, struct sockaddr *addr, socklen_t *addrlen)
|
||||
obj_handler_t hd = mk_sd_init_raw(s).hd;
|
||||
int fd = mk_sd_init_raw(s).fd;
|
||||
rpc_int_t rpc_s = {
|
||||
.data = s,
|
||||
.data = fd,
|
||||
};
|
||||
rpc_socketaddr_t_t rpc_addr = {
|
||||
.data = *addr,
|
||||
@@ -80,7 +80,7 @@ int net_bind(int s, const struct sockaddr *name, socklen_t namelen)
|
||||
obj_handler_t hd = mk_sd_init_raw(s).hd;
|
||||
int fd = mk_sd_init_raw(s).fd;
|
||||
rpc_int_t rpc_s = {
|
||||
.data = s,
|
||||
.data = fd,
|
||||
};
|
||||
rpc_socketaddr_t_t rpc_addr = {
|
||||
.data = *name,
|
||||
@@ -101,7 +101,7 @@ int net_shutdown(int s, int how)
|
||||
obj_handler_t hd = mk_sd_init_raw(s).hd;
|
||||
int fd = mk_sd_init_raw(s).fd;
|
||||
rpc_int_t rpc_s = {
|
||||
.data = s,
|
||||
.data = fd,
|
||||
};
|
||||
rpc_int_t rpc_how = {
|
||||
.data = how,
|
||||
@@ -128,7 +128,7 @@ int net_getpeername(int s, struct sockaddr *name, socklen_t *namelen)
|
||||
obj_handler_t hd = mk_sd_init_raw(s).hd;
|
||||
int fd = mk_sd_init_raw(s).fd;
|
||||
rpc_int_t rpc_s = {
|
||||
.data = s,
|
||||
.data = fd,
|
||||
};
|
||||
rpc_socketaddr_t_t rpc_name = {
|
||||
.data = *name,
|
||||
@@ -164,7 +164,7 @@ int net_getsockname(int s, struct sockaddr *name, socklen_t *namelen)
|
||||
obj_handler_t hd = mk_sd_init_raw(s).hd;
|
||||
int fd = mk_sd_init_raw(s).fd;
|
||||
rpc_int_t rpc_s = {
|
||||
.data = s,
|
||||
.data = fd,
|
||||
};
|
||||
rpc_socketaddr_t_t rpc_name = {
|
||||
.data = *name,
|
||||
@@ -203,7 +203,7 @@ int net_getsockopt(int s, int level, int optname, void *optval, socklen_t *optle
|
||||
int fd = mk_sd_init_raw(s).fd;
|
||||
|
||||
rpc_int_t rpc_s = {
|
||||
.data = s,
|
||||
.data = fd,
|
||||
};
|
||||
rpc_int_t rpc_level = {
|
||||
.data = level,
|
||||
@@ -245,7 +245,7 @@ int net_setsockopt(int s, int level, int optname, const void *optval, socklen_t
|
||||
int fd = mk_sd_init_raw(s).fd;
|
||||
|
||||
rpc_int_t rpc_s = {
|
||||
.data = s,
|
||||
.data = fd,
|
||||
};
|
||||
rpc_int_t rpc_level = {
|
||||
.data = level,
|
||||
@@ -282,7 +282,7 @@ int net_connect(int s, const struct sockaddr *name, socklen_t namelen)
|
||||
obj_handler_t hd = mk_sd_init_raw(s).hd;
|
||||
int fd = mk_sd_init_raw(s).fd;
|
||||
rpc_int_t rpc_s = {
|
||||
.data = s,
|
||||
.data = fd,
|
||||
};
|
||||
rpc_socketaddr_t_t rpc_name = {
|
||||
.data = *name,
|
||||
@@ -303,7 +303,7 @@ int net_listen(int s, int backlog)
|
||||
obj_handler_t hd = mk_sd_init_raw(s).hd;
|
||||
int fd = mk_sd_init_raw(s).fd;
|
||||
rpc_int_t rpc_s = {
|
||||
.data = s,
|
||||
.data = fd,
|
||||
};
|
||||
rpc_int_t rpc_backlog = {
|
||||
.data = backlog,
|
||||
@@ -328,7 +328,7 @@ int net_recv(int s, void *mem, size_t len, int flags)
|
||||
int fd = mk_sd_init_raw(s).fd;
|
||||
|
||||
rpc_int_t rpc_s = {
|
||||
.data = s,
|
||||
.data = fd,
|
||||
};
|
||||
|
||||
rpc_int_t rpc_flags = {
|
||||
@@ -383,7 +383,7 @@ int net_recvfrom(int s, void *mem, size_t len, int flags,
|
||||
int fd = mk_sd_init_raw(s).fd;
|
||||
|
||||
rpc_int_t rpc_s = {
|
||||
.data = s,
|
||||
.data = fd,
|
||||
};
|
||||
|
||||
rpc_int_t rpc_flags = {
|
||||
@@ -442,7 +442,7 @@ int net_send(int s, const void *dataptr, size_t size, int flags)
|
||||
int fd = mk_sd_init_raw(s).fd;
|
||||
|
||||
rpc_int_t rpc_s = {
|
||||
.data = s,
|
||||
.data = fd,
|
||||
};
|
||||
|
||||
rpc_int_t rpc_flags = {
|
||||
@@ -498,7 +498,7 @@ int net_sendto(int s, const void *dataptr, size_t size, int flags,
|
||||
int fd = mk_sd_init_raw(s).fd;
|
||||
|
||||
rpc_int_t rpc_s = {
|
||||
.data = s,
|
||||
.data = fd,
|
||||
};
|
||||
|
||||
rpc_int_t rpc_flags = {
|
||||
@@ -573,5 +573,9 @@ int net_socket(int domain, int type, int protocol)
|
||||
msg_tag_t tag;
|
||||
|
||||
tag = net_t_socket_call(hd, &rpc_domain, &rpc_type, &rpc_protocol);
|
||||
return msg_tag_get_val(tag);
|
||||
if (msg_tag_get_val(tag) < 0)
|
||||
{
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
return mk_sd_init2(hd, msg_tag_get_val(tag)).raw;
|
||||
}
|
||||
@@ -19,7 +19,7 @@ static ATTR_ALIGN(8) uint8_t com_stack[FAST_IPC_MAIN_STACK_SIZE];
|
||||
static uint8_t cons_msg_buf_main[MSG_BUG_LEN + CONFIG_THREAD_MAP_BUF_LEN * WORD_BYTES];
|
||||
static umword_t *cons_map_buf = (umword_t *)(cons_msg_buf_main + MSG_BUG_LEN);
|
||||
static volatile umword_t cons_stack_bitmap;
|
||||
|
||||
static uint8_t fake_pthread[256/*FIXME:*/];
|
||||
static int stack_array_nr;
|
||||
static size_t stack_item_size;
|
||||
static uint8_t *cons_stack;
|
||||
@@ -131,6 +131,7 @@ int u_fast_ipc_init(uint8_t *stack_array, uint8_t *msg_buf_array, int stack_msgb
|
||||
cons_map_buf[i] = vpage_create_raw3(0, 0, handler_alloc()).raw;
|
||||
msg->map_buf[i] = cons_map_buf[i];
|
||||
}
|
||||
msg->user[0] = (umword_t)((char *)fake_pthread + sizeof(fake_pthread));
|
||||
|
||||
tag = task_set_com_point(TASK_THIS, &fast_ipc_com_point, (addr_t)com_stack,
|
||||
sizeof(com_stack), (void *)(&cons_stack_bitmap),
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
|
||||
add_subdirectory(cpiofs)
|
||||
add_subdirectory(fatfs)
|
||||
# add_subdirectory(cpiofs)
|
||||
# add_subdirectory(fatfs)
|
||||
add_subdirectory(appfs)
|
||||
# add_subdirectory(lxext4)
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 ")
|
||||
|
||||
#appfs lib
|
||||
file(GLOB appfs_src src/appfs.c src/appfs_open.c)
|
||||
add_library(
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "appfs.h"
|
||||
#include "hw_block_sim.h"
|
||||
#include "libgen.h"
|
||||
#include "test.h"
|
||||
#include <dirent.h>
|
||||
#include <errno.h>
|
||||
@@ -15,6 +16,51 @@ static fs_info_t fs;
|
||||
static char *pack_path;
|
||||
static char *output_path;
|
||||
|
||||
// 比较函数,用于 qsort 排序
|
||||
int compare(const void *a, const void *b)
|
||||
{
|
||||
return strcmp(*(const char **)a, *(const char **)b);
|
||||
}
|
||||
static char **file_get_all_sort(const char *file_path, int *ret_size)
|
||||
{
|
||||
DIR *dir;
|
||||
struct dirent *entry;
|
||||
char **filenames = NULL;
|
||||
int count = 0;
|
||||
|
||||
assert(ret_size);
|
||||
// 打开目录
|
||||
dir = opendir(file_path);
|
||||
if (dir == NULL)
|
||||
{
|
||||
perror("opendir");
|
||||
exit(EXIT_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// 读取目录中的文件
|
||||
while ((entry = readdir(dir)) != NULL)
|
||||
{
|
||||
if (entry->d_type == DT_REG)
|
||||
{ // 只处理普通文件
|
||||
char full_path[1024];
|
||||
snprintf(full_path, sizeof(full_path), "%s/%s", file_path, entry->d_name);
|
||||
filenames = realloc(filenames, (count + 1) * sizeof(char *));
|
||||
filenames[count] = strdup(full_path);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
// 关闭目录
|
||||
closedir(dir);
|
||||
|
||||
// 对文件名进行排序
|
||||
qsort(filenames, count, sizeof(char *), compare);
|
||||
|
||||
*ret_size = count;
|
||||
return filenames;
|
||||
}
|
||||
|
||||
static int read_file_all(const char *file_path, void **ret_ptr)
|
||||
{
|
||||
FILE *file = fopen(file_path, "rb"); // 以二进制模式打开文件
|
||||
@@ -61,57 +107,43 @@ static int read_file_all(const char *file_path, void **ret_ptr)
|
||||
|
||||
int read_files_and_write_appfs(const char *path)
|
||||
{
|
||||
DIR *dir;
|
||||
struct dirent *entry;
|
||||
struct stat info;
|
||||
int ret;
|
||||
long total_size = 0;
|
||||
int files_count;
|
||||
char **files = file_get_all_sort(path, &files_count);
|
||||
|
||||
// 打开目录
|
||||
dir = opendir(path);
|
||||
if (dir == NULL)
|
||||
if (files == NULL)
|
||||
{
|
||||
perror("opendir");
|
||||
return errno;
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
// 读取目录中的每一个条目
|
||||
while ((entry = readdir(dir)) != NULL)
|
||||
for (int i = 0; i < files_count; i++)
|
||||
{
|
||||
// 忽略"."和".."目录
|
||||
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// 构建完整的文件路径
|
||||
char full_path[1024];
|
||||
snprintf(full_path, sizeof(full_path), "%s/%s", path, entry->d_name);
|
||||
|
||||
// 获取文件信息
|
||||
if (stat(full_path, &info) != 0)
|
||||
if (stat(files[i], &info) != 0)
|
||||
{
|
||||
printf("pack fail:%s\n", full_path);
|
||||
printf("pack fail:%s\n", files[i]);
|
||||
continue;
|
||||
}
|
||||
char *file_name = basename(files[i]);
|
||||
|
||||
if (S_ISREG(info.st_mode))
|
||||
{
|
||||
printf("%s %fMB\n", full_path, (float)info.st_size / 1024.0f / 1024.0f);
|
||||
ret = appfs_create_file(&fs, entry->d_name, info.st_size);
|
||||
printf("%s %fMB\n", files[i], (float)info.st_size / 1024.0f / 1024.0f);
|
||||
ret = appfs_create_file(&fs, file_name, info.st_size);
|
||||
if (ret < 0)
|
||||
{
|
||||
printf("create file error.\n");
|
||||
return -1;
|
||||
}
|
||||
void *file_ptr;
|
||||
ret = read_file_all(full_path, &file_ptr);
|
||||
ret = read_file_all(files[i], &file_ptr);
|
||||
if (ret < 0)
|
||||
{
|
||||
printf("read file error.\n");
|
||||
return ret;
|
||||
}
|
||||
ret = appfs_write_file(&fs, entry->d_name, file_ptr, info.st_size, 0);
|
||||
ret = appfs_write_file(&fs, file_name, file_ptr, info.st_size, 0);
|
||||
if (ret < 0)
|
||||
{
|
||||
free(file_ptr);
|
||||
@@ -122,9 +154,6 @@ int read_files_and_write_appfs(const char *path)
|
||||
total_size += info.st_size;
|
||||
}
|
||||
}
|
||||
|
||||
// 关闭目录
|
||||
closedir(dir);
|
||||
printf("file total size:%fMB\n", ((float)total_size / 1024.0f / 1024.0f));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -10,5 +10,5 @@ appfs -m /bin -d /block
|
||||
# eth
|
||||
# snd
|
||||
# net
|
||||
# nes
|
||||
# nes /bin/sm.nes
|
||||
sh
|
||||
@@ -60,7 +60,7 @@ void console_init(void)
|
||||
cons_svr_obj_init(&cons_obj);
|
||||
meta_reg_svr_obj(&cons_obj.svr, CONS_PROT);
|
||||
u_thread_create(&cons_th, (char *)cons_stack + sizeof(cons_stack) - 8, NULL, console_read_func);
|
||||
u_thread_run(cons_th, 15);
|
||||
u_thread_run(cons_th, 3);
|
||||
ulog_write_str(LOG_PROT, "cons svr init...\n");
|
||||
}
|
||||
/**
|
||||
|
||||
@@ -59,7 +59,7 @@ int thread_vcpu_test(void)
|
||||
{
|
||||
goto end_free_mm;
|
||||
}
|
||||
thread_run(th1_hd, 2); // 优先级默认为2
|
||||
thread_run(th1_hd, 3); // 优先级默认为2
|
||||
ret = 0;
|
||||
goto end_ok;
|
||||
end_free_mm:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
file(GLOB_RECURSE deps src/*.c src/*.S)
|
||||
file(GLOB deps src/*.c src/*.S src/test/*.c)
|
||||
|
||||
add_executable(net.elf
|
||||
${deps}
|
||||
@@ -29,6 +29,7 @@ target_include_directories(
|
||||
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/lwip/src/include
|
||||
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/lwip/src/include/lwip/apps
|
||||
${CMAKE_SOURCE_DIR}/mkrtos_user/server/net/inc
|
||||
${CMAKE_SOURCE_DIR}/mkrtos_user/server/net/src/test
|
||||
)
|
||||
set_target_properties(net.elf PROPERTIES LINK_FLAGS
|
||||
"-T ${CMAKE_CURRENT_LIST_DIR}/${ARCH_NAME}/link.lds ${CORTEX_M_LINK_FLAGS} --gc-section -no-dynamic-linker "
|
||||
@@ -40,7 +41,7 @@ add_custom_target(
|
||||
COMMAND
|
||||
${CMAKE_OBJCOPY} -O binary -S net.elf net.bin
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E copy net.bin ${CMAKE_SOURCE_DIR}/build/output/cpio/net
|
||||
${CMAKE_COMMAND} -E copy net.bin ${CMAKE_SOURCE_DIR}/build/output/cpio/a_net
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E copy net.elf ${CMAKE_SOURCE_DIR}/build/output/net.elf
|
||||
)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include <u_util.h>
|
||||
#if !IS_ENABLED(CONFIG_MMU)
|
||||
#define HEAP_SIZE (10 * 1024)
|
||||
#define HEAP_SIZE (32 * 1024)
|
||||
#define STACK_SIZE (2048)
|
||||
|
||||
#if defined(__CC_ARM)
|
||||
|
||||
@@ -22,13 +22,19 @@ static umword_t addr;
|
||||
static umword_t size;
|
||||
obj_handler_t net_drv_hd;
|
||||
|
||||
#define STACK_COM_ITME_SIZE (2 * 1024)
|
||||
#define STACK_COM_ITME_SIZE (2 * 1024 + 512 /*sizeof(struct pthread) + TP_OFFSET*/)
|
||||
#define STACK_NUM 4
|
||||
ATTR_ALIGN(8)
|
||||
static uint8_t stack_coms[STACK_COM_ITME_SIZE * STACK_NUM];
|
||||
static uint8_t msg_buf_coms[MSG_BUG_LEN];
|
||||
static uint8_t msg_buf_coms[MSG_BUG_LEN * STACK_NUM];
|
||||
static void fast_ipc_init(void)
|
||||
{
|
||||
// ipc_msg_t *ipc_msg = (ipc_msg_t *)msg_buf_coms;
|
||||
|
||||
// for (int i = 0; i < STACK_NUM; i++)
|
||||
// {
|
||||
// ipc_msg->user[0] = (umword_t)(stack_coms + (i * STACK_COM_ITME_SIZE) + 2 * 1024);
|
||||
// }
|
||||
u_fast_ipc_init(stack_coms,
|
||||
msg_buf_coms, STACK_NUM, STACK_COM_ITME_SIZE);
|
||||
}
|
||||
@@ -98,7 +104,7 @@ again:
|
||||
return -1;
|
||||
}
|
||||
cons_write_str("net mount success\n");
|
||||
// fs_svr_loop();
|
||||
net_test();
|
||||
while (1)
|
||||
{
|
||||
if (msg_tag_get_prot(u_sema_down(sem_hd)) < 0)
|
||||
|
||||
161
mkrtos_user/server/net/src/test/net_test.c
Normal file
161
mkrtos_user/server/net/src/test/net_test.c
Normal file
@@ -0,0 +1,161 @@
|
||||
#include "pthread.h"
|
||||
#include "unistd.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <lwip/sockets.h>
|
||||
#define PORT 8080
|
||||
#define BUFFER_SIZE 128
|
||||
|
||||
static int tcp_server(void)
|
||||
{
|
||||
int server_socket, client_socket;
|
||||
struct sockaddr_in server_addr, client_addr;
|
||||
char buffer[BUFFER_SIZE];
|
||||
|
||||
// 创建服务器套接字
|
||||
if ((server_socket = lwip_socket(AF_INET, SOCK_STREAM, 0)) < 0)
|
||||
{
|
||||
perror("lwip_socket creation failed");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
printf("create server lwip_socket is success:%d\n", server_socket);
|
||||
// 设置服务器地址
|
||||
memset(&server_addr, 0, sizeof(server_addr));
|
||||
server_addr.sin_family = AF_INET;
|
||||
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
server_addr.sin_port = htons(PORT);
|
||||
|
||||
// 绑定套接字到本地地址和端口
|
||||
if (lwip_bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
|
||||
{
|
||||
perror("lwip_bind failed");
|
||||
lwip_close(server_socket);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// 监听连接请求
|
||||
if (lwip_listen(server_socket, 3) < 0)
|
||||
{
|
||||
perror("lwip_listen failed");
|
||||
lwip_close(server_socket);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
printf("Server is listening on port %d...\n", PORT);
|
||||
|
||||
socklen_t acc_len;
|
||||
// 接收客户端连接
|
||||
client_socket = lwip_accept(server_socket, (struct sockaddr *)&client_addr, &acc_len);
|
||||
if (client_socket < 0)
|
||||
{
|
||||
perror("lwip_accept failed");
|
||||
lwip_close(server_socket);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
printf("Client connected!\n");
|
||||
|
||||
// 发送数据
|
||||
const char *message = "Hello from server!";
|
||||
lwip_send(client_socket, message, strlen(message), 0);
|
||||
|
||||
// 接收数据
|
||||
memset(buffer, 0, BUFFER_SIZE);
|
||||
ssize_t bytes_received = lwip_recv(client_socket, buffer, BUFFER_SIZE - 1, 0);
|
||||
if (bytes_received < 0)
|
||||
{
|
||||
perror("lwip_recv failed");
|
||||
lwip_close(server_socket);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
printf("Received message from client: %s\n", buffer);
|
||||
|
||||
// 关闭套接字
|
||||
lwip_close(client_socket);
|
||||
lwip_close(server_socket);
|
||||
|
||||
return 0;
|
||||
}
|
||||
static void *net_server_func(void *arg)
|
||||
{
|
||||
tcp_server();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int tcp_client(void)
|
||||
{
|
||||
int server_socket;
|
||||
struct sockaddr_in server_addr;
|
||||
char buffer[BUFFER_SIZE];
|
||||
|
||||
// 创建服务器套接字
|
||||
if ((server_socket = lwip_socket(AF_INET, SOCK_STREAM, 0)) < 0)
|
||||
{
|
||||
perror("lwip_socket creation failed");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// 设置服务器地址
|
||||
memset(&server_addr, 0, sizeof(server_addr));
|
||||
server_addr.sin_family = AF_INET;
|
||||
server_addr.sin_addr.s_addr = inet_addr("192.168.3.10"); // 使用本机IP地址
|
||||
server_addr.sin_port = htons(PORT);
|
||||
|
||||
// 连接到服务器
|
||||
if (lwip_connect(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
|
||||
{
|
||||
perror("connect failed");
|
||||
lwip_close(server_socket);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
printf("Connected to server!\n");
|
||||
|
||||
// 发送数据
|
||||
const char *message = "Hello from client!";
|
||||
lwip_send(server_socket, message, strlen(message), 0);
|
||||
|
||||
// 接收数据
|
||||
memset(buffer, 0, BUFFER_SIZE);
|
||||
ssize_t bytes_received = lwip_recv(server_socket, buffer, BUFFER_SIZE - 1, 0);
|
||||
if (bytes_received < 0)
|
||||
{
|
||||
perror("lwip_recv failed");
|
||||
lwip_close(server_socket);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
printf("Received message from server: %s\n", buffer);
|
||||
|
||||
// 关闭套接字
|
||||
lwip_close(server_socket);
|
||||
|
||||
return 0;
|
||||
}
|
||||
static void *net_client_func(void *arg)
|
||||
{
|
||||
tcp_client();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static pthread_t net_server_pt;
|
||||
static pthread_t net_client_pt;
|
||||
int net_test(void)
|
||||
{
|
||||
sleep(1);
|
||||
if (pthread_create(&net_server_pt, NULL, net_server_func, NULL))
|
||||
{
|
||||
printf("net server pthread create failed.\n");
|
||||
return -1;
|
||||
}
|
||||
sleep(1);
|
||||
if (pthread_create(&net_server_pt, NULL, net_client_func, NULL))
|
||||
{
|
||||
printf("net server pthread create failed.\n");
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
3
mkrtos_user/server/net/src/test/net_test.h
Normal file
3
mkrtos_user/server/net/src/test/net_test.h
Normal file
@@ -0,0 +1,3 @@
|
||||
#pragma once
|
||||
|
||||
int net_test(void);
|
||||
@@ -77,7 +77,7 @@ add_custom_target(
|
||||
COMMAND
|
||||
${CMAKE_SIZE} nes.elf
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E copy nes.bin ${CMAKE_SOURCE_DIR}/build/output/cpio/nes
|
||||
${CMAKE_COMMAND} -E copy nes.bin ${CMAKE_SOURCE_DIR}/build/output/cpio/a_nes
|
||||
COMMAND
|
||||
cp nes.elf ${CMAKE_SOURCE_DIR}/build/output/nes.elf
|
||||
COMMAND
|
||||
|
||||
@@ -47,6 +47,7 @@ static int new_rom_get(const char *path)
|
||||
new_rom_size = appfs_arg.size;
|
||||
return 0;
|
||||
}
|
||||
bool_t print_fps = FALSE;
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
if (argc < 2)
|
||||
@@ -61,6 +62,10 @@ int main(int argc, char *argv[])
|
||||
printf("rom don't finded.\n");
|
||||
return -1;
|
||||
}
|
||||
if (argc >= 3)
|
||||
{
|
||||
print_fps = TRUE;
|
||||
}
|
||||
// thread_run(-1, 4);
|
||||
printf("nes init..\n");
|
||||
#if 0
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <sys/ioctl.h>
|
||||
#include "ns_cli.h"
|
||||
#include "u_sleep.h"
|
||||
#include "unistd.h"
|
||||
#include <u_hd_man.h>
|
||||
#include <u_task.h>
|
||||
#include <u_factory.h>
|
||||
@@ -442,9 +443,9 @@ void nes_emulate_frame(void)
|
||||
u8 nes_frame = 0;
|
||||
int jump_frame_cnt = 0;
|
||||
|
||||
st_tick = sys_read_tick();
|
||||
while (1)
|
||||
{
|
||||
st_tick = sys_read_tick();
|
||||
// printf("%d\r\n",framecnt);
|
||||
// LINES 0-239
|
||||
PPU_start_frame();
|
||||
@@ -521,8 +522,19 @@ void nes_emulate_frame(void)
|
||||
nes_frame = 0;
|
||||
}
|
||||
#endif
|
||||
#if 0
|
||||
printf("fps:%d\n", 1000 / ((sys_read_tick() - st_tick) / framecnt));
|
||||
#if 1
|
||||
extern bool_t print_fps;
|
||||
int32_t used_tick = sys_read_tick() - st_tick;
|
||||
|
||||
// if (1000 / 60 >= used_tick)
|
||||
// {
|
||||
// usleep((1000 / 60 - used_tick) * 1000);
|
||||
// }
|
||||
used_tick = sys_read_tick() - st_tick;
|
||||
if (print_fps)
|
||||
{
|
||||
printf("fps:%d\n", 1000 / used_tick);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
//版本:V1.0
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define NES_SKIP_FRAME 1 //定义模拟器跳帧数,默认跳2帧
|
||||
#define NES_SKIP_FRAME 0 //定义模拟器跳帧数,默认跳2帧
|
||||
|
||||
|
||||
#define INLINE static inline
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
add_subdirectory(coremark)
|
||||
add_subdirectory(tinycc-arm-thumb)
|
||||
# add_subdirectory(coremark)
|
||||
# add_subdirectory(tinycc-arm-thumb)
|
||||
add_subdirectory(test)
|
||||
add_subdirectory(vi)
|
||||
add_subdirectory(binutils-2.33.1)
|
||||
add_subdirectory(share_lib_test)
|
||||
add_subdirectory(share_lib_test2)
|
||||
add_subdirectory(shared_test)
|
||||
# add_subdirectory(share_lib_test)
|
||||
# add_subdirectory(share_lib_test2)
|
||||
# add_subdirectory(shared_test)
|
||||
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${CONFIG_BOARD_NAME})
|
||||
add_subdirectory(${CONFIG_BOARD_NAME})
|
||||
endif()
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Ofast")
|
||||
# message("coremark==>"${CMAKE_C_FLAGS})
|
||||
file(
|
||||
GLOB deps
|
||||
coremark_src/*.c
|
||||
|
||||
@@ -77,7 +77,7 @@ typedef clock_t CORE_TICKS;
|
||||
#endif
|
||||
#endif
|
||||
#ifndef COMPILER_FLAGS
|
||||
#define COMPILER_FLAGS "" /* "Please put compiler flags here (e.g. -o3)" */
|
||||
#define COMPILER_FLAGS "-Ofast" /* "Please put compiler flags here (e.g. -o3)" */
|
||||
#endif
|
||||
#ifndef MEM_LOCATION
|
||||
#define MEM_LOCATION "STACK"
|
||||
|
||||
@@ -12,7 +12,7 @@ int main(int args, char *argv[])
|
||||
{
|
||||
extern int core_mark(int argc, char *argv[]) ;
|
||||
|
||||
#if 1
|
||||
#if 0
|
||||
thread_run(-1, 3);
|
||||
#endif
|
||||
core_mark(args, argv);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
#define HEAP_SIZE (1024)
|
||||
#define HEAP_SIZE (10*1024)
|
||||
#define STACK_SIZE (1024 * 2)
|
||||
|
||||
#if defined(__CC_ARM)
|
||||
|
||||
@@ -9,12 +9,14 @@
|
||||
#include "fs_test.h"
|
||||
#include "mm_test.h"
|
||||
#include <u_sleep.h>
|
||||
#include "net_test.h"
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
for (int i = 0; i < argc; i++)
|
||||
{
|
||||
printf("argv[%d]: %s\n", i, argv[i]);
|
||||
}
|
||||
net_test();
|
||||
fs_test3();
|
||||
fs_test2();
|
||||
fs_test();
|
||||
|
||||
151
mkrtos_user/user/app/test/net_test.c
Normal file
151
mkrtos_user/user/app/test/net_test.c
Normal file
@@ -0,0 +1,151 @@
|
||||
#include "pthread.h"
|
||||
#include "unistd.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#define PORT 8080
|
||||
#define BUFFER_SIZE 128
|
||||
|
||||
static int tcp_server(void)
|
||||
{
|
||||
int server_socket, client_socket;
|
||||
struct sockaddr_in server_addr, client_addr;
|
||||
char buffer[BUFFER_SIZE];
|
||||
|
||||
// 创建服务器套接字
|
||||
if ((server_socket = socket(AF_INET, SOCK_STREAM, 0)) < 0)
|
||||
{
|
||||
perror("socket creation failed");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
printf("create server socket is success:%d\n", server_socket);
|
||||
// 设置服务器地址
|
||||
memset(&server_addr, 0, sizeof(server_addr));
|
||||
server_addr.sin_family = AF_INET;
|
||||
server_addr.sin_addr.s_addr = INADDR_ANY;
|
||||
server_addr.sin_port = htons(PORT);
|
||||
|
||||
// 绑定套接字到本地地址和端口
|
||||
if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
|
||||
{
|
||||
perror("bind failed");
|
||||
close(server_socket);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// 监听连接请求
|
||||
if (listen(server_socket, 3) < 0)
|
||||
{
|
||||
perror("listen failed");
|
||||
close(server_socket);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
printf("Server is listening on port %d...\n", PORT);
|
||||
|
||||
socklen_t acc_len;
|
||||
// 接收客户端连接
|
||||
client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &acc_len);
|
||||
if (client_socket < 0)
|
||||
{
|
||||
perror("accept failed");
|
||||
close(server_socket);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
printf("Client connected!\n");
|
||||
|
||||
// 发送数据
|
||||
const char *message = "Hello from server!";
|
||||
send(client_socket, message, strlen(message), 0);
|
||||
|
||||
// 接收数据
|
||||
memset(buffer, 0, BUFFER_SIZE);
|
||||
ssize_t bytes_received = recv(client_socket, buffer, BUFFER_SIZE - 1, 0);
|
||||
if (bytes_received < 0)
|
||||
{
|
||||
perror("recv failed");
|
||||
close(server_socket);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
printf("Received message from client: %s\n", buffer);
|
||||
|
||||
// 关闭套接字
|
||||
close(client_socket);
|
||||
close(server_socket);
|
||||
|
||||
return 0;
|
||||
}
|
||||
static void *net_server_func(void *arg)
|
||||
{
|
||||
tcp_server();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int tcp_client(void)
|
||||
{
|
||||
int server_socket;
|
||||
struct sockaddr_in server_addr;
|
||||
char buffer[BUFFER_SIZE];
|
||||
|
||||
// 创建服务器套接字
|
||||
if ((server_socket = socket(AF_INET, SOCK_STREAM, 0)) < 0)
|
||||
{
|
||||
perror("socket creation failed");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// 设置服务器地址
|
||||
memset(&server_addr, 0, sizeof(server_addr));
|
||||
server_addr.sin_family = AF_INET;
|
||||
server_addr.sin_addr.s_addr = inet_addr("192.168.3.10"); // 使用本机IP地址
|
||||
server_addr.sin_port = htons(PORT);
|
||||
|
||||
// 连接到服务器
|
||||
if (connect(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
|
||||
{
|
||||
perror("connect failed");
|
||||
close(server_socket);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
printf("Connected to server!\n");
|
||||
|
||||
// 发送数据
|
||||
const char *message = "Hello from client!";
|
||||
send(server_socket, message, strlen(message), 0);
|
||||
|
||||
// 接收数据
|
||||
memset(buffer, 0, BUFFER_SIZE);
|
||||
ssize_t bytes_received = recv(server_socket, buffer, BUFFER_SIZE - 1, 0);
|
||||
if (bytes_received < 0)
|
||||
{
|
||||
perror("recv failed");
|
||||
close(server_socket);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
printf("Received message from server: %s\n", buffer);
|
||||
|
||||
// 关闭套接字
|
||||
close(server_socket);
|
||||
|
||||
return 0;
|
||||
}
|
||||
static pthread_t net_server_pt;
|
||||
int net_test(void)
|
||||
{
|
||||
if (pthread_create(&net_server_pt, NULL, net_server_func, NULL))
|
||||
{
|
||||
printf("net server pthread create failed.\n");
|
||||
return -1;
|
||||
}
|
||||
sleep(1);
|
||||
tcp_client();
|
||||
pthread_join(net_server_pt, NULL);
|
||||
return 0;
|
||||
}
|
||||
3
mkrtos_user/user/app/test/net_test.h
Normal file
3
mkrtos_user/user/app/test/net_test.h
Normal file
@@ -0,0 +1,3 @@
|
||||
#pragma once
|
||||
|
||||
int net_test(void);
|
||||
@@ -79,7 +79,7 @@ add_custom_target(
|
||||
COMMAND
|
||||
${CMAKE_SIZE} eth.elf
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E copy eth.bin ${CMAKE_SOURCE_DIR}/build/output/cpio/eth
|
||||
${CMAKE_COMMAND} -E copy eth.bin ${CMAKE_SOURCE_DIR}/build/output/cpio/a_eth
|
||||
COMMAND
|
||||
cp eth.elf ${CMAKE_SOURCE_DIR}/build/output/eth.elf
|
||||
)
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#include <errno.h>
|
||||
#include "at_surf_f437_board_emac.h"
|
||||
static blk_drv_t net_drv; //!< 网络驱动的协议
|
||||
#define STACK_COM_ITME_SIZE (1024+512)
|
||||
#define STACK_COM_ITME_SIZE (2048)
|
||||
ATTR_ALIGN(8)
|
||||
uint8_t stack_coms[STACK_COM_ITME_SIZE];
|
||||
uint8_t msg_buf_coms[MSG_BUG_LEN];
|
||||
@@ -56,7 +56,12 @@ int blk_drv_read(obj_handler_t obj, int len, int inx)
|
||||
umword_t size = 0;
|
||||
msg_tag_t tag = share_mem_map(obj, vma_addr_create(VPAGE_PROT_RWX, 0, 0), &addr, &size);
|
||||
uint32_t _err;
|
||||
|
||||
if (msg_tag_get_val(tag) < 0)
|
||||
{
|
||||
handler_free_umap(obj);
|
||||
printf("net read error.\n");
|
||||
return msg_tag_get_val(tag);
|
||||
}
|
||||
ret = emac_read_packet((uint8_t *)addr, size);
|
||||
handler_free_umap(obj);
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user