|
³»¿ë
|
AiRPOS(RT) ´Â ADS ȯ°æ°ú GNUARM Toolchain µÎ°¡Áö ¿ëÀ¸·Î ±¸Çö µÇ¾î ÀÖ½À´Ï´Ù.
±×Áß Windows ȯ°æ¿¡¼ GNUARM ȯ°æÀ» ±¸¼ºÇϰí Skyeye Simulator ¿¡¼ ±¸µ¿½ÃÄÑ
º¸¾Ò½À´Ï´Ù. ¾Æ·¡´Â ¿¹Á¦·Î ¸¸µé¾îÁø ¸î °³ÀÇ Task °¡ µ¹¾Æ°¡´Â ¸ð½ÀÀÔ´Ï´Ù.
¾Æ·¡´Â Task ¼±¾ðºÎÀÇ ÄÚµåÀÔ´Ï´Ù.
start.c ÄÚµå
/*****************************************
kernel.c for AiRPOS(RT)
Lee Gun-woo
http://airpage.org/
first: 2004-4
- 2007-12-26
- 2008-1-22 (task added)
******************************************/
#include "include.h"
/* TCB */
static TCB *pTCB_IDLE1 = NULL;
static TCB *pTCB_IDLE2 = NULL;
/* stack for Task */
char idle_stack1[128];
char idle_stack2[128];
/* stack for Task */
char tcbstack1[1024];
char tcbstack2[1024];
char tcbstack3[1024];
/* task */
void idle_task1(void);
void idle_task2(void);
/* task */
void simple_task1(void);
void simple_task2(void);
void simple_task3(void);
/* TCB */
static TCB *pTCB1 = NULL;
static TCB *pTCB2 = NULL;
static TCB *pTCB3 = NULL;
/* main entry */
int main_start(void)
{
/* tcb list init. */
TCB_init();
tickInit();
tickStart();
pTCB_IDLE1 = TCB_get(idle_task1, (int *)&idle_stack1[127]);
pTCB_IDLE2 = TCB_get(idle_task2, (int *)&idle_stack2[127]);
pTCB1 = TCB_get(simple_task1, (int *)&tcbstack1[1023]);
pTCB2 = TCB_get(simple_task2, (int *)&tcbstack2[1023]);
pTCB3 = TCB_get(simple_task3, (int *)&tcbstack3[1023]);
uart0_print("**********************\n");
uart0_print("http://airpage.org \n");
uart0_print("Lee Gun-woo \n");
uart0_print("**********************\n\n");
uart0_print("AiRPOS start...\n");
Task_sched();
while(1);
return 0;
}
/* static value */
static int t = 0;
extern int p_current_task_context;
/* task */
void simple_task1(void)
{
char temp[3];
temp[1] = '\n';
temp[2] = NULL;
while(1)
{
temp[0] = '0' + (char) t;
INT_TESTPRINT((unsigned int) "test simple_task1\n");
INT_WAITSIG(10);
//INT_TESTPRINT((unsigned int) temp);
}
}
int sum(int a, int b)
{
a = a + b;
return a;
}
int k = 0;
/* task */
void simple_task2(void)
{
while(1)
{
INT_TESTPRINT((unsigned int) "test simple_task2\n");
INT_WAITSIG(5);
//uart0_print("test simple_task2\n");
sum(k, 5);
}
}
:
:
INT_TESTPRINT ¿Í INT_WAITSIG ´Â ¼ÒÇÁÆ®¿þ¾î ÀÎÅÍ·´Æ®¸¦ »ç¿ëÇÏ¿©
±¸ÇöÇÏ¿´½À´Ï´Ù.
INT_TESTPRINT ´Â UART ·Î ½ºÆ®¸µÀ» Ãâ·ÂÇϸç,
INT_WAITSIG ´Â ÁöÁ¤µÈ Tick µ¿¾È Delay µÇ°Å³ª
¹«ÇÑÁ¤ Wait µË´Ï´Ù. task id (handle) ·Î Signal ÀÌ ¿À¸é,
ÇØÁ¦ µË´Ï´Ù.
*. ADS ÄÄÆÄÀÏ·¯´Â C±¸¹®¿¡¼ swi Ű¿öµå°¡
»ç¿ë°¡´ÉÇϳª GNU - C, CPP ¿¡¼± Áö¿øµÇÁö ¾Ê½À´Ï´Ù.
±×·¡¼ inline assembler¸¦ »ç¿ëÇß½À´Ï´Ù.
include.h ¿Í swi.c
/* for GNUARM 2007.12.26 */
#define swi_call(x) asm volatile("swi\t"#x ::: "r0", "r1", "r2", "r3")
:
:
/* for GNUARM 2007.12.26 */
int callService(unsigned int svc, int param)
{
swi_call(0x80);
return svc;
}
void callSync(int no)
{
swi_call(0x37);
}
S3C4510b ´Â ARM7TDMI Core ¸¦ »ç¿ëÇÏ´Â »ï¼º¿¡¼ ³ª¿Â Microcontroller ÀÔ´Ï´Ù.
¾î¶² °è±â·Î ÀÎÇØ 50100 º¸µå¸¦ ¼Õ´î ±âȸ°¡ ÀÖ¾ú´Âµ¥, ±×¶§ÀÇ ½ºÆå°ú À¯»çÇϰí
Ä£±ÙÇØ¼ S3C4510b¸¦ ¼±ÅÃÇß½À´Ï´Ù.^^'
À§¿¡¼ Ãâ·ÂµÇ´Â ³»¿ëµéÀº UART·Î Ãâ·Â½Ã º¸¿©Áö´Â °ÍµéÀÔ´Ï´Ù.
S3C4510b¿¡ ´ëÇÑ Á¤º¸´Â ¾Æ·¡ Âü°íÀÚ·áÀÇ S3C4510b µ¥ÀÌÅÍ ½ÃÆ® ¸µÅ©¸¦ Âü°í Çϼ¼¿ä.
Áö±Ý ºÎÅÍ´Â Windows ¿¡¼ AiRPOS¸¦ ÄÄÆÄÀÏ Çϰí, ±¸µ¿ÇÏ´Â ¿©·¯ ¹æ¹ýÁß Çϳª¸¦
¼³¸íµå¸®°Ú½À´Ï´Ù.
¸ÕÀú, WINARMÀ» ´Ù¿î·Îµå ¹Þ½À´Ï´Ù.
Windows NT/2K/XP »ç¿ëÀÚ´Â WinARM À» C:\WinARM ¿¡ ¼³Ä¡ÇÏ¿´À» °æ¿ì,
³»ÄÄÇ»ÅÍ->¼Ó¼º->°í±Þ ÅÇ->ȯ°æº¯¼ö ¿¡ ÁøÀÔ ÇÑ ÈÄ,
Path °æ·Î¿¡ ¾Æ·¡ ±×¸²Ã³·³ C:\WinARM\bin;C:\WinARM\utils\bin ¹®ÀåÀ» ³Ö½À´Ï´Ù.
Vista »ç¿ëÀÚ´Â ¾Æ·¡ ó·³ ÀÔ·ÂÇ϶ó´Â ±º¿ä.^^
C:\WinARM\libexec\gcc\arm-elf\4.1.1;C:\WinARM\bin;C:\WinARM\arm-elf\bin;C:\WinARM\utils\bin
ÀÌÈÄ, ÄܼÖâÀ» ¿¾î(½ÃÀÛ->½ÇÇà->cmd ¿£ÅÍ) ¾Æ·¡¿Í °°ÀÌ WinARM ÀÇ °æ·Î°¡ ¸Â´ÂÁö
È®ÀÎÇÕ´Ï´Ù.
AiRPOS(RT) ÀÇ ¼Ò½º Æ®¸®¿¡¼ GNU Æú´õ¿¡ µé¾î°¡ ¾Æ·¡¿Í °°ÀÌ make ¸¦ ÀÔ·ÂÇÏ¿© ºôµå
ÇÕ´Ï´Ù.
À̷νá, AiRPOS(RT) ÀÇ ºôµå´Â ¿Ï·áµÇ¾ú½À´Ï´Ù. ÀÌÁ¦, µ¿ÀÛ ¸ð½ÀÀ» È®ÀÎÇϱâ À§ÇØ
skyeye ¸¦ ½ÇÇàÇØ¾ß ÇÕ´Ï´Ù. ÀÌ¿¡ ¾Õ¼ skyeye ´Â cyg-win ȤÀº mingw ȯ°æÀ» ÇÊ¿ä·Î
ÇÕ´Ï´Ù.(¹°·Ð Windows¿¡¼¿ä...^^)
Mingw ȤÀº cyg-win À» ¼³Ä¡ÇÕ´Ï´Ù. (¿©±â¼´Â ¾ð±ÞÇÏÁö ¾Ê½À´Ï´Ù.^^)
http://gro.clinux.org/frs/?group_id=327&release_id=808ÀÇ °æ·Î¿¡¼ skyeye on Windows Ç׸ñ¿¡ ÀÖ´Â
Windows ¹öÀüÀÇ skyeye ¸¦ ³»·Á¹Þ¾Æ ÀûÀýÇÑ °æ·Î¿¡ ¾ÐÃàÀ» DZ´Ï´Ù.
±×¸®°í, Mingw ȤÀº cyg-win ȯ°æÀ» ¼öÇàÇÑ ÈÄ, skyeye °¡ ÀÖ´Â °æ·Î·Î ÁøÀÔÇÕ´Ï´Ù.
skyeye °æ·Î¿¡ µé¾î°¡ skyeye.sh ¸¦ ½ÇÇàÇÕ´Ï´Ù.
±×·¯¸é, skyeye.sh ´Â ¾Æ·¡ ±×¸²Ã³·³ ¼öÇàÇÒ ELF À̹ÌÁö°¡ ÀÖ´Â °æ·Î¸¦ ¹¯½À´Ï´Ù.
¾Æ·¡ ±×¸²Ã³·³ airpos ÆÄÀÏÀ» ¼±ÅÃÇÕ´Ï´Ù.
skyeye ´Â ¼±ÅÃµÈ À̹ÌÁö°¡ ÀÖ´Â °æ·Î¿¡¼ MPUÀÇ Á¾·ù¿Í ȯ°æÀ» ¼³¸íÇØÁÙ skyeye.conf
ÆÄÀÏÀ» ÀÚµ¿À¸·Î ã¾Æ ȯ°æÀ» ¼³Á¤ÇÕ´Ï´Ù.
S3C4510b based target À» À§ÇÑ skyeye.conf ³»¿ëÀº ¾Æ·¡¿Í °°½À´Ï´Ù.
#skyeye config file sample
cpu: arm7tdmi
mach: s3c4510b
mem_bank: map=M, type=RW, addr=0x00000000, size=0x00800000
mem_bank: map=M, type=RW, addr=0x04000000, size=0x00800000
mem_bank: map=M, type=R, addr=0x01000000, size=0x00200000
mem_bank: map=I, type=RW, addr=0x03ff0000, size=0x00010000
#net: type=s3c4510b, hostip=10.0.0.2, ethmod=tuntap
#dbct:state=on
airpos À̹ÌÁö°¡ ¼±ÅõǸé ÄܼÖȸ鿡¼ ¼öÇàÀ» ±â´Ù¸®´Â ÇÁ·ÒÇÁÆ®°¡ ³ªÅ¸³³´Ï´Ù.
"run" À» ÀÔ·ÂÇÏ¸é ¾Æ·¡¿Í °°ÀÌ AiRPOS(RT) ÀÇ ±âº» TASK µéÀÌ µµ´Â ¸ð½ÀÀ» È®ÀÎ
ÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.
|
|