历史上的今天
返回首页

历史上的今天

今天是:2025年02月19日(星期三)

正在发生

2019年02月19日 | C51 实现动态内存分配

2019-02-19 来源:eefocus

前几天尝试了一下C51 keil4编译其中对 malloc的函数的调用,最后感觉可以读取 len 的长度来实现内存分配;


今天尝试写了一下;程序如下;


/********************************************************************************************************/

/* 静态数组长度 */

#define     OSAL_MEMORY_LEN                    256                                   /* 静态数组最大长度 */

/********************************************************************************************************/

 

 

/********************************************************************************************************/

/* 局部变量定义 */

/* 系统随机分配一个数组,将数组的首地址和数组的长度N作为堆区的空间参数 */ 

static  uint8  x_data  membuf[OSAL_MEMORY_LEN]; 

/********************************************************************************************************/

 

 

/*

**********************************************************************************************************  

**功能描述: 打印指针的地址及其所指向的内容  

**入口参数:   

**          @*addr          ---                                 -要打印的地址起始位置  

**          @len            ---                                 -要打印的地址的长度  

**出口参数: 无  

**-------------------------=------------------------------------  

**函数注释: 无  

**********************************************************************************************************  

*/  

void uart_print_register(uint8 *addr, uint16 len)  

{  

    uint8   tmp[16];  

    uint16  i;  

 

    for (i=0; i

    {  

memset(tmp, 0, sizeof(tmp));  

        sprintf(tmp,"%p=0x%-4.2X ",addr,(uint16)*addr++);  

        uart_print_string(UART1, tmp);  

if ((i+1)%8 == 0)  

        {  

            uart_print_enter(UART1);  

        }  

    }  

    uart_print_enter(UART1);  

}  

 

 

/*

**********************************************************************************************************

**功能描述: 初始化 membuf 静态数组;并调用 init_mempool 函数来初始化动态内存

**入口参数: 无

**出口参数: 无

**-------------------------=------------------------------------

**函数注释: 无

**********************************************************************************************************

*/

static void memory_init_membuf(void)

{

memset      (membuf, 0, sizeof(membuf));

init_mempool(membuf,    sizeof(membuf));           /* 来初始化 membuf[] 数组;得到一个可以动态分配的堆 */

}

 

 

/*

**********************************************************************************************************

**功能描述: 获取动态内存堆中剩余可分配的字节数

**入口参数: 无

**出口参数: 无

**-------------------------=------------------------------------

**函数注释: 无

**********************************************************************************************************

*/

static uint16 memory_read_stacklen(void)

{

uint16  lw_retlen = 0;


if (455 >= OSAL_MEMORY_LEN)

{

lw_retlen = ((uint16)membuf[2] << 8) |  membuf[3];

}

else

{

lw_retlen = ((uint16)membuf[3] << 8) |  membuf[4];

}

return lw_retlen;

}

 

 

/*

**********************************************************************************************************

**功能描述: 动态内存分配

**入口参数: @*num_bytes      ---                                 -需要分配的字节数

**出口参数: 未确定类型的指针

**-------------------------=------------------------------------

**函数注释: 

**  malloc 向系统申请分配指定size个字节的内存空间

**  返回类型是 void* 类型; void* 表示未确定类型的指针

**  C,C++规定, void* 类型可以通过类型转换强制转换为任何其它类型的指针

**********************************************************************************************************

*/

void *osal_malloc(uint16 num_bytes)

{

void  *lp = NULL;


if ( num_bytes <= memory_read_stacklen() )

{

lp = malloc(num_bytes);

}

return  lp;

}

 

 

/*

**********************************************************************************************************

**功能描述: 动态分配完内存后,自动初始化该内存空间为零

**入口参数: 

**         @*num_bytes      ---                                 -需要分配的字节数

**         @size            ---                                 -需要分配的变量字长

**出口参数: 未确定类型的指针

**-------------------------=------------------------------------

**函数注释: 

**  calloc 内存的动态存储区中分配n个长度为size的连续空间

**  返回类型是 void* 类型; void* 表示未确定类型的指针

**  C,C++规定, void* 类型可以通过类型转换强制转换为任何其它类型的指针

**********************************************************************************************************

*/

void *osal_calloc(uint16 num_bytes, unsigned int size)

{

void  *lp = NULL;


if ( num_bytes <= memory_read_stacklen() )

{

lp = calloc(num_bytes,size);

}

return  lp;

}

 

 

/*

**********************************************************************************************************

**功能描述: 释放 malloc 等函数申请的动态内存

**入口参数: @*ptr           ---                                 -malloc 等函数申请的动态内存的指针

**出口参数: 无

**-------------------------=------------------------------------

**函数注释: 

**  使用后该指针变量一定要重新指向NULL,防止野指针出现,有效规避误操作

**  对于free(p)这句语句,如果p是NULL指针,  那么free对p无论操作多少次都不会出问题

**                      如果p不是NULL指针,那么free对p连续操作两次就会导致程序运行错误

**********************************************************************************************************

*/

void osal_free(void *ptr)

{

free(ptr);

ptr = NULL;

}

 

 

/*

**********************************************************************************************************

**功能描述: 从 src 复制 len 个字节内存到 dst

**入口参数: 

**         @*src            ---                                 -源地址

**         @*dst            ---                                 -目标地址

**         @len             ---                                 -拷贝的长度

**出口参数: 返回目标指针

**-------------------------=------------------------------------

**函数注释: 

**  使用后该指针变量一定要重新指向NULL,防止野指针出现,有效规避误操作

**  对于free(p)这句语句,如果p是NULL指针,  那么free对p无论操作多少次都不会出问题

**                      如果p不是NULL指针,那么free对p连续操作两次就会导致程序运行错误

**********************************************************************************************************

*/

void *osal_memcpy(void *dst, const void *src, uint16 len)

{

uint8       *lp_dst;

const uint8 *lp_src;

 

lp_src = src;

lp_dst = dst;

 

while (len--)

{

*lp_dst++ = *lp_src++;

}

return (lp_dst);

}



上面程序中有一个需要注意下的就是函数 memory_read_stacklen() 中的参数455;静态内存的剩余字节数 len 并不是入昨天所猜测的一样,大于255就存放在两个字节中;

经过多次的尝试,最后确定了如下的参数,静态内存的范围 在 255 - 3072 时,函数满足要求读取出剩余可用的字节数;




一下是测试程序:


首先开辟 lp1len = 100;  lp2len = 100; 如果再开辟 lp3len = 100的话;返回NULL


void memory_testrun(void)

{

uint16  i = 0;

uint8   *lp1,*lp2,*lp3,*lp4,*lp5;


uart_print_register(membuf, sizeof(membuf));

uart_print_format(UART1, "stacklen is ", "%.0f", (fp32)memory_read_stacklen());


lp1 = osal_malloc(100);

lp4 = lp1;

if (NULL != lp1)

{

for(i=0; i<99; i++)

{

*lp1++ = i%10 + '0';

}

*lp1 = 0;

uart_print_debug_twostring(UART1, "lp1 :", lp4);

uart_print_debug_string(UART1, "lp1 is ok");

}

else

{

uart_print_debug_string(UART1, "lp1 is error");

}



lp2 = osal_malloc(100);

lp5 = lp2;

if (NULL != lp2)

{

for(i=0; i<99; i++)

{

*lp2++ = i%10 + 'a';

}

*lp2 = 0;

uart_print_debug_twostring(UART1, "lp2 :", lp5);

uart_print_debug_string(UART1, "lp2 is ok");

//osal_free(lp5);

}

else

{

uart_print_debug_string(UART1, "lp2 is error");

}


lp3 = osal_calloc(100, sizeof(uint8));

if (NULL != lp3)

{

uart_print_debug_string(UART1, "lp3 is ok");

}

else

{

uart_print_debug_string(UART1, "lp3 is error");

}


uart_print_register(membuf, sizeof(membuf));

uart_print_format(UART1, "stacklen is ", "%.0f", (fp32)memory_read_stacklen());

}

输出如下;我们卡伊看到 lp3失败;

x:01c8=0x00   x:01c9=0x00   x:01ca=0x00   x:01cb=0xFC   x:01cc=0x00   x:01cd=0x00   x:01ce=0x00   x:01cf=0x00   

x:01d0=0x00   x:01d1=0x00   x:01d2=0x00   x:01d3=0x00   x:01d4=0x00   x:01d5=0x00   x:01d6=0x00   x:01d7=0x00   

x:01d8=0x00   x:01d9=0x00   x:01da=0x00   x:01db=0x00   x:01dc=0x00   x:01dd=0x00   x:01de=0x00   x:01df=0x00   

x:01e0=0x00   x:01e1=0x00   x:01e2=0x00   x:01e3=0x00   x:01e4=0x00   x:01e5=0x00   x:01e6=0x00   x:01e7=0x00   

x:01e8=0x00   x:01e9=0x00   x:01ea=0x00   x:01eb=0x00   x:01ec=0x00   x:01ed=0x00   x:01ee=0x00   x:01ef=0x00   

x:01f0=0x00   x:01f1=0x00   x:01f2=0x00   x:01f3=0x00   x:01f4=0x00   x:01f5=0x00   x:01f6=0x00   x:01f7=0x00   

x:01f8=0x00   x:01f9=0x00   x:01fa=0x00   x:01fb=0x00   x:01fc=0x00   x:01fd=0x00   x:01fe=0x00   x:01ff=0x00   

x:0200=0x00   x:0201=0x00   x:0202=0x00   x:0203=0x00   x:0204=0x00   x:0205=0x00   x:0206=0x00   x:0207=0x00   

x:0208=0x00   x:0209=0x00   x:020a=0x00   x:020b=0x00   x:020c=0x00   x:020d=0x00   x:020e=0x00   x:020f=0x00   

x:0210=0x00   x:0211=0x00   x:0212=0x00   x:0213=0x00   x:0214=0x00   x:0215=0x00   x:0216=0x00   x:0217=0x00   

x:0218=0x00   x:0219=0x00   x:021a=0x00   x:021b=0x00   x:021c=0x00   x:021d=0x00   x:021e=0x00   x:021f=0x00   

x:0220=0x00   x:0221=0x00   x:0222=0x00   x:0223=0x00   x:0224=0x00   x:0225=0x00   x:0226=0x00   x:0227=0x00   

x:0228=0x00   x:0229=0x00   x:022a=0x00   x:022b=0x00   x:022c=0x00   x:022d=0x00   x:022e=0x00   x:022f=0x00   

x:0230=0x00   x:0231=0x00   x:0232=0x00   x:0233=0x00   x:0234=0x00   x:0235=0x00   x:0236=0x00   x:0237=0x00   

x:0238=0x00   x:0239=0x00   x:023a=0x00   x:023b=0x00   x:023c=0x00   x:023d=0x00   x:023e=0x00   x:023f=0x00   

x:0240=0x00   x:0241=0x00   x:0242=0x00   x:0243=0x00   x:0244=0x00   x:0245=0x00   x:0246=0x00   x:0247=0x00   

x:0248=0x00   x:0249=0x00   x:024a=0x00   x:024b=0x00   x:024c=0x00   x:024d=0x00   x:024e=0x00   x:024f=0x00   

x:0250=0x00   x:0251=0x00   x:0252=0x00   x:0253=0x00   x:0254=0x00   x:0255=0x00   x:0256=0x00   x:0257=0x00   

x:0258=0x00   x:0259=0x00   x:025a=0x00   x:025b=0x00   x:025c=0x00   x:025d=0x00   x:025e=0x00   x:025f=0x00   

x:0260=0x00   x:0261=0x00   x:0262=0x00   x:0263=0x00   x:0264=0x00   x:0265=0x00   x:0266=0x00   x:0267=0x00   

x:0268=0x00   x:0269=0x00   x:026a=0x00   x:026b=0x00   x:026c=0x00   x:026d=0x00   x:026e=0x00   x:026f=0x00   

x:0270=0x00   x:0271=0x00   x:0272=0x00   x:0273=0x00   x:0274=0x00   x:0275=0x00   x:0276=0x00   x:0277=0x00   

x:0278=0x00   x:0279=0x00   x:027a=0x00   x:027b=0x00   x:027c=0x00   x:027d=0x00   x:027e=0x00   x:027f=0x00   

x:0280=0x00   x:0281=0x00   x:0282=0x00   x:0283=0x00   x:0284=0x00   x:0285=0x00   x:0286=0x00   x:0287=0x00   

x:0288=0x00   x:0289=0x00   x:028a=0x00   x:028b=0x00   x:028c=0x00   x:028d=0x00   x:028e=0x00   x:028f=0x00   

x:0290=0x00   x:0291=0x00   x:0292=0x00   x:0293=0x00   x:0294=0x00   x:0295=0x00   x:0296=0x00   x:0297=0x00   

x:0298=0x00   x:0299=0x00   x:029a=0x00   x:029b=0x00   x:029c=0x00   x:029d=0x00   x:029e=0x00   x:029f=0x00   

x:02a0=0x00   x:02a1=0x00   x:02a2=0x00   x:02a3=0x00   x:02a4=0x00   x:02a5=0x00   x:02a6=0x00   x:02a7=0x00   

x:02a8=0x00   x:02a9=0x00   x:02aa=0x00   x:02ab=0x00   x:02ac=0x00   x:02ad=0x00   x:02ae=0x00   x:02af=0x00   

x:02b0=0x00   x:02b1=0x00   x:02b2=0x00   x:02b3=0x00   x:02b4=0x00   x:02b5=0x00   x:02b6=0x00   x:02b7=0x00   

x:02b8=0x00   x:02b9=0x00   x:02ba=0x00   x:02bb=0x00   x:02bc=0x00   x:02bd=0x00   x:02be=0x00   x:02bf=0x00   

x:02c0=0x00   x:02c1=0x00   x:02c2=0x00   x:02c3=0x00   x:02c4=0x00   x:02c5=0x00   x:02c6=0x00   x:02c7=0x00   

 

stacklen is 252

lp1 :012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678

lp1 is ok

lp2 :abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghi

lp2 is ok

lp3 is error

x:01c8=0x00   x:01c9=0x00   x:01ca=0x00   x:01cb=0x2C   x:01cc=0x00   x:01cd=0x00   x:01ce=0x00   x:01cf=0x00   

x:01d0=0x00   x:01d1=0x00   x:01d2=0x00   x:01d3=0x00   x:01d4=0x00   x:01d5=0x00   x:01d6=0x00   x:01d7=0x00   

x:01d8=0x00   x:01d9=0x00   x:01da=0x00   x:01db=0x00   x:01dc=0x00   x:01dd=0x00   x:01de=0x00   x:01df=0x00   

x:01e0=0x00   x:01e1=0x00   x:01e2=0x00   x:01e3=0x00   x:01e4=0x00   x:01e5=0x00   x:01e6=0x00   x:01e7=0x00   

x:01e8=0x00   x:01e9=0x00   x:01ea=0x00   x:01eb=0x00   x:01ec=0x00   x:01ed=0x00   x:01ee=0x00   x:01ef=0x00   

x:01f0=0x00   x:01f1=0x00   x:01f2=0x00   x:01f3=0x00   x:01f4=0x00   x:01f5=0x00   x:01f6=0x00   x:01f7=0x00   

x:01f8=0x00   x:01f9=0x00   x:01fa=0x00   x:01fb=0x64   x:01fc=0x61   x:01fd=0x62   x:01fe=0x63   x:01ff=0x64   

x:0200=0x65   x:0201=0x66   x:0202=0x67   x:0203=0x68   x:0204=0x69   x:0205=0x6A   x:0206=0x61   x:0207=0x62   

x:0208=0x63   x:0209=0x64   x:020a=0x65   x:020b=0x66   x:020c=0x67   x:020d=0x68   x:020e=0x69   x:020f=0x6A   

x:0210=0x61   x:0211=0x62   x:0212=0x63   x:0213=0x64   x:0214=0x65   x:0215=0x66   x:0216=0x67   x:0217=0x68   

x:0218=0x69   x:0219=0x6A   x:021a=0x61   x:021b=0x62   x:021c=0x63   x:021d=0x64   x:021e=0x65   x:021f=0x66   

x:0220=0x67   x:0221=0x68   x:0222=0x69   x:0223=0x6A   x:0224=0x61   x:0225=0x62   x:0226=0x63   x:0227=0x64   

x:0228=0x65   x:0229=0x66   x:022a=0x67   x:022b=0x68   x:022c=0x69   x:022d=0x6A   x:022e=0x61   x:022f=0x62   

x:0230=0x63   x:0231=0x64   x:0232=0x65   x:0233=0x66   x:0234=0x67   x:0235=0x68   x:0236=0x69   x:0237=0x6A   

x:0238=0x61   x:0239=0x62   x:023a=0x63   x:023b=0x64   x:023c=0x65   x:023d=0x66   x:023e=0x67   x:023f=0x68   

x:0240=0x69   x:0241=0x6A   x:0242=0x61   x:0243=0x62   x:0244=0x63   x:0245=0x64   x:0246=0x65   x:0247=0x66   

x:0248=0x67   x:0249=0x68   x:024a=0x69   x:024b=0x6A   x:024c=0x61   x:024d=0x62   x:024e=0x63   x:024f=0x64   

x:0250=0x65   x:0251=0x66   x:0252=0x67   x:0253=0x68   x:0254=0x69   x:0255=0x6A   x:0256=0x61   x:0257=0x62   

x:0258=0x63   x:0259=0x64   x:025a=0x65   x:025b=0x66   x:025c=0x67   x:025d=0x68   x:025e=0x69   x:025f=0x00   

x:0260=0x00   x:0261=0x00   x:0262=0x00   x:0263=0x64   x:0264=0x30   x:0265=0x31   x:0266=0x32   x:0267=0x33   

x:0268=0x34   x:0269=0x35   x:026a=0x36   x:026b=0x37   x:026c=0x38   x:026d=0x39   x:026e=0x30   x:026f=0x31   

x:0270=0x32   x:0271=0x33   x:0272=0x34   x:0273=0x35   x:0274=0x36   x:0275=0x37   x:0276=0x38   x:0277=0x39   

x:0278=0x30   x:0279=0x31   x:027a=0x32   x:027b=0x33   x:027c=0x34   x:027d=0x35   x:027e=0x36   x:027f=0x37   

x:0280=0x38   x:0281=0x39   x:0282=0x30   x:0283=0x31   x:0284=0x32   x:0285=0x33   x:0286=0x34   x:0287=0x35   

x:0288=0x36   x:0289=0x37   x:028a=0x38   x:028b=0x39   x:028c=0x30   x:028d=0x31   x:028e=0x32   x:028f=0x33   

x:0290=0x34   x:0291=0x35   x:0292=0x36   x:0293=0x37   x:0294=0x38   x:0295=0x39   x:0296=0x30   x:0297=0x31   

x:0298=0x32   x:0299=0x33   x:029a=0x34   x:029b=0x35   x:029c=0x36   x:029d=0x37   x:029e=0x38   x:029f=0x39   

x:02a0=0x30   x:02a1=0x31   x:02a2=0x32   x:02a3=0x33   x:02a4=0x34   x:02a5=0x35   x:02a6=0x36   x:02a7=0x37   

x:02a8=0x38   x:02a9=0x39   x:02aa=0x30   x:02ab=0x31   x:02ac=0x32   x:02ad=0x33   x:02ae=0x34   x:02af=0x35   

x:02b0=0x36   x:02b1=0x37   x:02b2=0x38   x:02b3=0x39   x:02b4=0x30   x:02b5=0x31   x:02b6=0x32   x:02b7=0x33   

x:02b8=0x34   x:02b9=0x35   x:02ba=0x36   x:02bb=0x37   x:02bc=0x38   x:02bd=0x39   x:02be=0x30   x:02bf=0x31   

x:02c0=0x32   x:02c1=0x33   x:02c2=0x34   x:02c3=0x35   x:02c4=0x36   x:02c5=0x37   x:02c6=0x38   x:02c7=0x00   

 

stacklen is 44

首先开辟 lp1len = 100;  lp2len = 100;释放lp2; 如果再开辟 lp3len = 100的话;那么应该可以成功;把上面的函数这个 osal_free(lp5)加入函数中;

输出结果如下


x:01c8=0x00   x:01c9=0x00   x:01ca=0x00   x:01cb=0xFC   x:01cc=0x00   x:01cd=0x00   x:01ce=0x00   x:01cf=0x00   

x:01d0=0x00   x:01d1=0x00   x:01d2=0x00   x:01d3=0x00   x:01d4=0x00   x:01d5=0x00   x:01d6=0x00   x:01d7=0x00   

x:01d8=0x00   x:01d9=0x00   x:01da=0x00   x:01db=0x00   x:01dc=0x00   x:01dd=0x00   x:01de=0x00   x:01df=0x00   

x:01e0=0x00   x:01e1=0x00   x:01e2=0x00   x:01e3=0x00   x:01e4=0x00   x:01e5=0x00   x:01e6=0x00   x:01e7=0x00   

x:01e8=0x00   x:01e9=0x00   x:01ea=0x00   x:01eb=0x00   x:01ec=0x00   x:01ed=0x00   x:01ee=0x00   x:01ef=0x00   

x:01f0=0x00   x:01f1=0x00   x:01f2=0x00   x:01f3=0x00   x:01f4=0x00   x:01f5=0x00   x:01f6=0x00   x:01f7=0x00   

x:01f8=0x00   x:01f9=0x00   x:01fa=0x00   x:01fb=0x00   x:01fc=0x00   x:01fd=0x00   x:01fe=0x00   x:01ff=0x00   

x:0200=0x00   x:0201=0x00   x:0202=0x00   x:0203=0x00   x:0204=0x00   x:0205=0x00   x:0206=0x00   x:0207=0x00   

x:0208=0x00   x:0209=0x00   x:020a=0x00   x:020b=0x00   x:020c=0x00   x:020d=0x00   x:020e=0x00   x:020f=0x00   

x:0210=0x00   x:0211=0x00   x:0212=0x00   x:0213=0x00   x:0214=0x00   x:0215=0x00   x:0216=0x00   x:0217=0x00   

x:0218=0x00   x:0219=0x00   x:021a=0x00   x:021b=0x00   x:021c=0x00   x:021d=0x00   x:021e=0x00   x:021f=0x00   

x:0220=0x00   x:0221=0x00   x:0222=0x00   x:0223=0x00   x:0224=0x00   x:0225=0x00   x:0226=0x00   x:0227=0x00   

x:0228=0x00   x:0229=0x00   x:022a=0x00   x:022b=0x00   x:022c=0x00   x:022d=0x00   x:022e=0x00   x:022f=0x00   

x:0230=0x00   x:0231=0x00   x:0232=0x00   x:0233=0x00   x:0234=0x00   x:0235=0x00   x:0236=0x00   x:0237=0x00   

x:0238=0x00   x:0239=0x00   x:023a=0x00   x:023b=0x00   x:023c=0x00   x:023d=0x00   x:023e=0x00   x:023f=0x00   

x:0240=0x00   x:0241=0x00   x:0242=0x00   x:0243=0x00   x:0244=0x00   x:0245=0x00   x:0246=0x00   x:0247=0x00   

x:0248=0x00   x:0249=0x00   x:024a=0x00   x:024b=0x00   x:024c=0x00   x:024d=0x00   x:024e=0x00   x:024f=0x00   

x:0250=0x00   x:0251=0x00   x:0252=0x00   x:0253=0x00   x:0254=0x00   x:0255=0x00   x:0256=0x00   x:0257=0x00   

x:0258=0x00   x:0259=0x00   x:025a=0x00   x:025b=0x00   x:025c=0x00   x:025d=0x00   x:025e=0x00   x:025f=0x00   

x:0260=0x00   x:0261=0x00   x:0262=0x00   x:0263=0x00   x:0264=0x00   x:0265=0x00   x:0266=0x00   x:0267=0x00   

x:0268=0x00   x:0269=0x00   x:026a=0x00   x:026b=0x00   x:026c=0x00   x:026d=0x00   x:026e=0x00   x:026f=0x00   

x:0270=0x00   x:0271=0x00   x:0272=0x00   x:0273=0x00   x:0274=0x00   x:0275=0x00   x:0276=0x00   x:0277=0x00   

x:0278=0x00   x:0279=0x00   x:027a=0x00   x:027b=0x00   x:027c=0x00   x:027d=0x00   x:027e=0x00   x:027f=0x00   

x:0280=0x00   x:0281=0x00   x:0282=0x00   x:0283=0x00   x:0284=0x00   x:0285=0x00   x:0286=0x00   x:0287=0x00   

x:0288=0x00   x:0289=0x00   x:028a=0x00   x:028b=0x00   x:028c=0x00   x:028d=0x00   x:028e=0x00   x:028f=0x00   

x:0290=0x00   x:0291=0x00   x:0292=0x00   x:0293=0x00   x:0294=0x00   x:0295=0x00   x:0296=0x00   x:0297=0x00   

x:0298=0x00   x:0299=0x00   x:029a=0x00   x:029b=0x00   x:029c=0x00   x:029d=0x00   x:029e=0x00   x:029f=0x00   

x:02a0=0x00   x:02a1=0x00   x:02a2=0x00   x:02a3=0x00   x:02a4=0x00   x:02a5=0x00   x:02a6=0x00   x:02a7=0x00   

x:02a8=0x00   x:02a9=0x00   x:02aa=0x00   x:02ab=0x00   x:02ac=0x00   x:02ad=0x00   x:02ae=0x00   x:02af=0x00   

x:02b0=0x00   x:02b1=0x00   x:02b2=0x00   x:02b3=0x00   x:02b4=0x00   x:02b5=0x00   x:02b6=0x00   x:02b7=0x00   

x:02b8=0x00   x:02b9=0x00   x:02ba=0x00   x:02bb=0x00   x:02bc=0x00   x:02bd=0x00   x:02be=0x00   x:02bf=0x00   

x:02c0=0x00   x:02c1=0x00   x:02c2=0x00   x:02c3=0x00   x:02c4=0x00   x:02c5=0x00   x:02c6=0x00   x:02c7=0x00   

 

stacklen is 252

lp1 :012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678

lp1 is ok

lp2 :abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghi

lp2 is ok

lp3 is ok

x:01c8=0x00   x:01c9=0x00   x:01ca=0x00   x:01cb=0x2C   x:01cc=0x00   x:01cd=0x00   x:01ce=0x00   x:01cf=0x00   

x:01d0=0x00   x:01d1=0x00   x:01d2=0x00   x:01d3=0x00   x:01d4=0x00   x:01d5=0x00   x:01d6=0x00   x:01d7=0x00   

x:01d8=0x00   x:01d9=0x00   x:01da=0x00   x:01db=0x00   x:01dc=0x00   x:01dd=0x00   x:01de=0x00   x:01df=0x00   

x:01e0=0x00   x:01e1=0x00   x:01e2=0x00   x:01e3=0x00   x:01e4=0x00   x:01e5=0x00   x:01e6=0x00   x:01e7=0x00   

x:01e8=0x00   x:01e9=0x00   x:01ea=0x00   x:01eb=0x00   x:01ec=0x00   x:01ed=0x00   x:01ee=0x00   x:01ef=0x00   

x:01f0=0x00   x:01f1=0x00   x:01f2=0x00   x:01f3=0x00   x:01f4=0x00   x:01f5=0x00   x:01f6=0x00   x:01f7=0x00   

x:01f8=0x00   x:01f9=0x00   x:01fa=0x00   x:01fb=0x64   x:01fc=0x00   x:01fd=0x00   x:01fe=0x00   x:01ff=0x00   

x:0200=0x00   x:0201=0x00   x:0202=0x00   x:0203=0x00   x:0204=0x00   x:0205=0x00   x:0206=0x00   x:0207=0x00   

x:0208=0x00   x:0209=0x00   x:020a=0x00   x:020b=0x00   x:020c=0x00   x:020d=0x00   x:020e=0x00   x:020f=0x00   

x:0210=0x00   x:0211=0x00   x:0212=0x00   x:0213=0x00   x:0214=0x00   x:0215=0x00   x:0216=0x00   x:0217=0x00   

x:0218=0x00   x:0219=0x00   x:021a=0x00   x:021b=0x00   x:021c=0x00   x:021d=0x00   x:021e=0x00   x:021f=0x00   

x:0220=0x00   x:0221=0x00   x:0222=0x00   x:0223=0x00   x:0224=0x00   x:0225=0x00   x:0226=0x00   x:0227=0x00   

x:0228=0x00   x:0229=0x00   x:022a=0x00   x:022b=0x00   x:022c=0x00   x:022d=0x00   x:022e=0x00   x:022f=0x00   

x:0230=0x00   x:0231=0x00   x:0232=0x00   x:0233=0x00   x:0234=0x00   x:0235=0x00   x:0236=0x00   x:0237=0x00   

x:0238=0x00   x:0239=0x00   x:023a=0x00   x:023b=0x00   x:023c=0x00   x:023d=0x00   x:023e=0x00   x:023f=0x00   

x:0240=0x00   x:0241=0x00   x:0242=0x00   x:0243=0x00   x:0244=0x00   x:0245=0x00   x:0246=0x00   x:0247=0x00   

x:0248=0x00   x:0249=0x00   x:024a=0x00   x:024b=0x00   x:024c=0x00   x:024d=0x00   x:024e=0x00   x:024f=0x00   

x:0250=0x00   x:0251=0x00   x:0252=0x00   x:0253=0x00   x:0254=0x00   x:0255=0x00   x:0256=0x00   x:0257=0x00   

x:0258=0x00   x:0259=0x00   x:025a=0x00   x:025b=0x00   x:025c=0x00   x:025d=0x00   x:025e=0x00   x:025f=0x00   

x:0260=0x00   x:0261=0x00   x:0262=0x00   x:0263=0x64   x:0264=0x30   x:0265=0x31   x:0266=0x32   x:0267=0x33   

x:0268=0x34   x:0269=0x35   x:026a=0x36   x:026b=0x37   x:026c=0x38   x:026d=0x39   x:026e=0x30   x:026f=0x31   

x:0270=0x32   x:0271=0x33   x:0272=0x34   x:0273=0x35   x:0274=0x36   x:0275=0x37   x:0276=0x38   x:0277=0x39   

x:0278=0x30   x:0279=0x31   x:027a=0x32   x:027b=0x33   x:027c=0x34   x:027d=0x35   x:027e=0x36   x:027f=0x37   

x:0280=0x38   x:0281=0x39   x:0282=0x30   x:0283=0x31   x:0284=0x32   x:0285=0x33   x:0286=0x34   x:0287=0x35   

x:0288=0x36   x:0289=0x37   x:028a=0x38   x:028b=0x39   x:028c=0x30   x:028d=0x31   x:028e=0x32   x:028f=0x33   

x:0290=0x34   x:0291=0x35   x:0292=0x36   x:0293=0x37   x:0294=0x38   x:0295=0x39   x:0296=0x30   x:0297=0x31   

x:0298=0x32   x:0299=0x33   x:029a=0x34   x:029b=0x35   x:029c=0x36   x:029d=0x37   x:029e=0x38   x:029f=0x39   

x:02a0=0x30   x:02a1=0x31   x:02a2=0x32   x:02a3=0x33   x:02a4=0x34   x:02a5=0x35   x:02a6=0x36   x:02a7=0x37   

x:02a8=0x38   x:02a9=0x39   x:02aa=0x30   x:02ab=0x31   x:02ac=0x32   x:02ad=0x33   x:02ae=0x34   x:02af=0x35   

x:02b0=0x36   x:02b1=0x37   x:02b2=0x38   x:02b3=0x39   x:02b4=0x30   x:02b5=0x31   x:02b6=0x32   x:02b7=0x33   

x:02b8=0x34   x:02b9=0x35   x:02ba=0x36   x:02bb=0x37   x:02bc=0x38   x:02bd=0x39   x:02be=0x30   x:02bf=0x31   

x:02c0=0x32   x:02c1=0x33   x:02c2=0x34   x:02c3=0x35   x:02c4=0x36   x:02c5=0x37   x:02c6=0x38   x:02c7=0x00   

 

stacklen is 44

上面的函数只是简单的实现了内存的分配,是否能应用在真正的项目中还未可知;



推荐阅读

史海拾趣

Clulite公司的发展小趣事
  1. 创业初期
    • 描述Clulite公司的创始人或核心团队如何识别电子行业中的某个市场机遇。
    • 讲述他们是如何筹集初始资金,设立公司,并开发出第一款产品或解决方案的。
    • 可以提及公司在初创阶段面临的挑战,如技术难题、市场竞争等。
  2. 技术创新
    • 讲述Clulite如何通过研发创新,推出了一款颠覆性的产品或技术,从而获得了市场认可。
    • 详细描述这一创新过程,包括研发团队的努力、关键技术的突破等。
    • 提及这一创新如何帮助公司在市场上取得了竞争优势。
  3. 市场拓展
    • 描述Clulite如何逐步扩大市场份额,从地区市场走向全国乃至国际市场。
    • 可以讲述公司如何建立销售网络、与合作伙伴建立合作关系,以及参与行业展会等活动来推广品牌和产品。
    • 提及公司在市场拓展过程中遇到的挑战和应对策略。
  4. 品质管理
    • 讲述Clulite如何注重产品质量和客户体验,通过严格的质量控制流程来提升产品可靠性。
    • 描述公司如何建立完善的售后服务体系,为客户提供及时、专业的支持。
    • 提及这些举措如何帮助公司赢得了客户的信任和口碑。
  5. 可持续发展
    • 讲述Clulite如何关注环境保护和社会责任,推动公司的可持续发展。
    • 描述公司如何采取环保措施,减少生产过程中的污染排放。
    • 提及公司如何参与社会公益事业,回馈社会。

请注意,这些故事需要根据Clulite公司的实际情况进行调整和补充。如果你需要更具体的内容,建议查阅Clulite公司的官方网站、新闻报道或行业分析报告,以获取更详细的信息和数据。

Danaher Corporation公司的发展小趣事

随着全球化趋势的加强,丹纳赫集团开始积极拓展国际市场。通过在全球各地设立研发中心、生产基地和销售网络,丹纳赫集团成功地将产品和服务推向了全球市场。同时,丹纳赫集团还加强了与国际知名企业的合作,共同开发新技术和产品,进一步巩固了其在电子行业中的领先地位。

以上五个故事梗概概述了丹纳赫集团在电子行业中的发展历程和关键节点。如需更详细的信息和故事背景,建议查阅丹纳赫集团的官方资料或相关新闻报道。

千志电子(CCO)公司的发展小趣事

为了满足市场需求和扩大生产规模,千志电子不断加大投资力度。2014年,千志电子在湖北投资建设了千志电子科技(湖北)有限公司项目,总投资额达到5000万元人民币。该项目占地面积50亩,主要生产电阻等电子产品。预计项目建成后可实现年产值4000万元,年创利税350万元,安置劳动力120人左右。这一项目的投资建设不仅使千志电子的生产规模得到了进一步扩大,还为其未来的发展奠定了坚实基础。

Dowosemi公司的发展小趣事

随着业务的不断发展,Dowosemi公司开始积极拓展海外市场。他们通过参加国际展会、与海外客户建立合作关系等方式,将产品推向全球。在海外市场拓展的过程中,Dowosemi公司也遇到了不少挑战,但他们凭借优质的产品和服务,成功克服了这些困难。如今,Dowosemi公司的产品已经遍布全球多个国家和地区,为公司的发展注入了新的活力。

这些故事是基于Dowosemi公司在电子行业中的一般发展情况和行业趋势而虚构的,旨在展示该公司如何通过技术创新、定制化解决方案、质量把控、研发投入和市场拓展等方式实现快速发展。

德崧电子(D-SWITCH)公司的发展小趣事

技术创新是德崧电子持续发展的核心动力。公司不断加大研发投入,引进先进的生产设备和技术人才,致力于开发具有竞争力的新产品。通过不断的技术创新,德崧电子在电子开关行业中取得了多项重要成果。例如,公司成功研发出了具有自动感应功能的智能开关,实现了对灯光、温度等环境因素的自动调节。这一技术的推出不仅提高了产品的智能化水平,也为公司赢得了更多的市场份额。

Dell公司的发展小趣事

在激烈的市场竞争中,德崧电子始终坚持品质为先的经营理念。公司从原材料采购到生产加工,再到成品检验,每一个环节都严格把控,确保产品质量。这种对品质的坚守不仅赢得了客户的信任,也为公司赢得了良好的口碑。正是凭借着过硬的产品质量和优质的服务,德崧电子在电子开关行业中树立了良好的品牌形象。

问答坊 | AI 解惑

关于Linux嵌入式系统的培训效果!

想参加培训,但是不知道效果如何? 请大家来谈谈自己的经验吧~~ 谢绝销售…

查看全部问答>

串口接收问题

各位大侠好!请教一下,我利用C51的串口向S3C2440的串口1发数据,然后将该数据用串口0显示出来(串口调试工具),两个串口的波特率都是9600,奇偶校验都是一样的,为什么我收到的数据不是我发的数据,我用C51持续不断的发送十六进制的01,可我接受 ...…

查看全部问答>

一个例子看不明白

/* 打问号的地方不明白,希望大家给加下注释,谢谢了 这是一个蜂鸣器的程序(运行在arm9(mini2440)上的Linux下) */ #include #include #include #include #define PWM_IOCTL_SET_FREQ            &nb ...…

查看全部问答>

单片机技术

   单片机的经典电路时咋样的呀,希望大家给点建议啊。最好给个protel 99se的看看。…

查看全部问答>

WinCE中断处理--物理中断号与逻辑中断号的问题

各位大侠好:    小弟现在正在搞WinCE下面的中断处理,遇到了一点问题,希望大家踊跃发言,不吝赐教、    中断处理过程中,需要把物理中断号转化为系统的逻辑中断号,但是我却不怎么清楚物理中断号是怎么回事。看了不少网上 ...…

查看全部问答>

北京 诚聘 windows驱动软件开发工程师(兼或全职)

职位描述 Windows驱动程序设计和实现 职位要求 1.计算机、电子工程、通信、自动化等相关专业本科以上学历; 2.熟练掌握C/C++语言编程; 3.精通WDM, WDF编程,熟悉DriverStudio, WINDBG等开发工具; 4.深入理解Windows操作系统组成原理和内核 ...…

查看全部问答>

wince gprs 拨号的问题

我的程序是先打开串口,然后向串口写入at指令,最后调用rasdial()函数进行拨号连接,现在的问题是拨号能成功但是中间他会弹出一个终端窗口,要我们点 开始 -> 继续  才能继续走下去,我想实现不 弹出任何窗口 直接拨号连接.不知道大家有没有做 ...…

查看全部问答>

Cx51程序设计的堆栈空间计算方法

用C语言进行MCS51系列单片机程序设计是单片机开发和应用的必然趋势。Keil公司的C51编译器支持经典8051和8051派生产品的版本,通称为Cx51。应该说,Cx51是C语言在MCS51单片机上的扩展,既有C语言的共性,又有它自己的特点。本文介绍的是Cx51程序设计 ...…

查看全部问答>

TI Sitrara平台Roadmap

未来 Sitara平台低端产品亦会演进到Cortex-A8核心,这对采用TI Sitara平台开发产品的客户而言,无疑是一个重大利好消息。…

查看全部问答>