优化代码结构

This commit is contained in:
zhangzheng
2024-11-17 10:30:06 +08:00
parent e9f41cea39
commit 77a38ebd8c
27 changed files with 214 additions and 91 deletions

View File

@@ -1,11 +1,12 @@
#!/bin/bash
# export TOOLCHAIN=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/bin/
# export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu
# linux build
export TOOLCHAIN=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/bin/
export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu
# mac compile
export TOOLCHAIN=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/
export TOOLCHAIN_LIB=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard
# export TOOLCHAIN=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/
# export TOOLCHAIN_LIB=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard
# windows compile
# export TOOLCHAIN=/d/GNUArmEmbeddedToolchain/102021.10/bin/
@@ -14,6 +15,7 @@ export TOOLCHAIN_LIB=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/ar
# export TOOLCHAIN=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/
# export TOOLCHAIN_LIB=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7-m/nofp
# linux build
# export TOOLCHAIN=/home/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/
# export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard

View File

@@ -1,13 +1,13 @@
#!/bin/bash
export TOOLCHAIN=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/
export TOOLCHAIN_LIB=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7-m/nofp
# export TOOLCHAIN=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/
# export TOOLCHAIN_LIB=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7-m/nofp
# export TOOLCHAIN=/d/GNUArmEmbeddedToolchain/102021.10/bin/
# export TOOLCHAIN_LIB=/d/GNUArmEmbeddedToolchain/102021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7-m/nofp
# export TOOLCHAIN=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/bin/
# export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/lib/gcc/arm-none-eabi/5.4.1/armv7-m/
export TOOLCHAIN=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/bin/
export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/lib/gcc/arm-none-eabi/5.4.1/armv7-m/
# export TOOLCHAIN=/home/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/
# export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7-m/nofp

View File

