【发布时间】:2014-01-15 17:10:07
【问题描述】:
我使用的是 MSP430G2553 微控制器(500 字节的 SRAM 和 16kB 的闪存)。我有 4 个环形缓冲区在我的代码初始化时分配内存(使用 malloc)
typedef struct
{
unsigned char Head;
unsigned char Tail;
unsigned char Size;
unsigned char *Buffer;
} RingBuffer;
void RB_Init(RingBuffer *RB)
{
RB->Size = 32;
RB->Tail = 0;
RB->Head = 0;
RB->Buffer = (unsigned char*) malloc(RB->Size);
}
基本上我调用 RB_Init 四次来创建这些环形缓冲区。当大小(环形缓冲区的容量)为 16 时,一切都很好,我检查了所有四个,它们每个都有一个内存地址。 当我将大小更改为 32 时,只有 2 个获得内存地址,最后两个没有分配内存。
根据我从代码编写器工作室获得的内存映射(如下所示),看起来我还有很多空间(在 RAM 和 FLASH 下)。 当我的大小为 32 字节时,为什么最后两个缓冲区数组没有获得地址(为什么我似乎达到了 64 字节的限制?)
******************************************************************************
MSP430 Linker PC v4.1.5
******************************************************************************
>> Linked Fri Dec 27 22:53:28 2013
OUTPUT FILE NAME: <xxx.out>
ENTRY POINT SYMBOL: "_c_int00" address: 0000c672
MEMORY CONFIGURATION
name origin length used unused attr fill
---------------------- -------- --------- -------- -------- ---- --------
SFR 00000000 00000010 00000000 00000010 RWIX
PERIPHERALS_8BIT 00000010 000000f0 00000000 000000f0 RWIX
PERIPHERALS_16BIT 00000100 00000100 00000000 00000100 RWIX
RAM 00000200 00000200 000000cf 00000131 RWIX
INFOD 00001000 00000040 00000000 00000040 RWIX
INFOC 00001040 00000040 00000000 00000040 RWIX
INFOB 00001080 00000040 00000000 00000040 RWIX
INFOA 000010c0 00000040 00000000 00000040 RWIX
FLASH 0000c000 00003fe0 00000802 000037de RWIX
INT00 0000ffe0 00000002 00000000 00000002 RWIX
INT01 0000ffe2 00000002 00000000 00000002 RWIX
INT02 0000ffe4 00000002 00000002 00000000 RWIX
INT03 0000ffe6 00000002 00000002 00000000 RWIX
INT04 0000ffe8 00000002 00000000 00000002 RWIX
INT05 0000ffea 00000002 00000000 00000002 RWIX
INT06 0000ffec 00000002 00000002 00000000 RWIX
INT07 0000ffee 00000002 00000002 00000000 RWIX
INT08 0000fff0 00000002 00000000 00000002 RWIX
INT09 0000fff2 00000002 00000002 00000000 RWIX
INT10 0000fff4 00000002 00000000 00000002 RWIX
INT11 0000fff6 00000002 00000000 00000002 RWIX
INT12 0000fff8 00000002 00000000 00000002 RWIX
INT13 0000fffa 00000002 00000000 00000002 RWIX
INT14 0000fffc 00000002 00000000 00000002 RWIX
RESET 0000fffe 00000002 00000002 00000000 RWIX
【问题讨论】: