暂时去除mm_page支持,会影响实时性

This commit is contained in:
zhangzheng
2023-11-25 17:44:54 +08:00
parent 1fde5f0e1d
commit 782ef1331d
9 changed files with 78 additions and 40 deletions

View File

@@ -96,33 +96,36 @@ void MemManage_Handler(void)
if (SCB->CFSR & 128)
{
fault_addr = (addr_t)(SCB->MMFAR);
if (mm_page_alloc_fault(&cur_task->mm_space.mm_pages, fault_addr) == NULL)
{
goto end;
}
return;
// if (mm_page_alloc_fault(&cur_task->mm_space.mm_pages, fault_addr) == NULL)
// {
// goto end;
// }
// return;
goto end;
}
if ((SCB->CFSR & 8))
{
printk("出栈错误\n");
fault_addr = arch_get_user_sp();
// fault_addr = arch_get_user_sp();
if (mm_page_alloc_fault(&cur_task->mm_space.mm_pages, fault_addr) == NULL)
{
goto end;
}
return;
// if (mm_page_alloc_fault(&cur_task->mm_space.mm_pages, fault_addr) == NULL)
// {
// goto end;
// }
// return;
goto end;
}
if (SCB->CFSR & 16)
{
printk("压栈错误\n");
fault_addr = arch_get_user_sp();
// fault_addr = arch_get_user_sp();
if (mm_page_alloc_fault(&cur_task->mm_space.mm_pages, fault_addr) == NULL)
{
goto end;
}
return;
// if (mm_page_alloc_fault(&cur_task->mm_space.mm_pages, fault_addr) == NULL)
// {
// goto end;
// }
// return;
goto end;
}
if (SCB->CFSR & 32)
{

View File

@@ -19,7 +19,7 @@ typedef struct region_info
typedef struct mm_space
{
region_info_t pt_regions[REGION_NUM]; //!< mpu内存保护块
mm_pages_t mm_pages; //!< 模拟分页内存
// mm_pages_t mm_pages; //!< 模拟分页内存
void *mm_block; //!< task 的私有内存块
size_t mm_block_size; //!< 私有内存块的大小
} mm_space_t;

View File

@@ -1,12 +1,12 @@
/**
* @file mm_man.c
* @author zhangzheng (1358745329@qq.com)
* @brief
* @brief
* @version 0.1
* @date 2023-09-29
*
*
* @copyright Copyright (c) 2023
*
*
*/
#include "types.h"
#include "kobject.h"
@@ -55,23 +55,25 @@ static void mm_man_syscall(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t in_t
{
case MM_ALLOC:
{
addr_t ret_addr;
int ret = mm_pages_alloc_page(&cur_task->mm_space.mm_pages, cur_task->lim, f->r[1], &ret_addr, f->r[2]);
if (ret < 0)
{
tag = msg_tag_init4(0, 0, 0, ret);
}
else
{
tag = msg_tag_init4(0, 0, 0, 0);
f->r[1] = ret_addr;
}
// addr_t ret_addr;
// int ret = mm_pages_alloc_page(&cur_task->mm_space.mm_pages, cur_task->lim, f->r[1], &ret_addr, f->r[2]);
// if (ret < 0)
// {
// tag = msg_tag_init4(0, 0, 0, ret);
// }
// else
// {
// tag = msg_tag_init4(0, 0, 0, 0);
// f->r[1] = ret_addr;
// }
tag = msg_tag_init4(0, 0, 0, -ENOSYS);
}
break;
case MM_FREE:
{
mm_pages_free_page(&cur_task->mm_space.mm_pages, cur_task->lim, f->r[1], f->r[2]);
tag = msg_tag_init4(0, 0, 0, 0);
// mm_pages_free_page(&cur_task->mm_space.mm_pages, cur_task->lim, f->r[1], f->r[2]);
// tag = msg_tag_init4(0, 0, 0, 0);
tag = msg_tag_init4(0, 0, 0, -ENOSYS);
}
break;
case MM_ALIGN_ALLOC:

View File

@@ -26,7 +26,7 @@ void mm_space_init(mm_space_t *mm_space, int is_knl)
{
regi_info = mm_space_alloc_pt_region(mm_space);
assert(regi_info);
mm_pages_init(&mm_space->mm_pages, regi_info);
// mm_pages_init(&mm_space->mm_pages, regi_info);
}
}
region_info_t *mm_space_alloc_pt_region(mm_space_t *m_space)

View File

@@ -11,7 +11,7 @@ export KNL_TEXT=0x8000000
export KNL_DATA=0x20000000
export KNL_DATA_SIZE=64K
export BOARD=STM32F2x
export ARCH=cortex-m3
export PYTHON_EXECUTABLE=python3
set -e

View File

@@ -0,0 +1,19 @@
#!/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/armv7-m
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 KEN_OFFSET=0x2000
export INIT_OFFSET=0x10000
export BOOTFS_ADDR_OFFSET=0x20000
export KNL_TEXT=0x8000000
export KNL_DATA=0x20000000
export KNL_DATA_SIZE=64K
export BOARD=STM32F2x
export ARCH=cortex-r52
export PYTHON_EXECUTABLE=python3
set -e
cmake -G Ninja -B build/$KNL .
cd build/$KNL && ninja

View File

@@ -11,6 +11,7 @@ export BOOTFS_ADDR_OFFSET=0x20000
export KNL_TEXT=0x8000000
export KNL_DATA=0x20000000
export KNL_DATA_SIZE=64K
export ARCH=cortex-m3
export BOARD=STM32F1x
set -e

View File

@@ -0,0 +1,12 @@
#!/bin/bash
# if [-z "$1"]; then
# echo "usage: ./debug.sh [tcp port]"
# exit
# fi
qemu-system-arm -machine\
netduino2 -cpu cortex-r52 \
-nographic -m size=2\
-kernel $PWD/build/output/kernel.img \
-S -gdb tcp::$1

View File

@@ -18,22 +18,23 @@ set(CMAKE_NM "${CROSS_COMPILE}nm" CACHE PATH "" FORCE)
set(CMAKE_AR "${CROSS_COMPILE}ar" CACHE PATH "" FORCE)
set(CMAKE_SIZE "${CROSS_COMPILE}size" CACHE PATH "" FORCE)
set(MKRTOS_ARCH $ENV{ARCH})
# -mfloat-abi=soft -u _printf_float
set(CMAKE_C_FLAGS "-mcpu=cortex-m3 -mthumb -O0 -g3 -lc -lrdimon -msoft-float -u _printf_float -D=MKRTOS \
-std=gnu11 -ffunction-sections -fdata-sections -fno-builtin \
set(CMAKE_C_FLAGS "-mcpu=${MKRTOS_ARCH} -mthumb -O0 -g3 -lc -lrdimon -msoft-float -u _printf_float -D=MKRTOS \
-std=gnu11 -ffunction-sections -fdata-sections -fno-builtin -mfix-cortex-m3-ldrd \
-nostartfiles -nodefaultlibs -nostdlib -nostdinc -Xlinker \
-fno-stack-protector -Wl,--gc-sections \
" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS "-mcpu=cortex-m3 -mthumb -mno-thumb-interwork -D=MKRTOS \
set(CMAKE_CXX_FLAGS "-mcpu=${MKRTOS_ARCH}-mthumb -mno-thumb-interwork -D=MKRTOS \
-mfix-cortex-m3-ldrd -O0 -g -std=c++11 \
-fmessage-length=0 -Xlinker --print-map -Wall -W -fno-stack-protector -g \
-mfloat-abi=soft -lc -lrdimon -u _printf_float \
-ffunction-sections -fdata-sections -fno-builtin -nostartfiles -nodefaultlibs -nostdlib -nostdinc -Xlinker \
" CACHE STRING "" FORCE)
set(CMAKE_ASM_FLAGS "-mcpu=cortex-m3 -mthumb -O0 -g -mfloat-abi=soft -lc -lrdimon -D=MKRTOS \
set(CMAKE_ASM_FLAGS "-mcpu=${MKRTOS_ARCH} -mthumb -O0 -g -mfloat-abi=soft -lc -lrdimon -D=MKRTOS \
-u _printf_float -std=gnu11 -ffunction-sections -fdata-sections -fno-builtin \
-nostartfiles -nodefaultlibs -nostdlib -nostdinc -Xlinker -fno-stack-protector \
" CACHE STRING "" FORCE)