增加内存分配测试代代码,增加qemu直接运行脚本

This commit is contained in:
zhangzheng
2022-12-12 22:17:49 +08:00
parent bcafdad5b5
commit 0a81fa325c
13 changed files with 122 additions and 7 deletions

View File

@@ -63,7 +63,9 @@
"type_traits": "c",
"utility": "c",
"arch.h": "c",
"list.h": "c"
"list.h": "c",
"typeindex": "c",
"mm.h": "c"
},
"cortex-debug.showRTOS": false
}

View File

@@ -60,6 +60,7 @@ add_subdirectory(ipc)
add_subdirectory(knl)
add_subdirectory(lib)
add_subdirectory(start)
add_subdirectory(test)
set(CMAKE_GEN_ELF ${CMAKE_PROJECT_NAME}_real.elf)
file(GLOB deps *.c *.S)
@@ -79,6 +80,7 @@ target_link_libraries(
kernel_knl
kernel_lib
$<TARGET_OBJECTS:kernel_start>
$<TARGET_OBJECTS:kernel_test>
)
# message("LINK_FLAGS:${LINK_FLAGS}")

View File

@@ -3,6 +3,7 @@
#include <mkrtos/tty.h>
#include <mkrtos/early_console.h>
#include <config.h>
struct tty_struct *cons_tty = NULL;
@@ -73,3 +74,10 @@ int console_write(char *data, int len)
return ret;
}
static int reg_early_console(void)
{
console_reg(0);
return 0;
}
INIT_REG(reg_early_console, INIT_TEST_REG);

View File

@@ -1,7 +1,7 @@
/*
* config.h
*
* Created on: 2022<EFBFBD><EFBFBD>7<EFBFBD><EFBFBD>23<EFBFBD><EFBFBD>
* Created on: 2022年7月23日
* Author: Administrator
*/
@@ -17,8 +17,8 @@
#define SYS_DOMAINNAME SYS_NAME
#define SYS_MACHINE "cortex-m3 open"
#define MKRTOS_USED_NET 0 //!<ʹ<><CAB9>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
#define MKRTOS_USED_M_PIPE 1 //!<ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pipe
#define MKRTOS_USED_NET 0 //!<使用使用网络接口
#define MKRTOS_USED_M_PIPE 1 //!<使用匿名pipe
#define SECTION(x) __attribute__((section(x)))
@@ -27,6 +27,13 @@
#define INIT_LV2(name) const init_func mkrtos_init_func_##name SECTION(".mkrtos.init.2") = name
#define INIT_LV3(name) const init_func mkrtos_init_func_##name SECTION(".mkrtos.init.3") = name
#define INIT_REG(name, LVL)\
const init_func mkrtos_init_func_##name SECTION(".mkrtos.init."LVL) = name
#define INIT_TEST_REG "3"
#define INIT_TEST_LVL "4"
#define ARCH_INIT() arch_init()
#endif /* INC_CONFIG_H_ */

View File

@@ -1,7 +1,7 @@
/*
* knl_service.h
*
* Created on: 2022<EFBFBD><EFBFBD>8<EFBFBD><EFBFBD>6<EFBFBD><EFBFBD>
* Created on:
* Author: Administrator
*/
@@ -12,6 +12,7 @@
void *malloc(uint32_t size);
void free(void* mem);
size_t free_size(void);
void *malloc_align(uint32_t size,uint32_t align);
void free_align(void *mem);
void *user_malloc(uint32_t size,const char* name);

View File

@@ -39,6 +39,7 @@ int mem_heap_add(mem_t *_this, void* mem, uint32_t size);
void* mem_split(void* mem, uint32_t size);
void* mem_alloc_align(mem_t *_this, uint32_t size, uint32_t align);
void mem_free_align(mem_t *_this, void* f_mem);
size_t mem_get_free_size(mem_t *_this);
struct mem_heap* mem_get_free(mem_t *_this, struct mem_heap* next,
int32_t hope_size, uint32_t *ret_addr);

View File