@@ -424,7 +424,8 @@ int fastCos(int i)
*
*/
const int16_t numVerts1 = 8;
// const int16_t numVerts1 = 8;
#define numVerts1 8
const int16_t verts1[] = {
-100, -100, -100, // 0
100, -100, -100, // 1
@@ -436,7 +437,8 @@ const int16_t verts1[] = {
-100, 100, 100, // 7
};
const int16_t numQuads1 = 6;
// const int16_t numQuads1 = 6;
#define numQuads1 6
const int16_t quads1[] = {
0, 1, 2, 3, // front
7, 6, 5, 4, // back

View File

@@ -16,7 +16,7 @@
#include "InfoNES.h"
#include "InfoNES_System.h"
#include "infones_mapper.h"
// #include "infones_mapper.h"
#include "InfoNES_pAPU.h"
#ifdef __cplusplus

View File

@@ -22,6 +22,9 @@ target_link_libraries(
PUBLIC
-Bstatic
${LIBC_NAME}
mk_drv
mk_pin
mk_char
--whole-archive
${START_LIB}
libc_be
@@ -29,7 +32,6 @@ target_link_libraries(
sys_util
sys_svr
--no-whole-archive
fdt
${GCC_LIB_PATH}/libgcc.a
)
target_include_directories(
@@ -46,13 +48,17 @@ target_include_directories(
${CMAKE_SOURCE_DIR}/mkrtos_bsp/AT32/AT32F435_437_Firmware_Library_V2.2.0/middlewares/i2c_application_library
${CMAKE_CURRENT_SOURCE_DIR}/
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/libfdt/lib/contrib
${CMAKE_SOURCE_DIR}/mkrtos_user/user/drv/lib/mk_pin
)
add_dependencies(
pin.elf
${START_LIB}
sys
sys_util
mk_char
mk_drv
mk_pin
)
set_target_properties(
pin.elf PROPERTIES LINK_FLAGS

View File

@@ -118,9 +118,9 @@ int fs_svr_open(const char *path, int flags, int mode)
printf("[pin] not dev %s.\n", path);
return -ENODEV;
}
if (char_dev->ops->mk_pin_drv_open)
if (char_dev->ops->open)
{
ret = char_dev->ops->mk_pin_drv_open(char_dev->dev);
ret = char_dev->ops->open(char_dev->dev);
}
if (ret < 0)
{
@@ -132,9 +132,9 @@ int fs_svr_open(const char *path, int flags, int mode)
if (!fdp)
{
printf("[pin] not fd %s.\n", path);
if (char_dev->ops->mk_pin_drv_release)
if (char_dev->ops->release)
{
char_dev->ops->mk_pin_drv_release(char_dev->dev);
char_dev->ops->release(char_dev->dev);
}
return -ENOMEM;
}
@@ -169,16 +169,19 @@ int fs_svr_read(int fd, void *buf, size_t len)
mk_char_dev_t *char_dev;
char_dev = fdp->ptr_dev;
if (!char_dev->ops->mk_pin_drv_ioctl)
if (!char_dev->ops->ioctl)
{
return -EACCES;
}
char_dev->ops->mk_pin_drv_ioctl(char_dev->dev, MK_PIN_SET_OP_PIN, fdp->offset);
if (!char_dev->ops->mk_pin_drv_read)
ret = char_dev->ops->ioctl(char_dev->dev, MK_PIN_SET_OP_PIN, fdp->offset);
if (ret < 0) {
return ret;
}
if (!char_dev->ops->read)
{
return -EACCES;
}
ret = char_dev->ops->mk_pin_drv_read(char_dev->dev, buf, len);
ret = char_dev->ops->read(char_dev->dev, buf, len);
if (ret > 0)
{
fdp->offset += ret;
@@ -201,16 +204,16 @@ int fs_svr_write(int fd, void *buf, size_t len)
mk_char_dev_t *char_dev;
char_dev = fdp->ptr_dev;
if (!char_dev->ops->mk_pin_drv_ioctl)
if (!char_dev->ops->ioctl)
{
return -EACCES;
}
char_dev->ops->mk_pin_drv_ioctl(char_dev->dev, MK_PIN_SET_OP_PIN, fdp->offset);
if (!char_dev->ops->mk_pin_drv_write)
char_dev->ops->ioctl(char_dev->dev, MK_PIN_SET_OP_PIN, fdp->offset);
if (!char_dev->ops->write)
{
return -EACCES;
}
ret = char_dev->ops->mk_pin_drv_write(char_dev->dev, buf, len);
ret = char_dev->ops->write(char_dev->dev, buf, len);
if (ret > 0)
{
fdp->offset += ret;
@@ -231,9 +234,9 @@ void fs_svr_close(int fd)
mk_char_dev_t *char_dev;
char_dev = fdp->ptr_dev;
if (char_dev->ops->mk_pin_drv_release)
if (char_dev->ops->release)
{
char_dev->ops->mk_pin_drv_release(char_dev->dev);
char_dev->ops->release(char_dev->dev);
}
}
else
@@ -346,9 +349,9 @@ int fs_svr_ioctl(int fd, int req, void *arg)
}
mk_char_dev_t *char_dev = file->ptr_dev;
if (char_dev->ops->mk_pin_drv_ioctl)
if (char_dev->ops->ioctl)
{
ret = char_dev->ops->mk_pin_drv_ioctl(char_dev->dev, req, (umword_t)arg);
ret = char_dev->ops->ioctl(char_dev->dev, req, (umword_t)arg);
}
return ret;
}

View File

@@ -12,19 +12,19 @@
#include "ns_cli.h"
#include <assert.h>
#include <sys/stat.h>
#include "mk_pin_drv_impl.h"
int main(int argc, char *argv[])
{
obj_handler_t hd;
int ret;
printf("pin init..\n");
printf("%s init..\n", argv[0]);
#if 1
thread_run(-1, 3);
#endif
mk_drv_init();
mk_dev_init();
extern void drv_pin_init(void);
drv_pin_init();
dtb_parse_init();

View File

@@ -1,4 +0,0 @@
#pragma once
int dtb_parse_init(void);

View File

@@ -8,6 +8,7 @@
#include <assert.h>
#include "mk_drv.h"
#include "mk_pin_drv.h"
#include "mk_dtb_parse.h"
#include <u_prot.h>
#include <u_vmam.h>
#include "at32f435_437_gpio.h"
@@ -208,51 +209,7 @@ static int pin_write(mk_pin_t *pin, int number, uint8_t value)
return 0;
}
static int dev_regs_map(mk_dev_t *dev, void *fdt)
{
const umword_t *reg_raw;
int len;
msg_tag_t tag;
reg_raw = fdt_getprop(dev->dtb, dev->dtb_offset,
"regs", &len);
if (!reg_raw)
{
return -ENODEV;
}
if (len < sizeof(void *) * 2)
{
return -ENODEV;
}
/*寄存器两个一组*/
for (int i = 0; i < len / sizeof(void *); i += 2)
{
addr_t vaddr;
uint32_t reg[2];
reg[0] = fdt32_to_cpu((fdt32_t)reg_raw[i]);
reg[1] = fdt32_to_cpu((fdt32_t)reg_raw[i + 1]);
printf("reg:0x%x size:0x%x\n", reg[0], reg[1]);
tag = u_vmam_alloc(VMA_PROT, vma_addr_create(VPAGE_PROT_RWX, 0, 0),
reg[1], reg[0], &vaddr);
if (msg_tag_get_val(tag) < 0)
{
if (i == 0)
{
printf("periph mem alloc failed..\n");
return msg_tag_get_val(tag);
}
else
{
printf("periph mem alloc failed. success:%d\n", i / 2);
return i / 2;
}
}
}
return 0;
}
static mk_pin_ops_t pin_ops = {
.drv_pin_configure = pin_configure,

View File

@@ -1,3 +1,3 @@
#pragma once
void drv_pin_init(void);

View File

@@ -3,5 +3,5 @@ cmake_minimum_required(VERSION 3.13)
# if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${CONFIG_BOARD_NAME})
# add_subdirectory(${CONFIG_BOARD_NAME})
# endif()
add_subdirectory(ATSURFF437)
add_subdirectory(lib)

View File

@@ -0,0 +1,5 @@
cmake_minimum_required(VERSION 3.13)
add_subdirectory(mk_drv)
add_subdirectory(mk_pin)
add_subdirectory(mk_char)

View File

@@ -0,0 +1,27 @@
cmake_minimum_required(VERSION 3.13)
file(GLOB_RECURSE deps *.c *.S)
add_library(
mk_char
STATIC
${deps}
)
add_dependencies(
mk_char
fdt
sys
sys_util
sys_svr
)
target_include_directories(
mk_char
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/
${CMAKE_CURRENT_SOURCE_DIR}/../mk_drv
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys/inc
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys/inc/${ARCH_NAME}
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys_svr/inc
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/util/inc
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/libfdt/lib/contrib
)

View File

@@ -6,11 +6,11 @@
typedef struct mk_file_ops
{
int (*mk_pin_drv_open)(mk_dev_t *dev);
int (*mk_pin_drv_write)(mk_dev_t *dev, void *buf, size_t size);
int (*mk_pin_drv_read)(mk_dev_t *dev, void *buf, size_t size);
int (*mk_pin_drv_ioctl)(mk_dev_t *dev, int cmd, umword_t args);
int (*mk_pin_drv_release)(mk_dev_t *dev);
int (*open)(mk_dev_t *dev);
int (*write)(mk_dev_t *dev, void *buf, size_t size);
int (*read)(mk_dev_t *dev, void *buf, size_t size);
int (*ioctl)(mk_dev_t *dev, int cmd, umword_t args);
int (*release)(mk_dev_t *dev);
} mk_file_ops_t;
typedef struct mk_char_dev

View File

@@ -0,0 +1,35 @@
cmake_minimum_required(VERSION 3.13)
file(GLOB_RECURSE deps *.c *.S)
add_library(
mk_drv
STATIC
${deps}
)
target_link_libraries(
mk_drv
PRIVATE
fdt
sys
sys_util
sys_svr
)
add_dependencies(
mk_drv
fdt
sys
sys_util
sys_svr
)
target_include_directories(
mk_drv
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/
${CMAKE_SOURCE_DIR}/mkrtos_user/user/drv/lib/mk_char
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys/inc
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys/inc/${ARCH_NAME}
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys_svr/inc
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/util/inc
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/libfdt/lib/contrib
)

View File

@@ -8,6 +8,7 @@
#include <mk_dev.h>
#include <mk_drv.h>
#include <stdio.h>
#include <u_vmam.h>
typedef struct hook_mach_info
{
int node_offset;
@@ -37,7 +38,51 @@ static int dd_hook_mach(mk_drv_t *drv, const char *dev_name, void *data)
}
return ret;
}
int dev_regs_map(mk_dev_t *dev, void *fdt)
{
const umword_t *reg_raw;
int len;
msg_tag_t tag;
reg_raw = fdt_getprop(dev->dtb, dev->dtb_offset,
"regs", &len);
if (!reg_raw)
{
return -ENODEV;
}
if (len < sizeof(void *) * 2)
{
return -ENODEV;
}
/*寄存器两个一组*/
for (int i = 0; i < len / sizeof(void *); i += 2)
{
addr_t vaddr;
uint32_t reg[2];
reg[0] = fdt32_to_cpu((fdt32_t)reg_raw[i]);
reg[1] = fdt32_to_cpu((fdt32_t)reg_raw[i + 1]);
printf("reg:0x%x size:0x%x\n", reg[0], reg[1]);
tag = u_vmam_alloc(VMA_PROT, vma_addr_create(VPAGE_PROT_RWX, 0, 0),
reg[1], reg[0], &vaddr);
if (msg_tag_get_val(tag) < 0)
{
if (i == 0)
{
printf("periph mem alloc failed..\n");
return msg_tag_get_val(tag);
}
else
{
printf("periph mem alloc failed. success:%d\n", i / 2);
return i / 2;
}
}
}
return 0;
}
int dtb_parse_init(void)
{
printf("init dts parsing.\n");

View File

@@ -0,0 +1,6 @@
#pragma once
#include "mk_dev.h"
int dev_regs_map(mk_dev_t *dev, void *fdt);
int dtb_parse_init(void);

View File

@@ -0,0 +1,38 @@
cmake_minimum_required(VERSION 3.13)
file(GLOB_RECURSE deps *.c *.S)
add_library(
mk_pin
STATIC
${deps}
)
target_link_libraries(
mk_pin
PRIVATE
fdt
sys
sys_util
sys_svr
mk_drv
)
add_dependencies(
mk_pin
fdt
sys
sys_util
sys_svr
mk_drv
)
target_include_directories(
mk_pin
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/
${CMAKE_CURRENT_SOURCE_DIR}/../mk_drv
${CMAKE_SOURCE_DIR}/mkrtos_user/user/drv/lib/mk_char
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys/inc
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys/inc/${ARCH_NAME}
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys_svr/inc
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/util/inc
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/libfdt/lib/contrib
)

View File

@@ -141,11 +141,11 @@ static int mk_pin_drv_ioctl(mk_dev_t *pin, int cmd, umword_t args)
return 0;
}
static mk_file_ops_t file_ops = {
.mk_pin_drv_open = NULL,
.mk_pin_drv_write = mk_pin_drv_write,
.mk_pin_drv_read = mk_pin_drv_read,
.mk_pin_drv_ioctl = mk_pin_drv_ioctl,
.mk_pin_drv_release = NULL,
.open = NULL,
.write = mk_pin_drv_write,
.read = mk_pin_drv_read,
.ioctl = mk_pin_drv_ioctl,
.release = NULL,
};
int mk_pin_register(mk_dev_t *dev, mk_pin_dev_t *pin_drv)

View File

@@ -3,6 +3,7 @@
#include <u_types.h>
#include "mk_drv.h"
#include "mk_dev.h"
#define MK_PIN_MAX_NUM (16 * 8)
typedef struct mk_pin