usb_net编译

This commit is contained in:
ranchuan
2025-09-26 16:57:44 +08:00
parent d1b4de66b7
commit d8c1b2018b
12 changed files with 518 additions and 633 deletions

View File

@@ -30,14 +30,17 @@
"Project/Src/rt-thread/include", "Project/Src/rt-thread/include",
"Project/Src/zlib", "Project/Src/zlib",
"Project/Src/NES", "Project/Src/NES",
"Project/Src/TinyUSB/examples/device/cdc_dual_ports/src", "Project/Src/TinyUSB/examples/device/net_lwip_webserver/src",
"Project/Src/TinyUSB/src/class/cdc", "Project/Src/TinyUSB/src/class/net",
"Project/Src/TinyUSB/src/common", "Project/Src/TinyUSB/src/common",
"Project/Src/TinyUSB/src/device", "Project/Src/TinyUSB/src/device",
"Project/Src/TinyUSB/src/portable/synopsys/dwc2", "Project/Src/TinyUSB/src/portable/synopsys/dwc2",
"Project/Src/TinyUSB/src", "Project/Src/TinyUSB/src",
"Project/Src/TinyUSB/src/osal", "Project/Src/TinyUSB/src/osal",
"Project/Src/TinyUSB/hw" "Project/Src/TinyUSB/hw",
"Project/Src/TinyUSB/lib/networking",
"Project/Src/rt-thread/components/net/lwip-2.1.0/src/include",
"Project/Src/rt-thread/components/net/lwip-2.1.0/src/arch/include"
], ],
"defines": [ "defines": [
"USE_STDPERIPH_DRIVER", "USE_STDPERIPH_DRIVER",
@@ -51,7 +54,7 @@
"PKG_TINYUSB_DEVICE_ENABLE" "PKG_TINYUSB_DEVICE_ENABLE"
], ],
"windowsSdkVersion": "10.0.22621.0", "windowsSdkVersion": "10.0.22621.0",
"compilerPath": "D:/Program Files/arm-gnu-toolchain/bin/arm-none-eabi-gcc", "compilerPath": "C:/ARM_GCC/bin/arm-none-eabi-gcc",
"cStandard": "c17", "cStandard": "c17",
"cppStandard": "c++17", "cppStandard": "c++17",
"intelliSenseMode": "windows-gcc-arm" "intelliSenseMode": "windows-gcc-arm"

View File

