rsystem.c
来自「最新版IAR FOR ARM(EWARM)5.11中的代码例子」· C语言 代码 · 共 147 行
C
147 行
//-----------------------------------------------------------------------------
// RSYSTEM
//-----------------------------------------------------------------------------
#include "rsystem.h"
#include "hal_uart.h"
#include <stdlib.h>
#include <string.h>
//-----------------------------------------------------------------------------
void rDiagMessage (const char * Msg)
{
static u8 init = 0;
if (init == 0)
{
UART_Init ();
UART_BaudRate_Config (9600);
UART_CR_Config (UART_MODE,UART_8BIT_DATA);
UART_CR_Config (UART_STOPBIT,UART_1_STOPBIT);
UART_CR_Config (UART_PARITY,UART_NO_PARITY);
UART_CR_OnOffConfig (UART_RX_ENABLE,ENABLE);
UART_CR_OnOffConfig (UART_FIFO_ENABLE,ENABLE);
UART_CR_OnOffConfig (UART_RUN,ENABLE);
init = 1;
}
UART_StringSend ((vu8*)Msg);
}
//-----------------------------------------------------------------------------
void rExit (const char * Msg)
{
rDiagMessage (Msg);
exit(1);
}
//-----------------------------------------------------------------------------
void * rmalloc (u32 Size, const char * Msg)
{
if (Size == 0)
return (0);
void * Result = malloc(Size);
if (Result == NULL)
{
rDiagMessage("rmalloc: Out of memory.");
rDiagMessage(Msg);
exit(1);
}
memset(Result,0,Size);
return (Result);
}
//-----------------------------------------------------------------------------
void rfree (void * Memory)
{
free(Memory);
}
//-----------------------------------------------------------------------------
#define HOW_MANY_UNITS 32
#pragma data_alignment=16
static u8 memory16B[16*HOW_MANY_UNITS];
#pragma data_alignment=4
static vu8 memory16Block[HOW_MANY_UNITS];
//-----------------------------------------------------------------------------
void * rmalloc16B (const char * Msg)
{
u8 i;
void * Result = NULL;
for (i=0;i<HOW_MANY_UNITS;i++)
if (memory16Block[i] == 0)
{
memory16Block[i] = 1;
Result = (void*)(&memory16B[16*i]);
memset(Result,0,16);
return (Result);
}
if (Result == NULL)
{
rDiagMessage("rmalloc16B: Out of memory.");
rDiagMessage(Msg);
exit(1);
}
return (Result);
}
//-----------------------------------------------------------------------------
void rfree16B (void * Memory)
{
u8 i;
for (i=0;i<HOW_MANY_UNITS;i++)
if (&memory16B[16*i] == Memory)
{
memory16Block[i] = 0;
return;
}
}
//-----------------------------------------------------------------------------
#pragma data_alignment=256
static u8 memory256B[256];
#pragma data_alignment=4
static vu8 memory256Block = 0;
//-----------------------------------------------------------------------------
void * rmalloc256B (const char * Msg)
{
void * Result = NULL;
if (memory256Block == 0)
{
Result = (void*)(&memory256B);
memory256Block = 1;
memset(Result,0,256);
return (Result);
}
if (Result == NULL)
{
rDiagMessage("rmalloc256B: Out of memory.");
rDiagMessage(Msg);
exit(1);
}
return (Result);
}
//-----------------------------------------------------------------------------
void rfree256B (void * Memory)
{
if (Memory == &memory256B)
memory256Block = 0;
}
//-----------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?