ori r24, 0x03 ; Modify 하고, out PORTD, r24 ; Write 한다. 위예는명령이하나실행된다음, 나머지명령이실행되기전에 Interrupt가발생할수있기때문에 non-atomic Operation 이다. 다음의시나리오는 2개의 Task가 PORT
|
|
- 윤석 변
- 7 years ago
- Views:
Transcription
1 AVR FreeRTOS : Resource Management 1. 이장의개요 Multitasking System에서한 Task가어떤 Resource를사용하고있는도중에 Running State에서벗어나는일이생길수있고, 이상태에서다른 Task나 Interrupt가동일한 Resource를사용하려고시도할수있다. 이경우 Data 가충돌하거나손상될수있다. 다음은이러한경우가발생할수있는예이다. A. Accessing Peripherals 다음시나리오는두장치가하나의 LCD에 Data를서로쓰려고시도하는경우의예이다. i. Task A가실행되고있는중에문자열 Hello world 를 LCD에출력하기시작하였다. ii. iii. Task A는문자열을 Hello w 까지출력한상태에서 Task B에게 pre-empted(task A의 Run 상태가 Task B에의하여대체됨 ) 되었다. Task B가 Blocked State로들어가기전에 Abort, Retry, Fail? 메시지를 LCD에출력한다. iv. 다시 Task A가 Run 상태가되어 orld 를 LCD에출력한다. 그결과 LCD에는출력문자열이서로충동하여 Hello wabort, Retry, Fail?orld 이출력된다. B. Read, Modify, Write Operation 아래의프로그램예는 C Code와이 Code의 AVR128 프로세서 Assembly Language Output 이다. 이예에서먼저 PORTD의값을 Rg24에읽고, 이 Rg의값을 Modify 하고, 그결과를다시 PORTD에쓴다. 이러한과정을 Read, Modify, Write Operation 이라한다. PORTD = 0x03; // C code Program // Assembly Language Output in r24, PORTD ; PORTD 값을읽고,
2 ori r24, 0x03 ; Modify 하고, out PORTD, r24 ; Write 한다. 위예는명령이하나실행된다음, 나머지명령이실행되기전에 Interrupt가발생할수있기때문에 non-atomic Operation 이다. 다음의시나리오는 2개의 Task가 PORTD를 Update 하려고시도하는경우이다. i. Task A가 PORTD의값을 Load 한다. : Read Operation ii. Task A 가 Modify, Write Operation 부분까지완료하기전에 Task B 에게 pre-empted(task A 의 Run 상태가 Task B 에의하여대체 됨 ) 되었다. iii. Task B가 PORTD를 Updates 하고, Blocked 상태가된다. iv. Task A가다시 pre-empted 되어, Rg24의값을 Modify 하고, PORTD를 Update 한다. 위의시나리오에서 Task B 에서수행한 Operation은 Task A에의하여변경되었기때문에결과적으로 PORTD의값이잘못된결과일수있다. 위예는 Peripheral Register(I/O Port) 를사용한예이지만동일한일이 Global Variables에도발생할수있다. C. Variable의 Non-atomic Access 프로세서 Architecture 보다큰변수 ( 프로세서가메모리에 R/W 할때한번에 R/W 하는 Word 폭보다더큰폭 (Bit 수 ) 을갖는변수 ) 를 Updating 하는경우도또다른형태의 Non-atomic Operation 이다. D. Function Reentrancy 만약함수가 Task나 Interrupt 로부터 Call 되고, 아직종료되지않은상태에서다른하나이상의 Task나 Interrupt 로부터안전하게 Call 될수있다면이함수는 Reentrant 한함수이다. 각 Task는자신의 Stack과자신의 Core Register Set의값을유지 ( 보존 ) 하고있다. 만약함수가 Register에저장된 Data와 Stack에저장
3 된 Data(Local Variable) 만을사용한다면이함수는 Reentrant 한함 수이다. 아래예는 Reentrant Function 의예이다. /* Function에 Pass되는 Parameter는 CPU Register 또는 Stack를이용하기때문에, 각 Task는자신의 Stack과자신의 Core Register Set 의값을유지 ( 보존 ) 하여야한다. 는조건을충족한다. */ Int AddInt( int var1, var2) /* 이함수는 Register에저장된 Data와 Stack을이용하는 Data(Local Variable) 만을사용한다. */ Int sum; Sum = var1 + var2; /* Return 값은 Register와 Stack 만을이용하여전달한다. Return sum; 아래예는 Not Reentrant Function의예이다. /* sum은 Global Variable로각 Task가이함수를 Call 할때변경될수있다. */ Int sum; Int AddTen( int var1)
4 /* 변수 var2는 Static 변수로 Stack에할당되지않는다. 각 Task 가이함수를 Call 할때이변수가복사되어반복사용된다. */ static int var2 = 10; sum = var1 + var2; return sum; Mutual Exclusion Task 사이에공유되는자원과 Task와 Interrupt 사이에공유되는자원은 Mutual Exclusion 기술로관리되어야한다. 한 Task가이용하기시작한자원 (Resource) 은이 Task의사용이종료되어 Returned 될때까지배타적으로사용되어야한다. FreeRTOS는 Mutual Exclusion을구현하는방법을제공한다. 그러나최상의방법은하나의자원은하나의 Task만사용하도록설계하는것이최선이다. 이장의개요 i. 언제, 왜 Resource Management와 Control이필요한가? ii. Critical Section 이란무엇인가? iii. Mutual Exclusion의의미는? iv. Scheduler를 Suspend 한다는의미는? v. Mutex를어떻게사용하나? vi. vii. Gatekeeper Task의생성과사용에대하여 Priority Inversion에대한이해와어떻게 Priority 상속이 Priority Inversion 때문에발생하는문제를해결 ( 완전한해결은아님 ) 하는지에대한이해
5 2. Critical Sections과 Scheduler의 Suspending A. Basic Critical Sections(Regions) Basic Critical Sections은아래의예와같이 taskentyer_critical(), 과 taskexit_critical() Macros에둘러싸인 Code 영역이다. /* Critical Section 내부의 Code가실행되는동안에는 Interrupted 되지않는다 */ taskenter_critical(); /* taskenter_critical() 과 taskexit_critical() 사이에서는다른 Task로 Switch 되지않는다. Priority가 configmax_syscall_interrupt_priority 상수보다높은 Interrupt는 Interrupt Nesting를할수있다. 그러나이들 Interrupt에서 FreeRTOS API 함수를 Call 하는것은허용되지않는다. */ PORTD = 0x01; taskexit_critical(); 다음예는여러개의 Task에서 Call 되는 vprintstring() 함수의예이다. 이예에서는한 Task에서표준출력장치를사용중일때이장치를다른 Task에서 Access 하는것을 Protect 하기위하여 Critical Section를사용한다. Void vprintstring( const char *pcstring ) /* 문자열을표준장치에출력하는동안다른 Task가이장치를사용하지못하도록하는데 Mutual Exclusion의초보적인방법으로 Critical Section를사용하였다. */ taskenter_critical();
6 printf( %s, pcstring ); fflush( stout ); taskexit_critical(); 위예와같이 Critical Section를사용하는것은매우초보적인방법으로만약 Critical Section 내의프로그램 Code가길어지면 Interrupt 응답이지연되는등문제가발생할수있기때문에 Critical Section내의 Code 길이는가능한짧게하여야한다. 위예와같이 Critical Section 내에터미널장치에출력하는 Code가있는경우에터미널장치의동작은매우느리기때문에 Interrupt를사용하는시스템에오동작이발생할가능성이크다. 그러므로이러한방식으로자원 ( 프린터등 ) 을사용하는것은피하여야한다. Critical Section은 Kernel이 Nesting Depth를 Count 하기때문에 Nest 될수있다. Nesting Counter 값이 0 일때 Critical Section이종료된다. B. Scheduler의 Suspending(or Locking) Critical Section은 Scheduler를 Suspending 하는것에의하여생성될수있다. Scheduler의 Suspending은 Scheduler을 Locking 하는것과같다. Scheduler를 Suspending 하는것에의하여구현된 Critical Section은다른 Task에의하여해당영역 Code를 Protect 하는것만가능하다. 이경우 Interrupt은사용가능하기때문에 Interrupt에의한 Access 가발생할가능성이있다. C. vtasksuspendall() API 함수 vtasksuspendall() API Function의 Prototype void vtasksuspendall ( void);
7 Scheduler는 vtasksuspendall() 함수를 Call 하는것에의하여 Suspend 된다. Scheduler를 Suspending 하면 Context Switch은발생하지않지만, Interrupt는 Enable 될수있다. 만약 Scheduler가 Suspending 된동안 Interrupt에의한 Context Switching 요구가발생하면, 그요구는 Hold 되고, Scheduler가 Un-suspended 된후에실행된다. FreeRTOS API 함수는 Scheduler가 Suspending 된동안 Call 될수없다. D. xtaskresumeall() API 함수 xtaskresumeall() API Function의 Prototype portbase_type xtaskresumeall ( void); Scheduler 는 xtaskresumeall() 함수를 Call 하는것에의하여 Unsuspend 된다. Returned value Returned value Description Scheduler가 Suspending 된동안요구된 Context Switch는 Hold 되었다가 Scheduler가 Un-suspended 된후 ( 그러나 xtaskresumeall() 함수가 Return 되기전 ) 에실행된경우 pdtrue 가 Return 된다. 그이외의경우에는 pdfalse 가 Return 된다. vtasksuspendall() 과 xtaskresumeall() 는 Kernel 이 Nesting Depth 를 Count 하기때문에 Nest 될수있다. Nesting Counter 값이 0 일때 Scheduler 는 Un-suspended 된다. 다음예는 Scheduler 를 Suspend 하는방법에의하여터미널출력을 Protect 하는예이다. Void vprintstring( const char *pcstring )
8 /* 문자열을표준장치에출력하는동안다른 Task가이장치를사용하지못하도록하기위하여 Scheduler를 Suspend 하는방법에의하여 Mutual Exclusion를구현하였다. */ vtasksuspendscheduler(); printf( %s, pcstring ); fflush( stout ); xtaskresumescheduler(); 3. Mutexes (and Binary Semaphores) Mutex는 Binary Semaphore의특별한형태로 2개이상의 Task가자원을공유할때사용한다. MUTEX는 MUTual Exclusion 의의미이다. Mutex를이용하여자원을공유하는경우, Task가자원을이용하기위하여는먼저 Token을 Take 하여야한다. Token을갖은 Task는자원의사용이종료되면 Token을 Give 하여다른 Task가자원을사용할수있도록하여야한다. 이러한과정의예는아래그림과같다.
9 Mutex 를사용한 Mutual Exclusion 의구현 Mutex 는 Resource 를보호한다 Task A Task B Resource 는 Mutex 에의하여보호된다 Guarded Resource 2 개의 Task 가자원을사용하기를원한다. 그러나아직 Mutex 가 Token 을갖고있기때문에 Task 는자원을 Access 하지못한다 Task A xsemaphoretake() Task B Guarded Resource Task A 가 Token 을획득하고자원을사용한다. Task A Task B xsemaphoretake() X Guarded Resource Task B 가동일한 Mutex Take 를시도한다. 그러나아직 Task A 가 Token 를가지고있기때문에 Task B 는자원을사용할수없다.
10 Task A xsemaphorgive() Task B Guarded Resource xsemaphoretake() Task B 는 Blocked State 가되어 Mutex 를 Take 할수있기를기다리고있다. Task A 가 Resource 사용을종료하고 Token 을 Give 한다. Task A Guarded Task B Resource xsemaphoretake() Task B 가 Un-Blocked 되고, Mutex 를획득하여 Resource 를사용한다. Task A Guarded Task B Resource xsemaphoregive() Task B 가 Resource 사용을종료하고 Token 을 Give 하여 Mutex 는다시두 Task 가사용가능한상태가된다.
11 A. xsemaphorecreatemutex() API 함수 Mutex 는 Semaphore 의한형태이다. FreeRTOS Semaphore 의여러형태의 Handle 은모두 xsemaphorehandle Type 변수에저장된다. Mutex 는사용되기전에생성되어야한다. Mutex Type Semaphore 는 xsemaphorecreatemutex() API 함수에의하여생성된다. xsemaphorecreatemutex() API 함수의 Prototype xsemaphorehandle xsemaphorecreatemutex( void ) Returned value Returned value Description NULL : Mutex data를저장하기위한 Memory 부족등의이유로 Mutex 생성에실패한경우 Non-NULL : Mutex가성공적으로생성되고 Mutex의 Handle이 Return 된다. B. MUTEX 를이용한자원관리프로그램예 1) RT_mutex_LED // 실험목표 // Mutex Semaphore 를이용한 Resource Management // vtasksuspend, vtaskresume 를이용한 Task State Management // // 실험방법 // 처음프로그램이실행되면 LED0, LED1, LED2 가랜덤한속도로점멸한다. ( vled1task, vled2task, vled3task 가모두 Running 하고있는상태 ) // SW0 를누르면 vled1task 이 Suspending 되고 vled2task, vled3task 만 Running. // SW1 를누르면 vled1task 이다시 Running 상태가되어 LED0, LED1, LED2 가모두점멸한다. // // LED // LED 0Bit : vled1task 의출력 ( vled1task 이 Mutex Semaphore 를획득하였을때 Turn On 된다. // LED 1Bit : vled2task 의출력 ( vled2task 이 Mutex Semaphore 를획득하였을때 Turn On 된다. // LED 2Bit : vled3task 의출력 ( vled3task 이 Mutex Semaphore 를획득하였을때 Turn On 된다. // LED 6Bit : vled1task 이 Suspending 상태일때 Turn On 된다.
12 // LED 7Bit : vled1task 이 Running 상태일때 Turn On 된다. #include <stdio.h> #include <stdlib.h> #include <avr/io.h> #include <avr/interrupt.h> #include <compat/deprecated.h> //FreeRTOS include files #include "FreeRTOS.h" #include "task.h" #include "croutine.h" #include "semphr.h" //User include files #define SW_DEBOUNCE_TIME 20 // xsemaphorehandle type 의변수로서 mutex type semaphore 를참조하는데이용한다. // LED 를배타적으로사용할수있도록하는데사용한다. xsemaphorehandle xmutex; // xsemaphorehandle type 의변수로서 Binary type semaphore 를참조하는데이용한다. // Switch Interrupt(Interrupt0,1) 과 Switch Handling Task(vtaskControlTask) 을동기시키는데사용한다. xsemaphorehandle xkeyinsemaphore = NULL; xtaskhandle xhandlecontrol, xhandleled1, xhandleled2, xhandleled3; unsigned portbase_type taskpriorityno; void vledcontrol(char ledno) // Semaphore 획득에실패한 Task 는 Semaphore 를획득할때까지 Blocking 상태가된다. // Semaphore 를획득하면자원사용을완료할때까지자원을사용할수있다. xsemaphoretake( xmutex, portmax_delay ); // 만약 Semaphore 를성공적으로획득한경우아래 Code 가실행된다.
13 PORTF &= ~0x0f; PORTF = (1 << ledno); // LCD 또는프린터에출력하는경우처럼한번자원을점유하면일정시간사용하는효과를주기위함. vtaskdelay( 100 ); // 사용이완료된자원 (Resource) 을되돌려준다. xsemaphoregive( xmutex ); // vledtask 의 Instance 3 개 (vled1task, vled2task, vled3task) 가생성되어실행되고, // 각각의 Instance 는 "0", "1", "2" 를인수로전달받는다. // 전달받은인수를수로변환하여해당위치의 LED 를 Turn On 한다. void vledtask( void *pvparameters ) char LEDTaskNo, *pcchar; pcchar = ( char * ) pvparameters; // 문자열 Pointer(*pvParameters) 에의하여전달받은문자를 LEDTaskNo 에저장 LEDTaskNo = *pcchar; // LEDTaskNo 에저장돤숫자문자를정수로변환한다. LEDTaskNo -= '0'; for( ;; ) // Task에서직접자원을사용하는함수를 Call 한다. // Mutex를획득에성공하면자원을사용할수있고, // 실패하면이 Task 보다우선도가낮은 Task가자원을사용하고있는경우에도먼저 Mutex를획득한 Task가 Give 할때까지 Blocked 상태가지속된다. // 점멸할 LED 번호를 vledcontrol 함수에전달한다. vledcontrol( LEDTaskNo ); // 이 Task 가자원을사용한후, 랜덤하게발생된지연시간동안 Blocked 상태에있도록하여, 낮은우선도의 Task 가자원을사용할수있는기회를준다. vtaskdelay( ( rand() & 0x03FF ) );
14 // SW0, SW1 의상태에따라 LED1Task 을 Suspending 또는 Running 상태되도록제어한다. void vtaskcontroltask( void *pvparameters ) PORTF = 0x80; // vled1task : Running State for( ;; ) if(xsemaphoretake( xkeyinsemaphore, portmax_delay ) == pdtrue) vtaskdelay(sw_debounce_time); // SW0 가 Push 되면 vled1task 이 Suspending 되고 vled2task, vled3task 만 Running. if((pind & 0x01) == 0x00) // SW0 가 Push 되면 vled1task 를 Suspending 상태로천이시킨다. vtasksuspend(xhandleled1); PORTF = 0x40; // vled1task 이 Suspended State 인것을 LED 에표시한다. // SW1 가 Push 되면 vled1task 이다시 Running 상태가되어 LED0, LED1, LED2 가모두점멸한다. if((pind & 0x02) == 0x00) // SW1 가 Push 되면 vled1task 를 Running 상태로천이시킨다. vtaskresume(xhandleled1); PORTF = 0x80; // vled1task 이 Running State 인것을 LED 에표시한다. EIMSK = 0x03; // External Interrupt 0, 1 Enable static void init_device(void); portshort main(void) init_device();
15 // Semaphore 는사용하기전에생성되어야한다.. // Mutex type semaphore 를 create 한다. xmutex = xsemaphorecreatemutex(); vsemaphorecreatebinary( xkeyinsemaphore ); // LED 제어 Task 는각각 Pseudo Random 하게 Delay 된다. // Pseudo random delay 를발생시키기위한 Seed Number(random) 를설정한다. srand( 567 ); // Semaphore 가성공적으로생성되었는지확인한다. if( (xmutex!= NULL) & (xkeyinsemaphore!= NULL) ) xtaskcreate(vtaskcontroltask, (signed portchar *) "vtaskcontroltask", configminimal_stack_size, NULL, tskidle_priority + 4, &xhandlecontrol ); // vledtask 의 Instance 3 개 (vled1task, vled2task, vled3task) 가생성된다. // 각각의 Instance 는 "0", "1", "2" 를인수로전달한다. xtaskcreate(vledtask, (signed portchar *)"vled1task", configminimal_stack_size, "0", tskidle_priority + 1, &xhandleled1 ); xtaskcreate(vledtask, (signed portchar *)"vled2task", configminimal_stack_size, "1", tskidle_priority + 1, &xhandleled2 ); // vprint3task 의 Priority 를가장높게한다. // 그러나 vprint1task, vprint2task 가자원을먼저선점하면자원사용이완료될때까지 Blocked 상태에있게된다. xtaskcreate(vledtask, (signed portchar *)"vled3task", configminimal_stack_size, "2", tskidle_priority + 2, &xhandleled3 ); // RunSchedular vtaskstartscheduler(); for(;;) static void init_device(void) cli(); //disable all interrupts // output 1, input 0 outp(0x00,ddrd);
16 outp(0xff,portd); //let pull up resistor work, so pin x will be one all the time. outp(0xff,ddrf); outp(0x00,portf);//clear LED. EICRA = 0x0a; // External Interrupt 0, Falling Edge Asynchronously Interrupt EIMSK = 0x03; // External Interrupt 0, 1 enable sei(); //re-enable interrupts // SW0, SW1 의 Interrupt 처리를위한 Interrupt Service Routine SIGNAL (INT0_vect) static portbase_type xhigherprioritytaskwoken; EIMSK &= ~0x03; // External Interrupt 0, 1 Disable xhigherprioritytaskwoken = pdfalse; /* Semaphore Give 하여 Semaphore 가준비되기를기다리는 (SW 가 Push 되기를기다리는 ) Blocking 상태의 Task 중 Priority 가높은 Task 가 Unblocking 상태가되게한다. */ xsemaphoregivefromisr( xkeyinsemaphore, &xhigherprioritytaskwoken ); if( xhigherprioritytaskwoken == pdtrue ) /* Semaphore 'Give' 에의하여 Unblock되는 Task의 Priority가현재실행중인 Task 보다높은경우 Interrupt는직접 Unblock된 Task로 Return 된다. */ taskyield(); ISR(INT1_vect, ISR_ALIASOF(INT0_vect)); 2) RT_mutex_printf 프로그램참고요
17 Mutex 를이용한자원관리예 ( Task2 의 Priority 가 Task1 보다높은경우 ) 2.Task1이 Mutex를 Take 하고, 문자열을출력하는도중에우선순위가높은 Task2가실행된다.. Task2 Task1 Idle 3.Task2가 Mutex Take를시도하였으나아직 Task1 이 Mutex를갖고있기때문에 Task2가 Blocked 상태가되고다시 Task1이실행되어문자열출력을종료한다. 5.Task2가문자열출력을종료하고, Mutex를 Give Back 한다. Task2는다음실행을기다리기위하여 Blocked 상태가된다. Task1이다시실행된다음, 종료되고 Idle 상태가된다. t1 Time 1.Task1 의 Delay 주기 가종료되고 Task1 이 실행된다. 4.Task1 이문자열출력을종료하고 Mutex 를 Give Back 한다. Task2 가 Blocked 상태 를종료하고실행상태가된다. C. Priority Inversion 위예에서낮은 Priority Task( LP Task) 가먼저 Mutex 을 Take 하여높은 Priority Task( HP Task) 가 LP Task 가 Mutex 를 Give 할때까지기다리는경우가발생하는것이가능한것을알수있다. 이와같이 HP Task 가 LP Task 에의하여 Delay 되는것을 Priority Inversion 이라고한다. 만약의경우, HP Task 가 Semaphore 를기다리는동안중간 Priority 을갖는 Task( MP Task) 가실행되는경우 LP Task 가실행기회를갖지못하게되고, LP Task 가 Mutex 를 Give 하지못하기때문에 HP Task 가계속실행되지못하는문제가발생한다. 이러한경우의시나리오예는아래와같다.
18 Priority Inversion 경우중가장나쁜경우의시나리오 2.HP Task가 Mutex를 Take하려고시도하지만 LP Task가 Mutex를 Take한상태이기때문에 Blocked 상태가된다. HP Task 5.MP Task가실행되고있다. HP Task는아직 LP Task로부터 Mutex가 Return 되기를기다리고있는상태이다. 그러나 LP Task가실행되지못하기때문에 HP Task가계속실행되지못하게된다. MP Task LP Task t1 Time 1.LP Task 가 HP Task 보다 먼저 Mutex 를 Take 하고자 원을사용한다. 3.LP Task 실행되는도중 ( 아직 Mutex 를 Give 하지못한상태 ) 에보다우선도가높 은 Task(MP Task) 가실행된다. Priority Inversion 은심각한문제이지만소규모시스템에서는시스템설계시이러한문제를피할수있다. D. Priority 상속 FreeRTOS 에서 Mutex 와 Binary Semaphore 는매우유사하다. Mutex 와 Binary Semaphore 의차이는 Mutex 는 Priority 상속기능을갖고있다는것이다. Priority 상속개념은 Priority Inversion 문제를최소화한다. Priority 상속에관련된 System Time 해석은매우복잡하고, 또한 Priority Inversion 문제를완전히해결하지는못한다. Priority 상속은현재 Mutex 를 Take 하고있는 Task 보다더높은 Priority 를갖는 Task 가동일한 Mutex 를 Take 하려고시도하는경우에현재실행중인 Task 의 Priority 를임시적으로 Mutex 를 Take 하려고시도하는 Task 중에서가장높은 Priority 를갖는 Task 와동일하게높은 Priority 를부여하는것이다. 현재 Mutex 을갖고있는 Task 가 Mutex 를 Give 하는경우이 Task 는원래자신이갖고있던 Priority 를갖게된다. 한 Task 는어느한순간에하나의 Mutex 만갖는다는가정하에 Mutex 에의한 Priority 상속구조는구현되었다.
19 Priority 상속기능을갖는 Mutex 를이용한자원공유예 2.HP Task가 Mutex를 Take하려고시도하지만 LP Task가 Mutex를 Take한상태이기때문에 Blocked 상태가된다. LP Task가 HP Task의 Priority를상속받아높은 Priority를갖게된다. HP Task 4.LP Task가 Mutex를 Return 하였기때문에 HP Task가 Blocked 상태에서벗어난다음, Mutex를 Take 하여자원사용을완료하고 Mutex를 Give 한다. HP Task가대기상태가되면 MP Task가실행된다.. MP Task LP Task t1 Time 1.LP Task 가 HP Task 보다 먼저 Mutex 를 Take 하고자 원을사용한다. 3.LP Task는현재높은 Priority를갖고있기때문에 MP Task에의하여선점되지않고현재사용중인자원의사용을완료하고 Mutex를 Give 한다. LP Task의 Priority는이전 Priority로복귀된다 E. Deadlock Mutex 를이용하여자원을배타적으로사용하는경우 Deadlock 이 l 발생할수있다. Deadlock 은 2 개의 Task 가서로상대가갖고있는자원사용권한을기다리는상태가되어두 Task 모두가실행될수없도록되는경우이다. Task A 와 Task B 가모두 Mutex X 와 Mutex Y 가필요한경우 1) Task A 가실행중 Mutex X 를 Take 한다. 2) Task A 가 Task B 에의하여선점 (Pre-empted) 된다. 3) Task B 가 Mutex Y 를 Take 한다. 또한 Mutex X 를 Take 하기위한시도를한다. 그러나 Mutex X 는 Task A 가 Take 하고있기때문에 Task B 는 Blocked 상태가되어 Mutex X 가 Release 되기를기다리고있다. 4) Task A 가실행되고있는상태에서 Mutex Y 를 Take 하기위한시도를한다. Mutex Y 는 Task B 가 Hold 하고있기때문에 Task
20 A 는 Blocked 상태가되어 Muntex Y 가가 Release 되기를기다리고있다. 위의시나리오결과 Task A 는 Task B 가 Hold 하고있는 Mutex 를기다리고, Task B 는 Task A 가 Hold 하고있는 Mutex 를 Blocked 상태에서기다리고있기때문에두 task 모두실행될수없게되는 Deadlock 이발생한다. Priority Inversion 과마찬가지로시스템설계시 Deadlock 를피하기위한노력을하여야한다. 4. Gatekeeper Tasks Priority Inversion 과 Deadlock 를피하기위하여 Gatekeeper Tasks 를사용한다. Gatekeeper Task 만자원에대한소유권 ( 자원을사용할수있는권한 ) 을갖는다. Gatekeeper Task 만이유일하게자원을직접사용할수있는권한을갖고, 다른 Task 는 Gatekeeper 서비스를이용하여간접적으로만자원을사용할수있다. F. Gatekeeper Task 를이용하는예다음은 RT_gatekeeper_printf 프로그램에서 Gatekeeper Task 를이해하는데도움이되는부분만발췌한내용이다. // Tasks 와 Interrupt 이 Gatekeeper 를이용하여출력할문자열을정의한다. static char *pcstringstoprint[] = "Task 1 ****************\r\n", "Task \r\n", "Tick hook interrupt ###\r\n" ; // xqueuehandle 형의변수를선언한다. // 이 Queue 는 Print Task 가 Gatekeeper Task 를이용하여문자열을출력하는데이용한다. xqueuehandle xprintqueue; void valtstartmutexprinttasks( void ) // Queue 는사용하기전에 Create 되어야한다. xprintqueue = xqueuecreate( 5, sizeof( char * ) ); // prvprinttask Task 는각각 Pseudo Random 하게 Delay 된다.
21 // Pseudo random delay 를발생시키기위한 Seed Number(random) 를설정한다. srand( 567 ); // Queue 가성공적으로 create 되었는지확인한다. if( xprintqueue!= NULL ) // prvprinttask 의 Instance 2 개 (vprint1task, vprint2task) 가생성된다. // 각 Instance 에서출력할문자열의 Index 가 Task Parameter 로 Pass 된다. // Task 는서로다른 Priority 로생성되어낮은 Priority 를갖은 Task 도문자열을안전하게출력하는예를보여준다. xtaskcreate( prvprinttask, "vprint1task", configminimal_stack_size * 2, ( void * ) 0, tskidle_priority + 1, NULL ); xtaskcreate( prvprinttask, "vprint2task", configminimal_stack_size * 2, ( void * ) 1, tskidle_priority + 2, NULL ); // Gatekeeper Task 의우선순위를가장낮게설정하고 Task 를생성한다. 이 Task 만 Standard Out Device 를 Access 할수있다. xtaskcreate( prvstdiogatekeepertask, "Gatekeeper", configminimal_stack_size * 2, NULL, tskidle_priority, NULL ); void prvstdiogatekeepertask( void *pvparameters ) char *pcmessagetoprint; // 이 Task 만오직출력장치에직접출력할수있다. // 다른 Task 는출력장치에직접출력할수없기때문에 // 다른 Task 는이 Task 를이용하여출력하여야한다. // 그결과 Gatekeeper Task 를이용하는경우에는 No Mutual // exclusion 나 Serialization 문제가발생하지않는다. for( ;; ) // Queue 에 Message 가도착하기를기다린다. xqueuereceive( xprintqueue, &pcmessagetoprint, portmax_delay );
22 // 메세지를표준출력장치에출력한다. printf( "%s", pcmessagetoprint ); fflush( stdout ); // Tick hook(or tick callback) function 의사용예 // Tick hook(or tick callback) function 은매 Tick interrupt 주기매다 // Kernel 에의하여 Call 되기때문에 ( 우선순위가높은 Task 에서출력예 ) // 아주간결하게작성되어야하고, // FreeRTOS API 함수에서 Call 하여서는않된다. void vapplicationtickhook( void ) static int icount = 0; portbase_type xhigherprioritytaskwoken = pdfalse; // 매 600 ticks 마다 Tick Hook Interrupt Routine 에서출력하는 // 메세지가 Gatekeeper Task 를이용하여출력된다. icount++; if( icount >= 600 ) // 이예에서 xhigherprioritytaskwoken 은사용되지않지만함수에 Parameter 로포함되어야한다. // 매 600 Tick 마다 3 번째메세지를출력하기위하여 Queue 의앞 (Front) 에메세지포인터를출력한다. xqueuesendtofrontfromisr( xprintqueue, &( pcstringstoprint[ 2 ] ), &xhigherprioritytaskwoken ); // 600 ticks 를만들기위하여 icount 를 Reset 한다. icount = 0; // prvprinttask Instance 2 개 (vprint1task, vprint2task) 가생성되어실행된다. // Instance 는 Instance 에서출력하고자하는문자열의 Pointer 를인수로전달받는다. void prvprinttask( void *pvparameters ) int iindextostring; // 이 Task 의 Instances 를 2 개 Create 한다. Create 된 Task 가실행
23 되면출력할메시지의 Index Pointer 를 Queue 를이용하여 prvstdiogatekeepertask 에 Pass 하여표준출력장치에출력한다. iindextostring = ( int ) pvparameters; for( ;; ) // 이 Task 에서는문자열을직접출력하지않고, Queue 를이용하여 Gatekeeper Task 에출력정보 ( 문자열의 Pointer 등 ) 를전달하여실제출력은 Gatekeeper Task 에서실행된다. xqueuesendtoback( xprintqueue, &( pcstringstoprint[ iindextostring ] ), 0 ); // 이 Task 가자원을사용한후, 랜덤하게발생된지연시간동안 Blocked 상태에있도록하여낮은우선도의 Task 가자원을사용할수있는기회를준다. vtaskdelay( ( rand() & 0x03FF ) );
2. Deferred Interrupt Processing A. Binary Semaphores를이용한동기 (Synchronization) i. Binary Semaphores는 Interrupt가발생하였을때특정한 를 Unblock 하는데사용할수있다. 이러한기능은 In
AVR FreeRTOS : Interrupt Management 1. 이장의개요 Embedded Real Time 시스템은주변장치로부터발생하는 Event 에실시간으로응답하여야하는응용분야에많이이용된다. 응용분야에따라서는여러개의 Interrupt Source로부터발생하는 Event를실시간으로처리하여야하고, 각각의 Interrupt 처리는서로다른처리시간과속도를필요로하기때문에최적의
More information슬라이드 1
마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***
More informationuntitled
Embedded System Lab. II Embedded System Lab. II 2 RTOS Hard Real-Time vs Soft Real-Time RTOS Real-Time, Real-Time RTOS General purpose system OS H/W RTOS H/W task Hard Real-Time Real-Time System, Hard
More information2. GCC Assembler와 AVR Assembler의차이 A. GCC Assembler 를사용하는경우 i. Assembly Language Program은.S Extension 을갖는다. ii. C Language Program은.c Extension 을갖는다.
C 언어와 Assembly Language 을사용한 Programming 20011.9 경희대학교조원경 1. AVR Studio 에서사용하는 Assembler AVR Studio에서는 GCC Assembler와 AVR Assmbler를사용한다. A. GCC Assembler : GCC를사용하는경우 (WinAVR 등을사용하는경우 ) 사용할수있다. New Project
More information6주차.key
6, Process concept A program in execution Program code PCB (process control block) Program counter, registers, etc. Stack Heap Data section => global variable Process in memory Process state New Running
More information<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>
8주차중간고사 ( 인터럽트및 A/D 변환기문제및풀이 ) Next-Generation Networks Lab. 외부입력인터럽트예제 문제 1 포트 A 의 7-segment 에초시계를구현한다. Tact 스위치 SW3 을 CPU 보드의 PE4 에연결한다. 그리고, SW3 을누르면하강 에지에서초시계가 00 으로초기화된다. 동시에 Tact 스위치 SW4 를 CPU 보드의
More information<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >
10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절
More informationMicrosoft PowerPoint - chap02-C프로그램시작하기.pptx
#include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의
More information10주차.key
10, Process synchronization (concurrently) ( ) => critical section ( ) / =>, A, B / Race condition int counter; Process A { counter++; } Process B { counter ;.. } counter++ register1 = counter register1
More informationuntitled
Step Motor Device Driver Embedded System Lab. II Step Motor Step Motor Step Motor source Embedded System Lab. II 2 open loop, : : Pulse, 1 Pulse,, -, 1 +5%, step Step Motor (2),, Embedded System Lab. II
More information슬라이드 1
/ 유닉스시스템개요 / 파일 / 프로세스 01 File Descriptor file file descriptor file type unix 에서의파일은단지바이트들의나열임 operating system 은파일에어떤포맷도부과하지않음 파일의내용은바이트단위로주소를줄수있음 file descriptor 는 0 이나양수임 file 은 open 이나 creat 로 file
More informationMicrosoft Word - FunctionCall
Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack
More informationPowerPoint 프레젠테이션
KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
More information<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>
뻔뻔한 AVR 프로그래밍 The Last(8 th ) Lecture 유명환 ( yoo@netplug.co.kr) INDEX 1 I 2 C 통신이야기 2 ATmega128 TWI(I 2 C) 구조분석 4 ATmega128 TWI(I 2 C) 실습 : AT24C16 1 I 2 C 통신이야기 I 2 C Inter IC Bus 어떤 IC들간에도공통적으로통할수있는 ex)
More information<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>
리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1
More informationK&R2 Reference Manual 번역본
typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct
More information프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어
개나리 연구소 C 언어 노트 (tyback.egloos.com) 프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어먹고 하더라구요. 그래서,
More information<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>
#include "stdafx.h" #include "Huffman.h" 1 /* 비트의부분을뽑아내는함수 */ unsigned HF::bits(unsigned x, int k, int j) return (x >> k) & ~(~0
More informationSRC PLUS 제어기 MANUAL
,,,, DE FIN E I N T R E A L L O C E N D SU B E N D S U B M O TIO
More informationMicrosoft PowerPoint - chap10-함수의활용.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과
More informationC# Programming Guide - Types
C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든
More information슬라이드 1
-Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역
More informationA Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning
C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용
More information임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과
임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수
More information(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -
(Asynchronous Mode) - - - ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 - UART (Univ ers al As y nchronous Receiver / T rans mitter) 8250A 8250A { COM1(3F8H). - Line Control Register
More informationOCW_C언어 기초
초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향
More informationPowerPoint 프레젠테이션
System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소
More informationcrazyflie2 code reading subak.io
crazyflie2 code reading subak.io 2015-06-04 Drone Drone? : D.Camp 5F C : 2015. 6. 4 ( ) 7 ~ 8 Drone Drone SW Drone SW 5 OpenSource Drone 5 Drone Source Code Review 35 10 5 OpenSource Drone 5 ArduPilot
More informationPowerPoint 프레젠테이션
Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi
More informationChap04(Signals and Sessions).PDF
Signals and Session Management 2002 2 Hyun-Ju Park (Signal)? Introduction (1) mechanism events : asynchronous events - interrupt signal from users : synchronous events - exceptions (accessing an illegal
More information[8051] 강의자료.PDF
CY AC F0 RS1 RS0 OV - P 0xFF 0x80 0x7F 0x30 0x2F 0x20 0x1F 0x18 0x17 0x10 0x0F 0x08 0x07 0x00 0x0000 0x0FFF 0x1000 0xFFFF 0x0000 0xFFFF RAM SFR SMOD - - - GF1 GF0 PD IDL 31 19 18 9 12 13 14 15 1 2 3 4
More informationuntitled
int i = 10; char c = 69; float f = 12.3; int i = 10; char c = 69; float f = 12.3; printf("i : %u\n", &i); // i printf("c : %u\n", &c); // c printf("f : %u\n", &f); // f return 0; i : 1245024 c : 1245015
More informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
More informationMicrosoft PowerPoint - ch07 - 포인터 pm0415
2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자
More informationMicrosoft PowerPoint - es-arduino-lecture-03
임베디드시스템개론 : Arduino 활용 Lecture #3: Button Input & FND Control 2012. 3. 25 by 김영주 강의목차 디지털입력 Button switch 입력 Button Debounce 7-Segment FND : 직접제어 7-Segment FND : IC 제어 2 디지털입력 : Switch 입력 (1) 실습목표 아두이노디지털입력처리실습
More informationMicrosoft PowerPoint - polling.pptx
지현석 (binish@home.cnu.ac.kr) http://binish.or.kr Index 이슈화된키보드해킹 최근키보드해킹이슈의배경지식 Interrupt VS polling What is polling? Polling pseudo code Polling 을이용한키로거분석 방어기법연구 이슈화된키보드해킹 키보드해킹은연일상한가! 주식, 펀드투자의시기?! 최근키보드해킹이슈의배경지식
More informationPowerPoint 프레젠테이션
7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment
More informationPowerPoint 프레젠테이션
7-SEGMENT DEVICE CONTROL - DEVICE DRIVER Jo, Heeseung 디바이스드라이버구현 : 7-SEGMENT HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 디바이스드라이버구현 : 7-SEGMENT 6-Digit 7-Segment LED
More informationThe Self-Managing Database : Automatic Health Monitoring and Alerting
The Self-Managing Database : Automatic Health Monitoring and Alerting Agenda Oracle 10g Enterpirse Manager Oracle 10g 3 rd Party PL/SQL API Summary (Self-Managing Database) ? 6% 6% 12% 55% 6% Source: IOUG
More information[96_RE11]LMOs(......).HWP
- i - - ii - - iii - - iv - - v - - vi - - vii - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
More informationPowerPoint 프레젠테이션
7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED Controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment
More informationMPLAB C18 C
MPLAB C18 C MPLAB C18 MPLAB C18 C MPLAB C18 C #define START, c:\mcc18 errorlevel{0 1} char isascii(char ch); list[list_optioin,list_option] OK, Cancel , MPLAB IDE User s Guide MPLAB C18 C
More information비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2
비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,
More informationhlogin2
0x02. Stack Corruption off-limit Kernel Stack libc Heap BSS Data Code off-limit Kernel Kernel : OS Stack libc Heap BSS Data Code Stack : libc : Heap : BSS, Data : bss Code : off-limit Kernel Kernel : OS
More information61 62 63 64 234 235 p r i n t f ( % 5 d :, i+1); g e t s ( s t u d e n t _ n a m e [ i ] ) ; if (student_name[i][0] == \ 0 ) i = MAX; p r i n t f (\ n :\ n ); 6 1 for (i = 0; student_name[i][0]!= \ 0&&
More informationchap7.key
1 7 C 2 7.1 C (System Calls) Unix UNIX man Section 2 C. C (Library Functions) C 1975 Dennis Ritchie ANSI C Standard Library 3 (system call). 4 C?... 5 C (text file), C. (binary file). 6 C 1. : fopen( )
More information<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>
7주차 AVR의 A/D 변환기제어레지스터및관련실습 Next-Generation Networks Lab. 3. 관련레지스터 표 9-4 레지스터 ADMUX ADCSRA ADCH ADCL 설명 ADC Multiplexer Selection Register ADC 의입력채널선택및기준전압선택외 ADC Control and Status Register A ADC 의동작을설정하거나동작상태를표시함
More information인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2
ATmega128 인터럽트 1 제 04 강 인터럽트 (Interrupt) 인터럽트개요외부인터럽트참고 ) FND 회로실습및과제 인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2 인터럽트 ( 계속 ) ATmega128 인터럽트 3 * 인터럽트벡터 (P.104 표 7.1 참조 ) : 35 개 인터럽트 ( 계속 ) * 인터럽트허용 / 금지메커니즘 ATmega128
More informationOPCTalk for Hitachi Ethernet 1 2. Path. DCOMwindow NT/2000 network server. Winsock update win95. . . 3 Excel CSV. Update Background Thread Client Command Queue Size Client Dynamic Scan Block Block
More informationiii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.
Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:
More informationUART.h #ifndef _UART_H_ #define _UART_H_ #define DIR_TXD #define DIR_RXD sbi(portd,4) cbi(portd,4) #define CPU_CLOCK_HZ UL UART PORT1 void UAR
IMC-V0.1 예제소스파일 1. UART 소스코드 (page 1-3) 2. Encoder 소스코드 (page 4-7) 3. ADC 소스코드 (page 8-10) UART.h #ifndef _UART_H_ #define _UART_H_ #define DIR_TXD #define DIR_RXD sbi(portd,4) cbi(portd,4) #define CPU_CLOCK_HZ
More informationuntitled
- -, (insert) (delete) - - (insert) (delete) (top ) - - (insert) (rear) (delete) (front) A A B top A B C top push(a) push(b) push(c) A B top pop() top A B D push(d) top #define MAX_STACK_SIZE 100 int
More informationChapter #01 Subject
Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned
More information4. 1 포인터와 1 차원배열 4. 2 포인터와 2 차원배열 4. 3 포인터배열 4. 4 포인터와문자그리고포인터와문자열
- Part2-4 4. 1 포인터와 1 차원배열 4. 2 포인터와 2 차원배열 4. 3 포인터배열 4. 4 포인터와문자그리고포인터와문자열 4.1 포인터와 1 차원배열 4.1 1 (1/16)- - - [4-1.c ] #include int main(void) { int array[3]={10, 20, 30}; } prind("%x %x %x
More information11장 포인터
누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리
More informationlecture4(6.범용IO).hwp
제 2 부 C-언어를 사용한 마이크로컨트롤러 활용기초 66 C-언어는 수학계산을 위해 개발된 FORTRAN 같은 고급언어들과는 달 리 Unix 운영체제를 개발하면서 같이 개발된 고급언어이다. 운영체제의 특성상 C-언어는 다른 고급언어에 비해 컴퓨터의 하드웨어를 직접 제어할 수 있는 능력이 탁월하여 마이크로프로세서의 프로그램에 있어서 어셈블 리와 더불어 가장
More informationMicrosoft Word - ExecutionStack
Lecture 15: LM code from high level language /* Simple Program */ external int get_int(); external void put_int(); int sum; clear_sum() { sum=0; int step=2; main() { register int i; static int count; clear_sum();
More informationPowerPoint 프레젠테이션
Verilog: Finite State Machines CSED311 Lab03 Joonsung Kim, joonsung90@postech.ac.kr Finite State Machines Digital system design 시간에배운것과같습니다. Moore / Mealy machines Verilog 를이용해서어떻게구현할까? 2 Finite State
More informationMicrosoft PowerPoint - chap06-5 [호환 모드]
2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.
More informationMotor
Interactive Workshop for Artists & Designers Earl Park Motor Servo Motor Control #include Servo myservo; // create servo object to control a servo int potpin = 0; // analog pin used to connect
More information슬라이드 1
AVR(Atmega128) Interrupt 1 Interrupt Polling 사용자가명령어를사용하여입력핀의값을계속읽어서변화를알아냄 모든경우의입력또는값의변화에대응하여처리가가능 Interrupt MCU 자체가하드웨어적으로그변화를체크하여변화시에만일정한동작 하드웨어적으로지원되는몇개의입력또는값의변화에만대응처리가가능 처리속도는일반적인경우인터럽트가빠름 인터럽트발생시
More informationKEY 디바이스 드라이버
KEY 디바이스드라이버 임베디드시스템소프트웨어 I (http://et.smu.ac.kr et.smu.ac.kr) 차례 GPIO 및 Control Registers KEY 하드웨어구성 KEY Driver 프로그램 key-driver.c 시험응용프로그램 key-app.c KEY 디바이스드라이버 11-2 GPIO(General-Purpose Purpose I/O)
More information강의10
Computer Programming gdb and awk 12 th Lecture 김현철컴퓨터공학부서울대학교 순서 C Compiler and Linker 보충 Static vs Shared Libraries ( 계속 ) gdb awk Q&A Shared vs Static Libraries ( 계속 ) Advantage of Using Libraries Reduced
More informationMicrosoft PowerPoint - chap06-1Array.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어
More information歯9장.PDF
9 Hello!! C printf() scanf() getchar() putchar() gets() puts() fopen() fclose() fprintf() fscant() fgetc() fputs() fgets() gputs() fread() fwrite() fseek() ftell() I/O 2 (stream) C (text stream) : `/n'
More information학습목차 2.1 다차원배열이란 차원배열의주소와값의참조
- Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]
More informationC 프로그래밍 언어 입문 C 프로그래밍 언어 입문 김명호저 숭실대학교 출판국 머리말..... C, C++, Java, Fortran, Python, Ruby,.. C. C 1972. 40 C.. C. 1999 C99. C99. C. C. C., kmh ssu.ac.kr.. ,. 2013 12 Contents 1장 프로그래밍 시작 1.1 C 10 1.2 12
More information1
1 1....6 1.1...6 2. Java Architecture...7 2.1 2SDK(Software Development Kit)...8 2.2 JRE(Java Runtime Environment)...9 2.3 (Java Virtual Machine, JVM)...10 2.4 JVM...11 2.5 (runtime)jvm...12 2.5.1 2.5.2
More informationMicrosoft PowerPoint - [2009] 02.pptx
원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include
More informationHere is a "PLDWorld.com"... // EXCALIBUR... // Additional Resources // µc/os-ii... Page 1 of 23 Additional Resources: µc/os-ii Author: Source: HiTEL D
Page 1 of 23 Additional Resources: µc/os-ii Author: Source: HiTEL Digital Sig Date: 2004929 µ (1) uc/os-ii RTOS uc/os-ii EP7209 uc/os-ii, EP7209 EP7209,, CPU ARM720 Core CPU ARM7 CPU wwwnanowitcom10 '
More informationPCServerMgmt7
Web Windows NT/2000 Server DP&NM Lab 1 Contents 2 Windows NT Service Provider Management Application Web UI 3 . PC,, Client/Server Network 4 (1),,, PC Mainframe PC Backbone Server TCP/IP DCS PLC Network
More information0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4
Introduction to software design 2012-1 Final 2012.06.13 16:00-18:00 Student ID: Name: - 1 - 0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x
More informationPowerPoint 프레젠테이션
Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐
More informationuntitled
while do-while for break continue while( ) ; #include 0 i int main(void) int meter; int i = 0; while(i < 3) meter = i * 1609; printf("%d %d \n", i, meter); i++; return 0; i i< 3 () 0 (1)
More information4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona
이름 : 학번 : A. True or False: 각각항목마다 True 인지 False 인지적으세요. 1. (Python:) randint 함수를사용하려면, random 모듈을 import 해야한다. 2. (Python:) '' (single quote) 는한글자를표현할때, (double quote) 는문자열을표현할때사용한다. B. 다음에러를수정하는방법을적으세요.
More informationMAX+plus II Getting Started - 무작정따라하기
무작정 따라하기 2001 10 4 / Version 20-2 0 MAX+plus II Digital, Schematic Capture MAX+plus II, IC, CPLD FPGA (Logic) ALTERA PLD FLEX10K Series EPF10K10QC208-4 MAX+plus II Project, Schematic, Design Compilation,
More information제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.
제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 이중포인터란무엇인가? 포인터배열 함수포인터 다차원배열과포인터 void 포인터 포인터는다양한용도로유용하게활용될수있습니다. 2 이중포인터
More informationFigure 5.01
Chapter 4: Threads Yoon-Joong Kim Hanbat National University, Computer Engineering Department Chapter 4: Multithreaded Programming Overview Multithreading Models Thread Libraries Threading Issues Operating
More informationT100MD+
User s Manual 100% ) ( x b a a + 1 RX+ TX+ DTR GND TX+ RX+ DTR GND RX+ TX+ DTR GND DSR RX+ TX+ DTR GND DSR [ DCE TYPE ] [ DCE TYPE ] RS232 Format Baud 1 T100MD+
More information<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770>
i ii iii iv v vi 1 2 3 4 가상대학 시스템의 국내외 현황 조사 가상대학 플랫폼 개발 이상적인 가상대학시스템의 미래상 제안 5 웹-기반 가상대학 시스템 전통적인 교수 방법 시간/공간 제약을 극복한 학습동기 부여 교수의 일방적인 내용전달 교수와 학생간의 상호작용 동료 학생들 간의 상호작용 가상대학 운영 공지사항,강의록 자료실, 메모 질의응답,
More informationMicrosoft PowerPoint APUE(Intro).ppt
컴퓨터특강 () [Ch. 1 & Ch. 2] 2006 년봄학기 문양세강원대학교컴퓨터과학과 APUE 강의목적 UNIX 시스템프로그래밍 file, process, signal, network programming UNIX 시스템의체계적이해 시스템프로그래밍능력향상 Page 2 1 APUE 강의동기 UNIX 는인기있는운영체제 서버시스템 ( 웹서버, 데이터베이스서버
More information중간고사
중간고사 예제 1 사용자로부터받은두개의숫자 x, y 중에서큰수를찾는알고리즘을의사코드로작성하시오. Step 1: Input x, y Step 2: if (x > y) then MAX
More informationMicrosoft PowerPoint - chap13-입출력라이브러리.pptx
#include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,
More informationC++-¿Ïº®Çؼ³10Àå
C C++. (preprocessor directives), C C++ C/C++... C++, C. C++ C. C C++. C,, C++, C++., C++.,.. #define #elif #else #error #if #itdef #ifndef #include #line #pragma #undef #.,.,. #include #include
More information13주-14주proc.PDF
12 : Pro*C/C++ 1 2 Embeded SQL 3 PRO *C 31 C/C++ PRO *C NOT! NOT AND && AND OR OR EQUAL == = SQL,,, Embeded SQL SQL 32 Pro*C C SQL Pro*C C, C Pro*C, C C 321, C char : char[n] : n int, short, long : float
More informationSection 03 인터럽트활성화와인터럽트서비스루틴연결 34/82 장치에대한인터럽트설정과활성화 내부장치에대한특수레지스터존재 장치의특성을반영한동작설정용또는상태관찰용비트로구성 인터럽트사건의발생패턴을설정해야함 인터럽트활성화비트를 1 로셋하여, 인터럽트발생을허락» 전제, 전역
Section 03 인터럽트활성화와인터럽트서비스루틴연결 33/82 Section 03 인터럽트활성화와인터럽트서비스루틴연결 34/82 장치에대한인터럽트설정과활성화 내부장치에대한특수레지스터존재 장치의특성을반영한동작설정용또는상태관찰용비트로구성 인터럽트사건의발생패턴을설정해야함 인터럽트활성화비트를 1 로셋하여, 인터럽트발생을허락» 전제, 전역인터럽트활성화비트가 1 로셋되었을때
More informationMicrosoft PowerPoint - chap03-변수와데이터형.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.
More information1217 WebTrafMon II
(1/28) (2/28) (10 Mbps ) Video, Audio. (3/28) 10 ~ 15 ( : telnet, ftp ),, (4/28) UDP/TCP (5/28) centralized environment packet header information analysis network traffic data, capture presentation network
More information목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2
제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해
More informationBMP 파일 처리
BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)
More information*통신1802_01-도비라및목차1~11
ISSN 25-2693 218. 2 218. 2 214 215 216 217 2.6 2.9 1.5 1.8 1.2 3.1 3.2 1.3 2.1 1.8 2.6 2.5 2.8 2.4.4 1.4.9 1.4 1.5 2.9 2.5 7.3 6.9 6.7 6.8 6.9 6.9 6.8 2.8 14 2.6 13 2.4 12 2.2 2. 11 1.8 1.6 1.4
More informationMicrosoft Word - KPMC-400,401 SW 사용 설명서
LKP Ethernet Card SW 사용설명서 Version Information Tornado 2.0, 2.2 알 림 여기에실린내용은제품의성능향상과신뢰도의증대를위하여예고없이변경될수도있습니다. 여기에실린내용의일부라도엘케이일레븐의사전허락없이어떠한유형의매체에복사되거나저장될수없으며전기적, 기계적, 광학적, 화학적인어떤방법으로도전송될수없습니다. 엘케이일레븐경기도성남시중원구상대원동
More informationPoison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3
Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Example 3.1 Files 3.2 Source code 3.3 Exploit flow
More informationChapter 4. LISTS
6. 동치관계 (Equivalence Relations) 동치관계 reflexive, symmetric, transitive 성질을만족 "equal to"(=) 관계는동치관계임. x = x x = y 이면 y = x x = y 이고 y = z 이면 x = z 동치관계를이용하여집합 S 를 동치클래스 로분할 동일한클래스내의원소 x, y 에대해서는 x y 관계성립
More informationchap 5: Trees
5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경
More informationMicrosoft Word - FS_ZigBee_Manual_V1.3.docx
FirmSYS Zigbee etworks Kit User Manual FS-ZK500 Rev. 2008/05 Page 1 of 26 Version 1.3 목 차 1. 제품구성... 3 2. 개요... 4 3. 네트워크 설명... 5 4. 호스트/노드 설명... 6 네트워크 구성... 6 5. 모바일 태그 설명... 8 6. 프로토콜 설명... 9 프로토콜 목록...
More information5 167 Python Jon Franklin Python Python Python Python USB USB RS485 C Python DLL Python Python dll Python Python ctypes dll ctypes Python C Linux Wind
5 167 Python Jon Franklin Python Python Python Python USB USB RS485 C Python DLL Python Python dll Python Python ctypes dll ctypes Python C Linux Windows Python C ctypes dll C dll C 168 159 168 DLL Windows
More informationchap10.PDF
10 C++ Hello!! C C C++ C++ C++ 2 C++ 1980 Bell Bjarne Stroustrup C++ C C++ C, C++ C C 3 C C++ (prototype) (type checking) C C++ : C++ 4 C C++ (prototype) (type checking) [ 10-1] #include extern
More informationMicrosoft Word - PLC제어응용-2차시.doc
과정명 PLC 제어응용차시명 2 차시. 접점명령 학습목표 1. 연산개시명령 (LOAD, LOAD NOT) 에대하여설명할수있다. 2. 직렬접속명령 (AND, AND NOT) 에대하여설명할수있다. 3. 병렬접속명령 (OR, OR NOT) 에대하여설명할수있다. 4.PLC의접점명령을가지고간단한프로그램을작성할수있다. 학습내용 1. 연산개시명령 1) 연산개시명령 (LOAD,
More information