资源简介
本程序经历了华南赛区决赛的检验,通过此程序助我们顺利冲进国赛。
代码片段和文件信息
/*
* File: alloc.c
* Purpose: generic malloc() and free() engine
*
* Notes: 99% of this code stolen/borrowed from the K&R C
* examples.
*
*/
#include “common.h“
#include “stdlib.h“
#pragma section = “HEAP“
/********************************************************************/
/*
* This struct forms the minimum block size which is allocated and
* also forms the linked list for the memory space used with alloc()
* and free(). It is padded so that on a 32-bit machine all malloc‘ed
* pointers are 16-byte aligned.
*/
typedef struct ALLOC_HDR
{
struct
{
struct ALLOC_HDR *ptr;
unsigned int size;
} s;
unsigned int align;
unsigned int pad;
} ALLOC_HDR;
static ALLOC_HDR base;
static ALLOC_HDR *freep = NULL;
/********************************************************************/
void
free (void *ap)
{
ALLOC_HDR *bp *p;
bp = (ALLOC_HDR *)ap - 1; /* point to block header */
for (p = freep; !((bp > p) && (bp < p->s.ptr)) ; p = p->s.ptr)
{
if ((p >= p->s.ptr) && ((bp > p) || (bp < p->s.ptr)))
{
break; /* freed block at start or end of arena */
}
}
if ((bp + bp->s.size) == p->s.ptr)
{
bp->s.size += p->s.ptr->s.size;
bp->s.ptr = p->s.ptr->s.ptr;
}
else
{
bp->s.ptr = p->s.ptr;
}
if ((p + p->s.size) == bp)
{
p->s.size += bp->s.size;
p->s.ptr = bp->s.ptr;
}
else
{
p->s.ptr = bp;
}
freep = p;
}
/********************************************************************/
void *
malloc (unsigned nbytes)
{
/* Get addresses for the HEAP start and end */
#if (defined(CW))
extern char __HEAP_START;
extern char __HEAP_END[];
#elif (defined(IAR))
char *__HEAP_START = __section_begin(“HEAP“);
char *__HEAP_END = __section_end(“HEAP“);
#endif
ALLOC_HDR *p *prevp;
unsigned nunits;
nunits = ((nbytes + sizeof(ALLOC_HDR) - 1) / sizeof(ALLOC_HDR)) + 1;
if ((prevp = freep) == NULL)
{
p = (ALLOC_HDR *)__HEAP_START;
p->s.size = ( ((uint32)__HEAP_END - (uint32)__HEAP_START)
/ sizeof(ALLOC_HDR) );
p->s.ptr = &base;
base.s.ptr = p;
base.s.size = 0;
prevp = freep = &base;
}
for (p = prevp->s.ptr; ; prevp = p p = p->s.ptr)
{
if (p->s.size >= nunits)
{
if (p->s.size == nunits)
{
prevp->s.ptr = p->s.ptr;
}
else
{
p->s.size -= nunits;
p += p->s.size;
p->s.size = nunits;
}
freep = prevp;
return (void *)(p + 1);
}
if (p == freep)
return NULL;
}
}
/**************************************************
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-04-01 20:51 决赛程序\
文件 171 2014-02-22 11:45 决赛程序\TEST1.eww
目录 0 2014-04-01 20:51 决赛程序\build\
目录 0 2014-11-05 20:15 决赛程序\build\TEST1\
目录 0 2014-04-01 20:51 决赛程序\build\TEST1\Debug\
目录 0 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Exe\
文件 60551 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Exe\fire_gpio_demo.hex
文件 305708 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Exe\fire_gpio_demo.out
文件 21559 2014-07-28 15:38 决赛程序\build\TEST1\Debug\Exe\fire_gpio_demo.sim
目录 0 2014-07-28 15:34 决赛程序\build\TEST1\Debug\List\
文件 36111 2014-07-28 15:34 决赛程序\build\TEST1\Debug\List\fire_gpio_demo.map
目录 0 2014-11-05 20:15 决赛程序\build\TEST1\Debug\Obj\
文件 21864 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Obj\FTM.o
文件 43508 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Obj\LCDinit.o
文件 14348 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Obj\LED.o
文件 9812 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Obj\PIT.o
文件 2361 2014-08-17 13:34 决赛程序\build\TEST1\Debug\Obj\TEST1.pbd
文件 26584 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Obj\adc.o
文件 11840 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Obj\alloc.o
文件 17044 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Obj\arm_cm4.o
文件 8656 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Obj\assert.o
文件 54868 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Obj\chu_li.o
文件 1760 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Obj\crt0.o
文件 27876 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Obj\data.o
文件 9312 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Obj\delay.o
文件 22188 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Obj\dma.o
文件 8552 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Obj\exti.o
文件 18180 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Obj\gpio.o
文件 10440 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Obj\io.o
文件 19212 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Obj\isr.o
文件 9704 2014-07-28 15:34 决赛程序\build\TEST1\Debug\Obj\key.o
............此处省略249个文件信息
相关资源
- 《轻松玩转ARM Cortex-M0+微控制器基于飞
- 飞思卡尔电磁直立完整的程序
- 飞思卡尔第十届智能车比赛摄像头组
- 十二届恩智浦智能车山东省第十
- 飞思卡尔MC9S12X128单片机的认识与实践
- 蓝桥杯 单片机设计 历年决赛真题及答
- 飞思卡尔MPC5606S图形开发库part2共2部分
- MC9S08DZ60 源程序
- 飞思卡尔智能车硬件pcb
- 飞思卡尔MC9S12G超详细资料
- 恩智浦飞思卡尔电机驱动PCB板4路BTN
- 第11届恩智浦智能小车摄像头国赛程序
- 飞思卡尔智能车程序
- 直立行车参考设计方案
- kea128中文参考手册
- K60_DMP_3_PID输出
- 飞思卡尔P1010原理图
- 飞思卡尔16位单片机 MC9S12DP512中文手册
- 双电机驱动btn 飞思卡尔智能车
- 上海交大的飞思卡尔智能车模型介绍
- SD卡调试源代码 基于飞思卡尔MC9S12
- 飞思卡尔 MC9S12XS128各模块程序
- 飞思卡尔 明远智睿 I.MX6核心板 I.MX6开
- 飞思卡尔 程序 PIT PWM RTI PH中断 SCI A
- 飞思卡尔MC9S12XS128详细学习资料不只是
- 基于飞思卡尔的小型发动机ECU源代码
- 第十三届飞思卡尔竞速比赛规则(完
- 卓大大系列智能车电磁组3篇论文pdf
- 单片机 飞思卡尔小车 原理图 PCB 源代
- 飞思卡尔大部分元件库,ad下使用
评论
共有 条评论