历史上的今天
今天是: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 上面的函数只是简单的实现了内存的分配,是否能应用在真正的项目中还未可知;
上一篇:基于51单片机—多功能秒表
史海拾趣
|
各位大侠好: 小弟现在正在搞WinCE下面的中断处理,遇到了一点问题,希望大家踊跃发言,不吝赐教、 中断处理过程中,需要把物理中断号转化为系统的逻辑中断号,但是我却不怎么清楚物理中断号是怎么回事。看了不少网上 ...… 查看全部问答> |
|
职位描述 Windows驱动程序设计和实现 职位要求 1.计算机、电子工程、通信、自动化等相关专业本科以上学历; 2.熟练掌握C/C++语言编程; 3.精通WDM, WDF编程,熟悉DriverStudio, WINDBG等开发工具; 4.深入理解Windows操作系统组成原理和内核 ...… 查看全部问答> |
|
我的程序是先打开串口,然后向串口写入at指令,最后调用rasdial()函数进行拨号连接,现在的问题是拨号能成功但是中间他会弹出一个终端窗口,要我们点 开始 -> 继续 才能继续走下去,我想实现不 弹出任何窗口 直接拨号连接.不知道大家有没有做 ...… 查看全部问答> |
|
用C语言进行MCS51系列单片机程序设计是单片机开发和应用的必然趋势。Keil公司的C51编译器支持经典8051和8051派生产品的版本,通称为Cx51。应该说,Cx51是C语言在MCS51单片机上的扩展,既有C语言的共性,又有它自己的特点。本文介绍的是Cx51程序设计 ...… 查看全部问答> |




