增加内存分配测试代代码,增加qemu直接运行脚本
This commit is contained in:
4
.vscode/settings.json
vendored
4
.vscode/settings.json
vendored
@@ -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
|
||||
}
|
||||
@@ -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}")
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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_ */
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
/**
|
||||
* 获取内存中空余的块
|
||||
*/
|
||||
|
||||
11
mkrtos_real/test/CMakeLists.txt
Normal file
11
mkrtos_real/test/CMakeLists.txt
Normal 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}/)
|
||||
)
|
||||
50
mkrtos_real/test/test_i_startup.c
Normal file
50
mkrtos_real/test/test_i_startup.c
Normal 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);
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user