optim sys

This commit is contained in:
zhangzheng
2025-02-12 17:29:30 +08:00
parent a1184c8e95
commit 00804aaaaa
54 changed files with 566 additions and 126 deletions

View File

@@ -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")

View File

@@ -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")

View File

@@ -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]);
}

View File

@@ -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}

View File

@@ -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 */

View File

@@ -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;

View File

@@ -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 *);

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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;
}

View File

@@ -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),

View File

@@ -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)

View File

@@ -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(

View File

@@ -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;
}

View File

@@ -10,5 +10,5 @@ appfs -m /bin -d /block
# eth
# snd
# net
# nes
# nes /bin/sm.nes
sh

View File

@@ -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");
}
/**

View File

@@ -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:

View File

@@ -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
)

View File

@@ -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)

View File

@@ -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)

View 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;
}

View File

@@ -0,0 +1,3 @@
#pragma once
int net_test(void);

View File

@@ -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

View File

@@ -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

View File

@@ -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
}
}

View File

@@ -11,7 +11,7 @@
//版本V1.0
//////////////////////////////////////////////////////////////////////////////////
#define NES_SKIP_FRAME 1 //定义模拟器跳帧数,默认跳2帧
#define NES_SKIP_FRAME 0 //定义模拟器跳帧数,默认跳2帧
#define INLINE static inline

View File

@@ -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()

View File

@@ -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

View File

@@ -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"

View File

@@ -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);

View File

@@ -1,5 +1,5 @@
#define HEAP_SIZE (1024)
#define HEAP_SIZE (10*1024)
#define STACK_SIZE (1024 * 2)
#if defined(__CC_ARM)

View File

@@ -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();

View 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;
}

View File

@@ -0,0 +1,3 @@
#pragma once
int net_test(void);

View File

@@ -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
)

View File

@@ -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;