■RTOS


<환경 설정>


<Linux>

$ pwd

/home/mds

$ tar zxf Codesourcery.tar.gz -C /

$ tar zxf ucos2.tar.gz -C ~/

$ echo PATH=$PATH:/opt/CodeSourcery/Sourcery_G++_Lite/bin >> ~/.bashrc







$ cd ucos2/04.ucos2-final/

$ make clean && make




<Tera>
# set bootcmd 'tftp 30000000 MDS2450.bin;go 30000000'
# set bootdelay 1
# save





<Linux>

www.sublimetext.com/3



$ tar jxf sublime_text_3_build_3176_x32.tar.bz2 -C /opt/
$ echo PATH=$PATH:/opt/sublime_text_3/sublime_text >> ~/.bashrc
$ echo alias subl=/opt/sublime_text_3/sublime_text >> ~/.bashrc



$ cd ucos2/04.ucos2-final/
~/ucos2/04.ucos2-final$ subl .

<Ctrl + `> 활성화

https://packagecontrol.io/installation#st3 들어가서 복사


import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df5dedcf1dcaee' + 'ebe013ee18cced0ef93d5f746d80ef60'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)

붙혀 넣기

- 빌드 설정




<Ctrl + b>    =>컴파일
<Ctrl + Shift + f>   =>전체 찾기
<Ctrl + g>    =>라인 이동
<Ctrl + r>    =>함수 목록
<Ctrl + f2>   =>북마크 설정/해제
<f2>          =>북마크 이동





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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
#include "includes.h"
#include "ui.h"
 
// filename
char* filename = "01_TASKMAN";
 
/* ...........................................................................
 *
 * 태스크 스택 정의
 * ===================
 */
OS_STK TaskStartStk[TASK_STK_SIZE]; /* START task stack */
OS_STK Task1Stk[TASK_STK_SIZE]; /* Task #1 stack */
OS_STK Task2Stk[TASK_STK_SIZE]; /* Task #2 stack */
//OS_STK Task3Stk[TASK_STK_SIZE]; /* Task #3 stack */
//OS_STK Task4Stk[TASK_STK_SIZE]; /* Task #4 stack */
 
/* ...........................................................................
 *
 * 사용자 메모리 정의
 * ===================
 */
TASK_USER_DATA  TaskUserData[7];
 
/* ...........................................................................
 *
 * 이벤트 컨트롤 & 사용자 정의 블럭 정의
 * ===================
 */
struct Param_types {    /* struct for parameter passing to task */
       char *msg;
       int  P1,P2;
} Param_Tbl; 
int    task1timer,task2timer;
extern void seedrand(int seed);
extern int randomnumber(void);
 
/* ...........................................................................
 *
 * 태스크 함수 원형
 * ===================
 */
void  TaskStart(void *pdata); /* Function prototypes of Startup task */
void  Task1(void *pdata);
void  Task2(struct Param_types *Param);        
void  Task3(void *pdata);
void  Task4(void *pdata);
 
//
// 어플리케이션 메인 루틴
//
int main(void)
{
    OSInit(); /* microC/OS-II 초기화 */
    PC_ElapsedInit(); /* Initialized elapsed time measurement     */
    strcpy(TaskUserData[TASK_START_ID].TaskName, "TaskStart");
    
    // TASK CREATE
    OSTaskCreateExt(TaskStart,
                   (void *)0,
                   &TaskStartStk[TASK_STK_SIZE-1],
                   TASK_START_PRIO,
                   TASK_START_ID,
                   &TaskStartStk[0],
                   TASK_STK_SIZE,
                   &TaskUserData[TASK_START_ID],
                   OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
 
    OSStart(); /* start scheduler */
 
    return 0;    
}
 
//
// 태스크 'START'
//
void  TaskStart (void *pdata)
{
    INT8U err;
    struct Param_types *Param;
 
    pdata = pdata;                /* 컴파일러 경고를 막기 위함 */
 
    // 시스템 초기화(UART, LCD, TimeTick)
    InitSystem();    
 
    // Task Statistics Title Display
    TaskStatisticsTitleDisplay(filename);
 
    OSStatInit();                /* Initialize uC/OS-II's 통계 함수 */
 
    printf("whatmam\n");
    // TASK CREATE
    /* TODO #1: 
        Task1을 생성
        use 'OSTaskCreate' */
#if 1
err = OSTaskCreateExt((void(*)(void *))Task1,
                    (void *)Param,
                    &Task1Stk[TASK_STK_SIZE - 1],
                    TASK_1_PRIO,
                    TASK_1_ID,
                    &Task1Stk[0],
                    TASK_STK_SIZE,
                    &TaskUserData[TASK_1_ID],
                    0);
 
 
#endif // TODO #1
 
    // Set TASK2 parameter
    Param = &Param_Tbl;        /* get parameter tbl addr */
    Param->P1 = 111111;        /* set parameter */
    Param->P2 = 222222;
    strcpy(TaskUserData[TASK_2_ID].TaskName, "task2");
 
    // TASK CREATE
    err = OSTaskCreateExt((void(*)(void *))Task2,
                    (void *)Param,
                    &Task2Stk[TASK_STK_SIZE - 1],
                    TASK_2_PRIO,
                    TASK_2_ID,
                    &Task2Stk[0],
                    TASK_STK_SIZE,
                    &TaskUserData[TASK_2_ID],
                    0);
                    
       if (err) Uart_Printf("OSTaskCreateExt error found, code[0x%X]\n",err);
 
    /* TODO #2: 
        Task1을 중지
        use 'OSTaskSuspend' */
#if 1
       err = OSTaskSuspend(TASK_1_PRIO);
#endif // TODO #2
 
    /* TODO #4: 
        Task1의 우선 순위를 'TASK_3_PRIO' 으로 변경
        use 'OSTaskChangePrio' and 'OSTaskResume' */
#if 1
err = OSTaskChangePrio(TASK_1_PRIO, TASK_3_PRIO);
err = OSTaskResume(TASK_3_PRIO);
#endif // TODO #4
 
    /* delete self task */
    err = OSTaskDel(OS_PRIO_SELF);
 
    if (err) Uart_Printf("OSTaskDel(OS_PRIO_SELF) error found, code[0x%X]\n",err);
}
 
//
// 태스크 1
//
void Task1(void *pdata)
{
    INT8U err;
    OS_TCB task_data;
 
    pdata = pdata;                /* 컴파일러 경고를 막기 위함 */
 
    Uart_Printf("\n\nTask1 TASK created,\n");
 
    err = OSTaskQuery(OS_PRIO_SELF, &task_data);
        if (err) Uart_Printf("OSTaskQuery error found, code[0x%X]\n",err);
 
    Uart_Printf("\n-------  Task1 information -------\n");
    Uart_Printf("task1 id = %d \n",task_data.OSTCBPrio);
    Uart_Printf("task1 priority = %d \n",task_data.OSTCBPrio);
    Uart_Printf("task1 status = %d \n",task_data.OSTCBStat);
    Uart_Printf("----------------------------------\n");
 
    while(1) {
    /* TODO #3: 
        코드를 실행 하여 보고
        OSTimeDly() 코드를 주석 처리한 후 그 결과를 설명한다 */
#if 1 // No comment
        OSTimeDly(100);
        Uart_Printf("a");    fflush(stdout);// 문자 'a' 출력
 
#endif // TODO #3
 
        task1timer++;
    }
}
 
//
// 태스크 2
//
void Task2(struct Param_types *Param)
{
    Uart_Printf("Task2 TASK created,\n");
 
    Uart_Printf("\n-------  Task2 parameter passed from main --------\n");
    Uart_Printf("task2 first parameter = %d \n",Param->P1);
    Uart_Printf("task2 second parameter = %d \n",Param->P2);
    Uart_Printf("--------------------------------------------------\n");
 
    while(1) {
    /* TODO #3: 
        코드를 실행 하여 보고
        OSTimeDly() 코드를 주석 처리한 후 그 결과를 설명한다 */
#if 1 // No comment
        OSTimeDly(100);
        Uart_Printf("b");    fflush(stdout);// 문자 'b' 출력
#endif // TODO #3
 
        task2timer++;
    }
}
 
/*-----------------------------------------------------------------------------
 * Program : 01_TASKMAN.C
-----------------------------------------------------------------------------*/
 
cs




* TODO 1



*TODO 2



*TODO 3



*TODO 4




'RTOS' 카테고리의 다른 글

[RTOS_Day5]RTOS 포팅 진행 기록_2  (0) 2018.12.27
[RTOS_Day4]RTOS 포팅 진행 기록  (0) 2018.12.26
[RTOS_Day3]통계 테스크  (0) 2018.12.19
[RTOS_Day2]임계영역 보호  (0) 2018.12.18
[RTOS_Day2]시간관리 함수  (2) 2018.12.18

+ Recent posts