@@ -29,6 +29,10 @@ void *malloc(uint32_t size){
void free(void* mem){
mem_free(&knl_mem, mem);
}
size_t free_size(void)
{
return mem_get_free_size(&knl_mem);
}
void *malloc_align(uint32_t size,uint32_t align){
return mem_alloc_align(&knl_mem, size,align);
}

View File

@@ -19,6 +19,7 @@ extern ptr_t _mkrtos_init_start,_mkrtos_init_end;
static void mkrtos_init(void){
ptr_t* func_start=(ptr_t*)(&_mkrtos_init_start);
ptr_t* func_stop=(ptr_t*)(&_mkrtos_init_end);
for(;func_start<func_stop;func_start++){
((init_func)(*func_start))();
}
@@ -29,7 +30,7 @@ static void mkrtos_init(void){
*/
void _start(void){
mkrtos_init();
console_reg(0);
extern int main(void);
main();
}

View File

@@ -249,6 +249,21 @@ int mem_heap_add(mem_t *_this, void* mem, uint32_t size) {
sche_unlock();
return 0;
}
size_t mem_get_free_size(mem_t *_this)
{
size_t size = 0;
struct mem_heap* mem;
sche_lock();
for (mem = _this->heap_start; mem != _this->heap_end; mem = mem->next) {
MKRTOS_ASSERT(mem->magic == MAGIC_NUM);
if (!mem->used) {
size += mem->size;
}
}
sche_unlock();
return size;
}
/**
* 获取内存中空余的块
*/

View File

@@ -0,0 +1,11 @@
cmake_minimum_required(VERSION 3.13)
file(GLOB_RECURSE deps **/*.C **/*.S **/*.s **/*.c *.s *.S *.C *.c)
add_library(kernel_test OBJECT ${deps})
target_include_directories(
kernel_test
PUBLIC
# include_directories(${CMAKE_CURRENT_SOURCE_DIR}/)
)

View File

@@ -0,0 +1,50 @@
#include "config.h"
#include "knl_service.h"
#include "mm.h"
#define TEST_MEM_NUM 10
int test_mem(void)
{
size_t m_free_size = free_size();
kprint("=======start test mem\n");
kprint("sizeof(mem_heap_t) is %d\n", sizeof(mem_heap_t));
void *mem_array[TEST_MEM_NUM] = {
NULL
};
knl_mem_trace();
for (int i = 0; i < TEST_MEM_NUM; i++) {
mem_array[i] = malloc(i*3);
}
kprint("====================\n");
knl_mem_trace();
for (int i = 0; i< TEST_MEM_NUM; i++) {
free(mem_array[i]);
}
kprint("====================\n");
knl_mem_trace();
MKRTOS_ASSERT(m_free_size == free_size());
void *mem_tmp;
for (int i = 0; i < 8; i++) {
mem_tmp = malloc_align(1234, 1 << i);
MKRTOS_ASSERT(mem_tmp);
free_align(mem_tmp);
kprint("====================\n");
knl_mem_trace();
}
MKRTOS_ASSERT(m_free_size == free_size());
// void *user_malloc(uint32_t size,const char* name);
// void user_free(void *mem);
// void knl_mem_trace(void);
// struct mem_heap *knl_mem_get_free(struct mem_heap *next,
// int32_t hope_size, uint32_t *ret_addr);
kprint("=======end test mem\n");
return 0;
}
INIT_REG(test_mem, INIT_TEST_LVL);

View File

@@ -312,7 +312,7 @@ int main(int argc, char **argv)
{
// #include <mkrtos_su.h>
// slot_reg("put_start_info", put_start_info, fcall_exit);
put_start_info();
// put_start_info();
// Load config files, if any.
// Run command loop.

13
run.sh Executable file
View File

@@ -0,0 +1,13 @@
#!/bin/bash
# if [-z "$1"]; then
# echo "usage: ./debug.sh [tcp port]"
# exit
# fi
export MYDIR=$PWD
$PWD/tools/qemu-7.2.0-rc1/qemu-system-arm -machine\
netduino2 -cpu cortex-m3\
-nographic -m size=2\
-kernel $PWD/build/bin/kernel.img