@@ -1,12 +1,9 @@
#include "mymem.h" #include "mymem.h"
#include "sdram.h" #include "sdram.h"
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>ccm<63>ڴ棬1<E6A3AC><31>ʹ<EFBFBD>ã<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> // <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>ccm<63>ڴ棬1<E6A3AC><31>ʹ<EFBFBD>ã<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
#define USE_CCM 0 #define USE_CCM 0
#ifndef BOOTLOADER #ifndef BOOTLOADER
#define OS_RTT #define OS_RTT
#ifdef OS_RTT #ifdef OS_RTT
@@ -15,15 +12,20 @@
#define IRQ_ENABLE() rt_exit_critical() #define IRQ_ENABLE() rt_exit_critical()
#else #else
#include "os.h" #include "os.h"
#define IRQ_DISABLE() {CPU_SR_ALLOC(); CPU_CRITICAL_ENTER();} #define IRQ_DISABLE() \
{ \
CPU_SR_ALLOC(); \
CPU_CRITICAL_ENTER(); \
}
#define IRQ_ENABLE() CPU_CRITICAL_EXIT() #define IRQ_ENABLE() CPU_CRITICAL_EXIT()
#endif #endif
#else #else
#define IRQ_DISABLE() { } #define IRQ_DISABLE() \
#define IRQ_ENABLE() { } {}
#define IRQ_ENABLE() \
{}
#endif #endif
static void exmem_init(void); // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> static void exmem_init(void); // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static u32 exmem_malloc(u32 size); // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD> static u32 exmem_malloc(u32 size); // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
static u8 exmem_free(u32 offset); // <20>ڴ<EFBFBD><DAB4>ͷ<EFBFBD> static u8 exmem_free(u32 offset); // <20>ڴ<EFBFBD><DAB4>ͷ<EFBFBD>
@@ -34,22 +36,19 @@ static u8 mem_free(u32 offset); //
static void ccm_init(void); static void ccm_init(void);
void mymem_init(void) {
void mymem_init (void)
{
mem_init(); mem_init();
exmem_init(); exmem_init();
// ccm_init(); // ccm_init();
} }
#define EXMEM_BLOCK_SIZE (256) // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>СΪ64<36>ֽ<EFBFBD> #define EXMEM_BLOCK_SIZE (256) // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>СΪ64<36>ֽ<EFBFBD>
#define EXMEM_MAX_SIZE ((uint64_t)((SDRAM_USER_SIZE))*EXMEM_BLOCK_SIZE/(EXMEM_BLOCK_SIZE+2)) #define EXMEM_MAX_SIZE \
#define EXMEM_ALLOC_TABLE_SIZE ((u32)(EXMEM_MAX_SIZE/EXMEM_BLOCK_SIZE)&(~3)) //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С,<2C><><EFBFBD><EFBFBD>Ϊż<CEAA><C5BC><EFBFBD><EFBFBD>˫<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD> ((uint64_t)((SDRAM_USER_SIZE)) * EXMEM_BLOCK_SIZE / (EXMEM_BLOCK_SIZE + 2))
#define EXMEM_ALLOC_TABLE_SIZE \
((u32)(EXMEM_MAX_SIZE / EXMEM_BLOCK_SIZE) & \
(~3)) // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С,<2C><><EFBFBD><EFBFBD>Ϊż<CEAA><C5BC><EFBFBD><EFBFBD>˫<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ涼<DAB4><E6B6BC>˫<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD> // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ涼<DAB4><E6B6BC>˫<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
#define EXMEM_BASE ((u8 *)(SDRAM_USER_ADDR + EXMEM_ALLOC_TABLE_SIZE * 2)) #define EXMEM_BASE ((u8 *)(SDRAM_USER_ADDR + EXMEM_ALLOC_TABLE_SIZE * 2))
@@ -60,7 +59,6 @@ u32 exmemtblsize ; //
u32 exmemblksize; // <20>ڴ<EFBFBD><DAB4>ֿ<EFBFBD><D6BF><EFBFBD>С u32 exmemblksize; // <20>ڴ<EFBFBD><DAB4>ֿ<EFBFBD><D6BF><EFBFBD>С
uint64_t exmemsize; // <20>ڴ<EFBFBD><DAB4>ܴ<EFBFBD>С uint64_t exmemsize; // <20>ڴ<EFBFBD><DAB4>ܴ<EFBFBD>С
// <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct _m_mallco_dev exmallco_dev; struct _m_mallco_dev exmallco_dev;
@@ -68,32 +66,26 @@ struct _m_mallco_dev exmallco_dev;
//*des:Ŀ<>ĵ<EFBFBD>ַ //*des:Ŀ<>ĵ<EFBFBD>ַ
//*src:Դ<><D4B4>ַ //*src:Դ<><D4B4>ַ
// n:<3A><>Ҫ<EFBFBD><D2AA><EFBFBD>Ƶ<EFBFBD><C6B5>ڴ泤<DAB4><E6B3A4>(<28>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>λ) // n:<3A><>Ҫ<EFBFBD><D2AA><EFBFBD>Ƶ<EFBFBD><C6B5>ڴ泤<DAB4><E6B3A4>(<28>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>λ)
void mymemcpy(void *des,void *src,u32 n) void mymemcpy(void *des, void *src, u32 n) {
{
u8 *xdes = des; u8 *xdes = des;
u8 *xsrc = src; u8 *xsrc = src;
while(n--)*xdes++=*xsrc++; while (n--)
*xdes++ = *xsrc++;
} }
// <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD> // <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
//*s:<3A>ڴ<EFBFBD><DAB4>׵<EFBFBD>ַ //*s:<3A>ڴ<EFBFBD><DAB4>׵<EFBFBD>ַ
// c :Ҫ<><D2AA><EFBFBD>õ<EFBFBD>ֵ // c :Ҫ<><D2AA><EFBFBD>õ<EFBFBD>ֵ
// count:<3A><>Ҫ<EFBFBD><D2AA><EFBFBD>õ<EFBFBD><C3B5>ڴ<EFBFBD><DAB4><EFBFBD>С(<28>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>λ) // count:<3A><>Ҫ<EFBFBD><D2AA><EFBFBD>õ<EFBFBD><C3B5>ڴ<EFBFBD><DAB4><EFBFBD>С(<28>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>λ)
void mymemset(void *s,u8 c,u32 count) void mymemset(void *s, u8 c, u32 count) {
{
u8 *xs = s; u8 *xs = s;
while(count--)*xs++=c; while (count--)
*xs++ = c;
} }
// <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC> // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
// memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> // memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
static void exmem_init(void) static void exmem_init(void) {
{
exmemtblsize = EXMEM_ALLOC_TABLE_SIZE; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С exmemtblsize = EXMEM_ALLOC_TABLE_SIZE; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
exmemblksize = EXMEM_BLOCK_SIZE; // <20>ڴ<EFBFBD><DAB4>ֿ<EFBFBD><D6BF><EFBFBD>С exmemblksize = EXMEM_BLOCK_SIZE; // <20>ڴ<EFBFBD><DAB4>ֿ<EFBFBD><D6BF><EFBFBD>С
exmemsize = EXMEM_MAX_SIZE; // <20>ڴ<EFBFBD><DAB4>ܴ<EFBFBD>С exmemsize = EXMEM_MAX_SIZE; // <20>ڴ<EFBFBD><DAB4>ܴ<EFBFBD>С
@@ -102,7 +94,6 @@ static void exmem_init(void)
exmallco_dev.memmap = EXMEMMAP_BASE; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC> exmallco_dev.memmap = EXMEMMAP_BASE; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
exmallco_dev.memrdy = 0; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD> exmallco_dev.memrdy = 0; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
mymemset(exmallco_dev.memmap, 0, exmemtblsize * 2); // <20>ڴ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mymemset(exmallco_dev.memmap, 0, exmemtblsize * 2); // <20>ڴ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mymemset(exmallco_dev.membase, 0, exmemsize); // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mymemset(exmallco_dev.membase, 0, exmemsize); // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
exmallco_dev.memrdy = 1; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>OK exmallco_dev.memrdy = 1; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>OK
@@ -111,13 +102,12 @@ static void exmem_init(void)
// <20><>ȡ<EFBFBD>ڴ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD> // <20><>ȡ<EFBFBD>ڴ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>
// memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> // memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
// <20><><EFBFBD><EFBFBD>ֵ:ʹ<><CAB9><EFBFBD><EFBFBD>(0~100) // <20><><EFBFBD><EFBFBD>ֵ:ʹ<><CAB9><EFBFBD><EFBFBD>(0~100)
int exmem_perused(void) int exmem_perused(void) {
{
u32 used = 0; u32 used = 0;
u32 i; u32 i;
for(i=0;i<exmemtblsize;i++) for (i = 0; i < exmemtblsize; i++) {
{ if (exmallco_dev.memmap[i])
if(exmallco_dev.memmap[i])used++; used++;
} }
return (used * 10000) / (exmemtblsize); return (used * 10000) / (exmemtblsize);
} }
@@ -126,21 +116,24 @@ int exmem_perused(void)
// memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> // memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
// size:Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>С(<28>ֽ<EFBFBD>) // size:Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>С(<28>ֽ<EFBFBD>)
// <20><><EFBFBD><EFBFBD>ֵ:0XFFFFFFFF,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C>ڴ<EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ // <20><><EFBFBD><EFBFBD>ֵ:0XFFFFFFFF,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C>ڴ<EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ
static u32 exmem_malloc(u32 size) static u32 exmem_malloc(u32 size) {
{
signed long offset = 0; signed long offset = 0;
u32 nmemb; // <20><>Ҫ<EFBFBD><D2AA><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD> u32 nmemb; // <20><>Ҫ<EFBFBD><D2AA><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
u32 cmemb = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD> u32 cmemb = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
u32 i; u32 i;
// if(!mallco_dev.memrdy)mallco_dev.init();//δ<><CEB4>ʼ<EFBFBD><CABC>,<2C><>ִ<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC> // if(!mallco_dev.memrdy)mallco_dev.init();//δ<><CEB4>ʼ<EFBFBD><CABC>,<2C><>ִ<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>
if(size==0)return 0XFFFFFFFF;//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> if (size == 0)
return 0XFFFFFFFF; // <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
nmemb = size / exmemblksize; // <20><>ȡ<EFBFBD><C8A1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD> nmemb = size / exmemblksize; // <20><>ȡ<EFBFBD><C8A1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
if(size%exmemblksize)nmemb++; if (size % exmemblksize)
nmemb++;
for (offset = exmemtblsize - 1; offset >= 0; offset--) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> for (offset = exmemtblsize - 1; offset >= 0; offset--) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{ {
if(!exmallco_dev.memmap[offset])cmemb++;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> if (!exmallco_dev.memmap[offset])
else cmemb=0; //<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> cmemb++; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else
cmemb = 0; // <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (cmemb == nmemb) // <20>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nmemb<6D><62><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> if (cmemb == nmemb) // <20>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nmemb<6D><62><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
{ {
for (i = 0; i < nmemb; i++) // <20><>ע<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ǿ<EFBFBD> for (i = 0; i < nmemb; i++) // <20><>ע<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ǿ<EFBFBD>
@@ -157,8 +150,7 @@ static u32 exmem_malloc(u32 size)
// memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> // memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
// offset:<3A>ڴ<EFBFBD><DAB4><EFBFBD>ַƫ<D6B7><C6AB> // offset:<3A>ڴ<EFBFBD><DAB4><EFBFBD>ַƫ<D6B7><C6AB>
// <20><><EFBFBD><EFBFBD>ֵ:0,<2C>ͷųɹ<C5B3>;1,<2C>ͷ<EFBFBD>ʧ<EFBFBD><CAA7>; // <20><><EFBFBD><EFBFBD>ֵ:0,<2C>ͷųɹ<C5B3>;1,<2C>ͷ<EFBFBD>ʧ<EFBFBD><CAA7>;
static u8 exmem_free(u32 offset) static u8 exmem_free(u32 offset) {
{
u32 i; u32 i;
if (!exmallco_dev.memrdy) // δ<><CEB4>ʼ<EFBFBD><CABC>,<2C><>ִ<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC> if (!exmallco_dev.memrdy) // δ<><CEB4>ʼ<EFBFBD><CABC>,<2C><>ִ<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>
{ {
@@ -174,22 +166,21 @@ static u8 exmem_free(u32 offset)
exmallco_dev.memmap[index + i] = 0; exmallco_dev.memmap[index + i] = 0;
} }
return 0; return 0;
}else return 2;//ƫ<>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>. } else
return 2; // ƫ<>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>.
} }
//------------------------------------<2D>ڲ<EFBFBD>SRAM--------------------------------------- //------------------------------------<2D>ڲ<EFBFBD>SRAM---------------------------------------
#define SRAM_USER_SIZE (110 * 1024)
#define SRAM_USER_SIZE (120*1024)
u8 g_sram_mem[SRAM_USER_SIZE]; u8 g_sram_mem[SRAM_USER_SIZE];
#define MEM_BLOCK_SIZE (32) // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>СΪ64<36>ֽ<EFBFBD> #define MEM_BLOCK_SIZE (32) // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>СΪ64<36>ֽ<EFBFBD>
#define MEM_MAX_SIZE (((SRAM_USER_SIZE))*MEM_BLOCK_SIZE/(MEM_BLOCK_SIZE+2)) #define MEM_MAX_SIZE \
#define MEM_ALLOC_TABLE_SIZE ((MEM_MAX_SIZE/MEM_BLOCK_SIZE)&(~3)) //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С,<2C><><EFBFBD><EFBFBD>Ϊż<CEAA><C5BC><EFBFBD><EFBFBD>˫<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD> (((SRAM_USER_SIZE)) * MEM_BLOCK_SIZE / (MEM_BLOCK_SIZE + 2))
#define MEM_ALLOC_TABLE_SIZE \
((MEM_MAX_SIZE / MEM_BLOCK_SIZE) & (~3)) // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С,<2C><><EFBFBD><EFBFBD>Ϊż<CEAA><C5BC><EFBFBD><EFBFBD>˫<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD>
#define SRAM_USER_ADDR ((u32)g_sram_mem) #define SRAM_USER_ADDR ((u32)g_sram_mem)
@@ -197,25 +188,17 @@ u8 g_sram_mem[SRAM_USER_SIZE];
#define MEM_BASE ((u8 *)(SRAM_USER_ADDR + MEM_ALLOC_TABLE_SIZE * 2)) #define MEM_BASE ((u8 *)(SRAM_USER_ADDR + MEM_ALLOC_TABLE_SIZE * 2))
#define MEMMAP_BASE ((u16 *)(SRAM_USER_ADDR)) #define MEMMAP_BASE ((u16 *)(SRAM_USER_ADDR))
// <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u32 memtblsize; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С u32 memtblsize; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
u32 memblksize; // <20>ڴ<EFBFBD><DAB4>ֿ<EFBFBD><D6BF><EFBFBD>С u32 memblksize; // <20>ڴ<EFBFBD><DAB4>ֿ<EFBFBD><D6BF><EFBFBD>С
u32 memsize; // <20>ڴ<EFBFBD><DAB4>ܴ<EFBFBD>С u32 memsize; // <20>ڴ<EFBFBD><DAB4>ܴ<EFBFBD>С
// <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct _m_mallco_dev mallco_dev; struct _m_mallco_dev mallco_dev;
// <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC> // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
// memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> // memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
static void mem_init(void) static void mem_init(void) {
{
memtblsize = MEM_ALLOC_TABLE_SIZE; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С memtblsize = MEM_ALLOC_TABLE_SIZE; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
memblksize = MEM_BLOCK_SIZE; // <20>ڴ<EFBFBD><DAB4>ֿ<EFBFBD><D6BF><EFBFBD>С memblksize = MEM_BLOCK_SIZE; // <20>ڴ<EFBFBD><DAB4>ֿ<EFBFBD><D6BF><EFBFBD>С
memsize = MEM_MAX_SIZE; // <20>ڴ<EFBFBD><DAB4>ܴ<EFBFBD>С memsize = MEM_MAX_SIZE; // <20>ڴ<EFBFBD><DAB4>ܴ<EFBFBD>С
@@ -226,53 +209,46 @@ static void mem_init(void)
mallco_dev.memmap = MEMMAP_BASE; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC> mallco_dev.memmap = MEMMAP_BASE; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
mallco_dev.memrdy = 0; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD> mallco_dev.memrdy = 0; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
mymemset(mallco_dev.memmap, 0, memtblsize * 2); // <20>ڴ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mymemset(mallco_dev.memmap, 0, memtblsize * 2); // <20>ڴ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mymemset(mallco_dev.membase, 0, memsize); // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mymemset(mallco_dev.membase, 0, memsize); // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mallco_dev.memrdy = 1; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>OK mallco_dev.memrdy = 1; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>OK
} }
// <20><>ȡ<EFBFBD>ڴ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD> // <20><>ȡ<EFBFBD>ڴ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>
// memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> // memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
// <20><><EFBFBD><EFBFBD>ֵ:ʹ<><CAB9><EFBFBD><EFBFBD>(0~100) // <20><><EFBFBD><EFBFBD>ֵ:ʹ<><CAB9><EFBFBD><EFBFBD>(0~100)
int mem_perused(void) int mem_perused(void) {
{
u32 used = 0; u32 used = 0;
u32 i; u32 i;
for(i=0;i<memtblsize;i++) for (i = 0; i < memtblsize; i++) {
{ if (mallco_dev.memmap[i])
if(mallco_dev.memmap[i])used++; used++;
} }
return (used * 10000) / (memtblsize); return (used * 10000) / (memtblsize);
} }
// <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>(<28>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>) // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>(<28>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>)
// memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> // memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
// size:Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>С(<28>ֽ<EFBFBD>) // size:Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>С(<28>ֽ<EFBFBD>)
// <20><><EFBFBD><EFBFBD>ֵ:0XFFFFFFFF,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C>ڴ<EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ // <20><><EFBFBD><EFBFBD>ֵ:0XFFFFFFFF,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C>ڴ<EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ
static u32 mem_malloc(u32 size) static u32 mem_malloc(u32 size) {
{
signed long offset = 0; signed long offset = 0;
u16 nmemb; // <20><>Ҫ<EFBFBD><D2AA><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD> u16 nmemb; // <20><>Ҫ<EFBFBD><D2AA><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
u16 cmemb = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD> u16 cmemb = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
u32 i; u32 i;
// if(!mallco_dev.memrdy)mallco_dev.init();//δ<><CEB4>ʼ<EFBFBD><CABC>,<2C><>ִ<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC> // if(!mallco_dev.memrdy)mallco_dev.init();//δ<><CEB4>ʼ<EFBFBD><CABC>,<2C><>ִ<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>
if(size==0)return 0XFFFFFFFF;//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> if (size == 0)
return 0XFFFFFFFF; // <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
nmemb = size / memblksize; // <20><>ȡ<EFBFBD><C8A1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD> nmemb = size / memblksize; // <20><>ȡ<EFBFBD><C8A1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
if(size%memblksize)nmemb++; if (size % memblksize)
nmemb++;
for (offset = memtblsize - 1; offset >= 0; offset--) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> for (offset = memtblsize - 1; offset >= 0; offset--) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{ {
if(!mallco_dev.memmap[offset])cmemb++;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> if (!mallco_dev.memmap[offset])
else cmemb=0; //<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> cmemb++; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else
cmemb = 0; // <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (cmemb == nmemb) // <20>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nmemb<6D><62><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> if (cmemb == nmemb) // <20>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nmemb<6D><62><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
{ {
for (i = 0; i < nmemb; i++) // <20><>ע<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ǿ<EFBFBD> for (i = 0; i < nmemb; i++) // <20><>ע<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ǿ<EFBFBD>
@@ -289,8 +265,7 @@ static u32 mem_malloc(u32 size)
// memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> // memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
// offset:<3A>ڴ<EFBFBD><DAB4><EFBFBD>ַƫ<D6B7><C6AB> // offset:<3A>ڴ<EFBFBD><DAB4><EFBFBD>ַƫ<D6B7><C6AB>
// <20><><EFBFBD><EFBFBD>ֵ:0,<2C>ͷųɹ<C5B3>;1,<2C>ͷ<EFBFBD>ʧ<EFBFBD><CAA7>; // <20><><EFBFBD><EFBFBD>ֵ:0,<2C>ͷųɹ<C5B3>;1,<2C>ͷ<EFBFBD>ʧ<EFBFBD><CAA7>;
static u8 mem_free(u32 offset) static u8 mem_free(u32 offset) {
{
int i; int i;
if (!mallco_dev.memrdy) // δ<><CEB4>ʼ<EFBFBD><CABC>,<2C><>ִ<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC> if (!mallco_dev.memrdy) // δ<><CEB4>ʼ<EFBFBD><CABC>,<2C><>ִ<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>
{ {
@@ -306,22 +281,12 @@ static u8 mem_free(u32 offset)
mallco_dev.memmap[index + i] = 0; mallco_dev.memmap[index + i] = 0;
} }
return 0; return 0;
}else return 2;//ƫ<>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>. } else
return 2; // ƫ<>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>.
} }
//------------------------------------<2D>ڲ<EFBFBD>CCM--------------------------------------- //------------------------------------<2D>ڲ<EFBFBD>CCM---------------------------------------
#if USE_CCM == 1 #if USE_CCM == 1
#define CCM_USER_SIZE 64 * 1024 #define CCM_USER_SIZE 64 * 1024
@@ -330,7 +295,8 @@ u8 g_ccm_mem[CCM_USER_SIZE] __attribute__((at(0x10000000)));
#define CCM_BLOCK_SIZE (32) // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>СΪ64<36>ֽ<EFBFBD> #define CCM_BLOCK_SIZE (32) // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>СΪ64<36>ֽ<EFBFBD>
#define CCM_MAX_SIZE (((CCM_USER_SIZE)) * CCM_BLOCK_SIZE / (CCM_BLOCK_SIZE + 2)) #define CCM_MAX_SIZE (((CCM_USER_SIZE)) * CCM_BLOCK_SIZE / (CCM_BLOCK_SIZE + 2))
#define CCM_ALLOC_TABLE_SIZE ((CCM_MAX_SIZE/CCM_BLOCK_SIZE)&(~3)) //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С,<2C><><EFBFBD><EFBFBD>Ϊż<CEAA><C5BC><EFBFBD><EFBFBD>˫<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD> #define CCM_ALLOC_TABLE_SIZE \
((CCM_MAX_SIZE / CCM_BLOCK_SIZE) & (~3)) // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С,<2C><><EFBFBD><EFBFBD>Ϊż<CEAA><C5BC><EFBFBD><EFBFBD>˫<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD>
#define CCM_USER_ADDR ((u32)g_ccm_mem) #define CCM_USER_ADDR ((u32)g_ccm_mem)
@@ -338,25 +304,17 @@ u8 g_ccm_mem[CCM_USER_SIZE] __attribute__((at(0x10000000)));
#define CCM_BASE ((u8 *)(CCM_USER_ADDR + CCM_ALLOC_TABLE_SIZE * 2)) #define CCM_BASE ((u8 *)(CCM_USER_ADDR + CCM_ALLOC_TABLE_SIZE * 2))
#define CCMMAP_BASE ((u16 *)(CCM_USER_ADDR)) #define CCMMAP_BASE ((u16 *)(CCM_USER_ADDR))
// <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u32 ccm_memtblsize; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С u32 ccm_memtblsize; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
u32 ccm_memblksize; // <20>ڴ<EFBFBD><DAB4>ֿ<EFBFBD><D6BF><EFBFBD>С u32 ccm_memblksize; // <20>ڴ<EFBFBD><DAB4>ֿ<EFBFBD><D6BF><EFBFBD>С
u32 ccm_memsize; // <20>ڴ<EFBFBD><DAB4>ܴ<EFBFBD>С u32 ccm_memsize; // <20>ڴ<EFBFBD><DAB4>ܴ<EFBFBD>С
// <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct _m_mallco_dev ccm_mallco_dev; struct _m_mallco_dev ccm_mallco_dev;
// <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC> // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
// memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> // memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
static void ccm_init(void) static void ccm_init(void) {
{
ccm_memtblsize = CCM_ALLOC_TABLE_SIZE; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С ccm_memtblsize = CCM_ALLOC_TABLE_SIZE; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
ccm_memblksize = CCM_BLOCK_SIZE; // <20>ڴ<EFBFBD><DAB4>ֿ<EFBFBD><D6BF><EFBFBD>С ccm_memblksize = CCM_BLOCK_SIZE; // <20>ڴ<EFBFBD><DAB4>ֿ<EFBFBD><D6BF><EFBFBD>С
ccm_memsize = CCM_MAX_SIZE; // <20>ڴ<EFBFBD><DAB4>ܴ<EFBFBD>С ccm_memsize = CCM_MAX_SIZE; // <20>ڴ<EFBFBD><DAB4>ܴ<EFBFBD>С
@@ -365,53 +323,46 @@ static void ccm_init(void)
ccm_mallco_dev.memmap = CCMMAP_BASE; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC> ccm_mallco_dev.memmap = CCMMAP_BASE; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
ccm_mallco_dev.memrdy = 0; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD> ccm_mallco_dev.memrdy = 0; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
mymemset(ccm_mallco_dev.memmap, 0, ccm_memtblsize * 2); // <20>ڴ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mymemset(ccm_mallco_dev.memmap, 0, ccm_memtblsize * 2); // <20>ڴ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mymemset(ccm_mallco_dev.membase, 0, ccm_memsize); // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mymemset(ccm_mallco_dev.membase, 0, ccm_memsize); // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ccm_mallco_dev.memrdy = 1; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>OK ccm_mallco_dev.memrdy = 1; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>OK
} }
// <20><>ȡ<EFBFBD>ڴ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD> // <20><>ȡ<EFBFBD>ڴ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>
// memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> // memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
// <20><><EFBFBD><EFBFBD>ֵ:ʹ<><CAB9><EFBFBD><EFBFBD>(0~100) // <20><><EFBFBD><EFBFBD>ֵ:ʹ<><CAB9><EFBFBD><EFBFBD>(0~100)
int ccm_perused(void) int ccm_perused(void) {
{
u32 used = 0; u32 used = 0;
u32 i; u32 i;
for(i=0;i<ccm_memtblsize;i++) for (i = 0; i < ccm_memtblsize; i++) {
{ if (ccm_mallco_dev.memmap[i])
if(ccm_mallco_dev.memmap[i])used++; used++;
} }
return (used * 10000) / (ccm_memtblsize); return (used * 10000) / (ccm_memtblsize);
} }
// <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>(<28>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>) // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>(<28>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>)
// memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> // memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
// size:Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>С(<28>ֽ<EFBFBD>) // size:Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>С(<28>ֽ<EFBFBD>)
// <20><><EFBFBD><EFBFBD>ֵ:0XFFFFFFFF,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C>ڴ<EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ // <20><><EFBFBD><EFBFBD>ֵ:0XFFFFFFFF,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C>ڴ<EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ
static u32 ccm_malloc(u32 size) static u32 ccm_malloc(u32 size) {
{
signed long offset = 0; signed long offset = 0;
u16 nmemb; // <20><>Ҫ<EFBFBD><D2AA><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD> u16 nmemb; // <20><>Ҫ<EFBFBD><D2AA><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
u16 cmemb = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD> u16 cmemb = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
u32 i; u32 i;
// if(!mallco_dev.memrdy)mallco_dev.init();//δ<><CEB4>ʼ<EFBFBD><CABC>,<2C><>ִ<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC> // if(!mallco_dev.memrdy)mallco_dev.init();//δ<><CEB4>ʼ<EFBFBD><CABC>,<2C><>ִ<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>
if(size==0)return 0XFFFFFFFF;//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> if (size == 0)
return 0XFFFFFFFF; // <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
nmemb = size / ccm_memblksize; // <20><>ȡ<EFBFBD><C8A1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD> nmemb = size / ccm_memblksize; // <20><>ȡ<EFBFBD><C8A1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
if(size%ccm_memblksize)nmemb++; if (size % ccm_memblksize)
nmemb++;
for (offset = ccm_memtblsize - 1; offset >= 0; offset--) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> for (offset = ccm_memtblsize - 1; offset >= 0; offset--) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{ {
if(!ccm_mallco_dev.memmap[offset])cmemb++;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> if (!ccm_mallco_dev.memmap[offset])
else cmemb=0; //<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> cmemb++; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else
cmemb = 0; // <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (cmemb == nmemb) // <20>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nmemb<6D><62><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> if (cmemb == nmemb) // <20>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nmemb<6D><62><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
{ {
for (i = 0; i < nmemb; i++) // <20><>ע<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ǿ<EFBFBD> for (i = 0; i < nmemb; i++) // <20><>ע<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ǿ<EFBFBD>
@@ -428,8 +379,7 @@ static u32 ccm_malloc(u32 size)
// memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> // memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
// offset:<3A>ڴ<EFBFBD><DAB4><EFBFBD>ַƫ<D6B7><C6AB> // offset:<3A>ڴ<EFBFBD><DAB4><EFBFBD>ַƫ<D6B7><C6AB>
// <20><><EFBFBD><EFBFBD>ֵ:0,<2C>ͷųɹ<C5B3>;1,<2C>ͷ<EFBFBD>ʧ<EFBFBD><CAA7>; // <20><><EFBFBD><EFBFBD>ֵ:0,<2C>ͷųɹ<C5B3>;1,<2C>ͷ<EFBFBD>ʧ<EFBFBD><CAA7>;
static u8 ccm_free(u32 offset) static u8 ccm_free(u32 offset) {
{
int i; int i;
if (!ccm_mallco_dev.memrdy) // δ<><CEB4>ʼ<EFBFBD><CABC>,<2C><>ִ<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC> if (!ccm_mallco_dev.memrdy) // δ<><CEB4>ʼ<EFBFBD><CABC>,<2C><>ִ<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>
{ {
@@ -445,35 +395,27 @@ static u8 ccm_free(u32 offset)
ccm_mallco_dev.memmap[index + i] = 0; ccm_mallco_dev.memmap[index + i] = 0;
} }
return 0; return 0;
}else return 2;//ƫ<>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>. } else
return 2; // ƫ<>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>.
} }
#endif #endif
// <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>(<28>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>) // <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>(<28>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>)
// memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> // memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
// ptr:<3A>ڴ<EFBFBD><DAB4>׵<EFBFBD>ַ // ptr:<3A>ڴ<EFBFBD><DAB4>׵<EFBFBD>ַ
void myfree(void *ptr) void myfree(void *ptr) {
{
IRQ_DISABLE(); IRQ_DISABLE();
u32 free_addr = (u32)ptr; u32 free_addr = (u32)ptr;
u32 offset; u32 offset;
if(ptr==NULL) if (ptr == NULL) {
{
IRQ_ENABLE(); IRQ_ENABLE();
return; // <20><>ַΪ0. return; // <20><>ַΪ0.
} } else if ((free_addr & 0xf0000000) == 0x20000000) // sram
else if ((free_addr&0xf0000000)==0x20000000)//sram
{ {
offset = (u32)ptr - (u32)mallco_dev.membase; offset = (u32)ptr - (u32)mallco_dev.membase;
mem_free(offset); // <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD> mem_free(offset); // <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
} } else {
else
{
offset = (u32)ptr - (u32)exmallco_dev.membase; offset = (u32)ptr - (u32)exmallco_dev.membase;
exmem_free(offset); // <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD> exmem_free(offset); // <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
} }
@@ -481,13 +423,11 @@ void myfree(void *ptr)
IRQ_ENABLE(); IRQ_ENABLE();
} }
// <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>(<28>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>) // <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>(<28>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>)
// <20><><EFBFBD>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>䣬ʧ<E4A3AC>ܺ<EFBFBD><DCBA><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD> // <20><><EFBFBD>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>䣬ʧ<E4A3AC>ܺ<EFBFBD><DCBA><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>
// size:<3A>ڴ<EFBFBD><DAB4><EFBFBD>С(<28>ֽ<EFBFBD>) // size:<3A>ڴ<EFBFBD><DAB4><EFBFBD>С(<28>ֽ<EFBFBD>)
// <20><><EFBFBD><EFBFBD>ֵ:<3A><><EFBFBD><EFBFBD><E4B5BD><EFBFBD>ڴ<EFBFBD><DAB4>׵<EFBFBD>ַ. // <20><><EFBFBD><EFBFBD>ֵ:<3A><><EFBFBD><EFBFBD><E4B5BD><EFBFBD>ڴ<EFBFBD><DAB4>׵<EFBFBD>ַ.
void *mymalloc(size_t size) void *mymalloc(size_t size) {
{
IRQ_DISABLE(); IRQ_DISABLE();
u32 offset; u32 offset;
void *ret_addr = NULL; void *ret_addr = NULL;
@@ -495,15 +435,11 @@ void *mymalloc(size_t size)
offset = 0XFFFFFFFF; offset = 0XFFFFFFFF;
else else
offset = mem_malloc(size); offset = mem_malloc(size);
if(offset!=0XFFFFFFFF) if (offset != 0XFFFFFFFF) {
{
ret_addr = (void *)((u32)mallco_dev.membase + offset); ret_addr = (void *)((u32)mallco_dev.membase + offset);
} } else {
else
{
offset = exmem_malloc(size); offset = exmem_malloc(size);
if (offset!=0XFFFFFFFF) if (offset != 0XFFFFFFFF) {
{
ret_addr = (void *)((u32)exmallco_dev.membase + offset); ret_addr = (void *)((u32)exmallco_dev.membase + offset);
} }
} }
@@ -512,27 +448,20 @@ void *mymalloc(size_t size)
return ret_addr; return ret_addr;
} }
// <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>(<28>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>) // <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>(<28>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>)
// <20><><EFBFBD>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>䣬ʧ<E4A3AC>ܺ<EFBFBD><DCBA><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD> // <20><><EFBFBD>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>䣬ʧ<E4A3AC>ܺ<EFBFBD><DCBA><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>
// size:<3A>ڴ<EFBFBD><DAB4><EFBFBD>С(<28>ֽ<EFBFBD>) // size:<3A>ڴ<EFBFBD><DAB4><EFBFBD>С(<28>ֽ<EFBFBD>)
// <20><><EFBFBD><EFBFBD>ֵ:<3A><><EFBFBD><EFBFBD><E4B5BD><EFBFBD>ڴ<EFBFBD><DAB4>׵<EFBFBD>ַ. // <20><><EFBFBD><EFBFBD>ֵ:<3A><><EFBFBD><EFBFBD><E4B5BD><EFBFBD>ڴ<EFBFBD><DAB4>׵<EFBFBD>ַ.
void *mymalloc_fast(u32 size) void *mymalloc_fast(u32 size) {
{
IRQ_DISABLE(); IRQ_DISABLE();
u32 offset; u32 offset;
void *ret_addr = NULL; void *ret_addr = NULL;
offset = mem_malloc(size); offset = mem_malloc(size);
if(offset!=0XFFFFFFFF) if (offset != 0XFFFFFFFF) {
{
ret_addr = (void *)((u32)mallco_dev.membase + offset); ret_addr = (void *)((u32)mallco_dev.membase + offset);
} } else {
else
{
offset = exmem_malloc(size); offset = exmem_malloc(size);
if (offset!=0XFFFFFFFF) if (offset != 0XFFFFFFFF) {
{
ret_addr = (void *)((u32)exmallco_dev.membase + offset); ret_addr = (void *)((u32)exmallco_dev.membase + offset);
} }
} }
@@ -541,49 +470,37 @@ void *mymalloc_fast(u32 size)
return ret_addr; return ret_addr;
} }
// <20><><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD>ڴ<EFBFBD>(<28>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>) // <20><><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD>ڴ<EFBFBD>(<28>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>)
// <20><><EFBFBD>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>䣬ʧ<E4A3AC>ܺ<EFBFBD><DCBA><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD> // <20><><EFBFBD>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>䣬ʧ<E4A3AC>ܺ<EFBFBD><DCBA><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>
// size:<3A>ڴ<EFBFBD><DAB4><EFBFBD>С(<28>ֽ<EFBFBD>) // size:<3A>ڴ<EFBFBD><DAB4><EFBFBD>С(<28>ֽ<EFBFBD>)
// <20><><EFBFBD><EFBFBD>ֵ:<3A><><EFBFBD><EFBFBD><E4B5BD><EFBFBD>ڴ<EFBFBD><DAB4>׵<EFBFBD>ַ. // <20><><EFBFBD><EFBFBD>ֵ:<3A><><EFBFBD><EFBFBD><E4B5BD><EFBFBD>ڴ<EFBFBD><DAB4>׵<EFBFBD>ַ.
void *mymalloc_exm(u32 size) void *mymalloc_exm(u32 size) {
{
IRQ_DISABLE(); IRQ_DISABLE();
u32 offset; u32 offset;
void *ret_addr = NULL; void *ret_addr = NULL;
offset = exmem_malloc(size); offset = exmem_malloc(size);
if (offset!=0XFFFFFFFF) if (offset != 0XFFFFFFFF) {
{
ret_addr = (void *)((u32)exmallco_dev.membase + offset); ret_addr = (void *)((u32)exmallco_dev.membase + offset);
} }
IRQ_ENABLE(); IRQ_ENABLE();
return ret_addr; return ret_addr;
} }
#if USE_CCM == 1 #if USE_CCM == 1
// <20>ͷ<EFBFBD>CCM<43>ڴ<EFBFBD> // <20>ͷ<EFBFBD>CCM<43>ڴ<EFBFBD>
void myfree_ccm(void *ptr) void myfree_ccm(void *ptr) {
{
IRQ_DISABLE(); IRQ_DISABLE();
u32 free_addr = (u32)ptr; u32 free_addr = (u32)ptr;
u32 offset; u32 offset;
if(ptr==NULL) if (ptr == NULL) {
{
IRQ_ENABLE(); IRQ_ENABLE();
return; // <20><>ַΪ0. return; // <20><>ַΪ0.
} } else if ((free_addr & 0xf0000000) == 0x10000000) // sram
else if ((free_addr&0xf0000000)==0x10000000)//sram
{ {
offset = (u32)ptr - (u32)ccm_mallco_dev.membase; offset = (u32)ptr - (u32)ccm_mallco_dev.membase;
ccm_free(offset); // <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD> ccm_free(offset); // <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
} } else {
else
{
offset = (u32)ptr - (u32)exmallco_dev.membase; offset = (u32)ptr - (u32)exmallco_dev.membase;
exmem_free(offset); // <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD> exmem_free(offset); // <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
} }
@@ -591,24 +508,17 @@ void myfree_ccm(void *ptr)
IRQ_ENABLE(); IRQ_ENABLE();
} }
// <20><><EFBFBD><EFBFBD>CCM<43>ڴ<EFBFBD> // <20><><EFBFBD><EFBFBD>CCM<43>ڴ<EFBFBD>
void *mymalloc_ccm(u32 size) void *mymalloc_ccm(u32 size) {
{
IRQ_DISABLE(); IRQ_DISABLE();
u32 offset; u32 offset;
void *ret_addr = NULL; void *ret_addr = NULL;
offset = ccm_malloc(size); offset = ccm_malloc(size);
if(offset!=0XFFFFFFFF) if (offset != 0XFFFFFFFF) {
{
ret_addr = (void *)((u32)ccm_mallco_dev.membase + offset); ret_addr = (void *)((u32)ccm_mallco_dev.membase + offset);
} } else {
else
{
offset = exmem_malloc(size); offset = exmem_malloc(size);
if (offset!=0XFFFFFFFF) if (offset != 0XFFFFFFFF) {
{
ret_addr = (void *)((u32)exmallco_dev.membase + offset); ret_addr = (void *)((u32)exmallco_dev.membase + offset);
} }
} }
@@ -616,26 +526,19 @@ void *mymalloc_ccm(u32 size)
return ret_addr; return ret_addr;
} }
#endif #endif
// <20><><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ڴ<EFBFBD>(<28>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>) // <20><><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ڴ<EFBFBD>(<28>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>)
// memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> // memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
//*ptr:<3A><><EFBFBD>ڴ<EFBFBD><DAB4>׵<EFBFBD>ַ //*ptr:<3A><><EFBFBD>ڴ<EFBFBD><DAB4>׵<EFBFBD>ַ
// size:Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>С(<28>ֽ<EFBFBD>) // size:Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>С(<28>ֽ<EFBFBD>)
// <20><><EFBFBD><EFBFBD>ֵ:<3A>·<EFBFBD><C2B7><EFBFBD><E4B5BD><EFBFBD>ڴ<EFBFBD><DAB4>׵<EFBFBD>ַ. // <20><><EFBFBD><EFBFBD>ֵ:<3A>·<EFBFBD><C2B7><EFBFBD><E4B5BD><EFBFBD>ڴ<EFBFBD><DAB4>׵<EFBFBD>ַ.
void *myrealloc(void *ptr,u32 size) void *myrealloc(void *ptr, u32 size) {
{
IRQ_DISABLE(); IRQ_DISABLE();
void *ret_addr; void *ret_addr;
ret_addr = mymalloc_exm(size); ret_addr = mymalloc_exm(size);
if(ret_addr!=NULL) if (ret_addr != NULL) {
{ if (ptr != NULL) {
if(ptr!=NULL)
{
mymemcpy(ret_addr, ptr, size); mymemcpy(ret_addr, ptr, size);
myfree(ptr); myfree(ptr);
} }
@@ -645,57 +548,21 @@ void *myrealloc(void *ptr,u32 size)
return ret_addr; return ret_addr;
} }
// <20><><EFBFBD><EFBFBD><EFBFBD>ڴ沢<DAB4><E6B2A2><EFBFBD><EFBFBD> // <20><><EFBFBD><EFBFBD><EFBFBD>ڴ沢<DAB4><E6B2A2><EFBFBD><EFBFBD>
void *mycalloc (u32 size) void *mycalloc(u32 size) {
{
void *ptr = mymalloc(size); void *ptr = mymalloc(size);
if (ptr) mymemset(ptr,0,size); if (ptr)
mymemset(ptr, 0, size);
return ptr; return ptr;
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ýӿ<C3BD> // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ýӿ<C3BD>
void *malloc(size_t size) { return mymalloc(size); }
void free(void *ptr) { myfree(ptr); }
void *realloc(void *ptr, size_t size) { return myrealloc(ptr, size); }
void *malloc(size_t size) void *calloc(size_t nmemb, size_t size) { return mycalloc(nmemb * size); }
{
return mymalloc(size);
}
void free (void *ptr)
{
myfree(ptr);
}
void *realloc(void *ptr,size_t size)
{
return myrealloc(ptr,size);
}
void *calloc(size_t nmemb, size_t size)
{
return mycalloc(nmemb*size);
}

View File

@@ -36,7 +36,9 @@
#include <string.h> #include <string.h>
#include HTTPD_FSDATA_FILE // #include HTTPD_FSDATA_FILE
#include "fsdata.txt"
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/

View File

@@ -52,6 +52,8 @@
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>
#if 0
/* /*
* Initialize the network interface device * Initialize the network interface device
* *
@@ -213,6 +215,8 @@ int lwip_system_init(void)
} }
INIT_PREV_EXPORT(lwip_system_init); INIT_PREV_EXPORT(lwip_system_init);
#endif
void sys_init(void) void sys_init(void)
{ {
/* nothing on RT-Thread porting */ /* nothing on RT-Thread porting */
@@ -220,7 +224,7 @@ void sys_init(void)
void lwip_sys_init(void) void lwip_sys_init(void)
{ {
lwip_system_init(); // lwip_system_init();
} }
/* /*

View File

@@ -18,7 +18,7 @@
struct eth_device struct eth_device
{ {
/* inherit from rt_device */ /* inherit from rt_device */
struct rt_device parent; // struct rt_device parent;
/* network interface for lwip */ /* network interface for lwip */
struct netif *netif; struct netif *netif;
@@ -29,8 +29,8 @@ struct eth_device
rt_uint8_t link_status; rt_uint8_t link_status;
/* eth device interface */ /* eth device interface */
struct pbuf* (*eth_rx)(rt_device_t dev); // struct pbuf* (*eth_rx)(rt_device_t dev);
rt_err_t (*eth_tx)(rt_device_t dev, struct pbuf* p); // rt_err_t (*eth_tx)(rt_device_t dev, struct pbuf* p);
}; };
rt_err_t eth_device_ready(struct eth_device* dev); rt_err_t eth_device_ready(struct eth_device* dev);

View File

@@ -77,14 +77,18 @@ INC=[
'-ISrc/zlib', '-ISrc/zlib',
'-ISrc/NES', '-ISrc/NES',
# '-ISrc/TinyUSB/lib/rt-thread', # '-ISrc/TinyUSB/lib/rt-thread',
'-ISrc/TinyUSB/examples/device/cdc_dual_ports/src', '-ISrc/TinyUSB/examples/device/net_lwip_webserver/src',
'-ISrc/TinyUSB/src/class/cdc', '-ISrc/TinyUSB/src/class/net',
'-ISrc/TinyUSB/src/common', '-ISrc/TinyUSB/src/common',
'-ISrc/TinyUSB/src/device', '-ISrc/TinyUSB/src/device',
'-ISrc/TinyUSB/src/portable/synopsys/dwc2', '-ISrc/TinyUSB/src/portable/synopsys/dwc2',
'-ISrc/TinyUSB/src', '-ISrc/TinyUSB/src',
'-ISrc/TinyUSB/src/osal', '-ISrc/TinyUSB/src/osal',
'-ISrc/TinyUSB/hw', '-ISrc/TinyUSB/hw',
'-ISrc/TinyUSB/lib/networking',
'-ISrc/rt-thread/components/net/lwip-2.1.0/src/include',
'-ISrc/rt-thread/components/net/lwip-2.1.0/src/arch/include'
] ]
SRC_DIR=[ SRC_DIR=[
@@ -102,10 +106,14 @@ SRC_DIR=[
'Src/rt-thread/src', 'Src/rt-thread/src',
# 'Src/sqlite3', # 'Src/sqlite3',
'Src/TinyUSB/src/class/cdc', 'Src/TinyUSB/src/class/cdc',
'Src/TinyUSB/src/class/net',
'Src/TinyUSB/src/common', 'Src/TinyUSB/src/common',
'Src/TinyUSB/src/device', 'Src/TinyUSB/src/device',
'Src/TinyUSB/src/portable/synopsys/dwc2', 'Src/TinyUSB/src/portable/synopsys/dwc2',
'Src/TinyUSB/lib/networking',
# 'Src/TinyUSB/src', # 'Src/TinyUSB/src',
'Src/rt-thread/components/net/lwip-2.1.0/src',
] ]
SRC=[ SRC=[
@@ -156,8 +164,9 @@ SRC=[
'Src/NES/nes_mapper.c', 'Src/NES/nes_mapper.c',
'Src/TinyUSB/src/tusb.c', 'Src/TinyUSB/src/tusb.c',
'Src/TinyUSB/lib/rt-thread/tusb_rt_thread_port.c', # 'Src/TinyUSB/lib/rt-thread/tusb_rt_thread_port.c',
'Src/TinyUSB/examples/device/cdc_dual_ports/src/usb_descriptors.c', 'Src/TinyUSB/examples/device/net_lwip_webserver/src/main.c',
'Src/TinyUSB/examples/device/net_lwip_webserver/src/usb_descriptors.c',
'Src/TinyUSB/hw/bsp/board.c' 'Src/TinyUSB/hw/bsp/board.c'
] ]