๐ ๋ค์ด๊ฐ๋ฉฐ
CFS-101 ํธ๋ ์ด๋์ ๋ง์ง๋ง ํํธ์์๋ SCH(Scheduler) ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์ ์ฃผํ์๋ฅผ ๊ธฐ๋ณธ 100Hz์์ 40Hz๋ก ๋ณ๊ฒฝํ๋ ์ค์ต์ ํผ์ ์งํํ ๊ฒ์ ๊ถ์ ํ๋ค. ์ ํ๊ณ ๋์ด๊ฐ๋ฉด ์ญํ๋, ์ ์ข ์ ๋ฏธ๋ฅผ ๊ฑฐ๋๊ธฐ ์ํด ๋ง์ง๋ง ์ค์ต๊น์ง ๊ผผ๊ผผํ ์ง๊ณ ๋์ด๊ฐ๋ ค ํ๋ค.
ํด๋น ์ค์ต ์ธ์๋ /home/dev/Training_workspace/CFS-101/apps/sch/docs ๋๋ ํ ๋ฆฌ์ SCH ์ฑ์ ๊ดํ ์์ธํ ์ค๋ช
์ด ์ค๋น๋์ด ์์ผ๋, ์ ๋
ํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
๐ฐ ์ฌ๋กฏ ์ ๋ณ๊ฒฝ: sch_platform_cfg.h
SCH_TOTAL_SLOTS ๊ฐ์ 100์์ 40์ผ๋ก ๋ณ๊ฒฝํ๋ค.
/* ๋ณ๊ฒฝ ์ */
#define SCH_TOTAL_SLOTS 100 /* SCH wake-up rate (Hz) */
/* ๋ณ๊ฒฝ ํ */
#define SCH_TOTAL_SLOTS 40 /* SCH wake-up rate (Hz) */์ด ๊ฐ์ด ๋ฐ๋๋ฉด SCH_TABLE_ENTRIES๋ ์๋์ผ๋ก ์ฌ๊ณ์ฐ๋๋ค.
#define SCH_TABLE_ENTRIES (SCH_TOTAL_SLOTS * SCH_ENTRIES_PER_SLOT)๐ช ์ค์ผ์ค ํ
์ด๋ธ ํฌ๊ธฐ ์กฐ์ : sch_def_schtbl.c
SCH_TABLE_ENTRIES ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ๋ ๊ตฌ์กฐ์ฒด๋ก SCH_DefaultScheduleTable์ด ์๋ค.
SCH_ScheduleEntry_t SCH_DefaultScheduleTable[SCH_TABLE_ENTRIES]์ด ํ
์ด๋ธ์ SCH_TABLE_ENTRIES ํฌ๊ธฐ์ ๋ฐฐ์ด์ด๋ฏ๋ก, ์ฌ๋กฏ #0~#39๋ง ๋จ๊ธฐ๊ณ #40~#99๋ฅผ ์ญ์ ํด์ผ ํ๋ค. ๋ฌธ์ ๋ ์ฌ๋กฏ #40 ์ดํ์ ํ์ฑ ์ํธ๋ฆฌ๊ฐ ์กด์ฌํ๋ค๋ ์ ์ด๋ค.
๊ธฐ์กด ํ ์ด๋ธ์์ #40 ์ดํ์ ์๋ ํ์ฑ ์ํธ๋ฆฌ 3๊ฐ๋ฅผ #0~#39 ๋ฒ์์ ๋น ์ฌ๋กฏ์ผ๋ก ์ด๋์์ผ์ผ ํ๋ค.
| ์๋ ์ฌ๋กฏ | ๋ด์ฉ | ์ด๋ํ ์ฌ๋กฏ |
|---|---|---|
| #43 | ES HK Request | โ #4 |
| #49 | SCH HK Request | โ #6 |
| #56 | CI HK Request + TO HK Request | โ #8 |
์ฌ๋กฏ #4 (โ ๊ธฐ์กด #43์ ES HK)
/* slot #4 */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 4, 3, CFE_ES_SEND_HK_MIDX, SCH_GROUP_CFE_HK }, /* ES HK Request */
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},์ฌ๋กฏ #6 (โ ๊ธฐ์กด #49์ SCH HK)
/* slot #6 */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 4, 2, SCH_SEND_HK_MIDX, SCH_GROUP_CFS_HK }, /* SCH HK Request */
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},์ฌ๋กฏ #8 (โ ๊ธฐ์กด #56์ CI/TO HK)
/* slot #8 */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 4, 1, CI_SEND_HK_MIDX, SCH_GROUP_NONE }, /* CI HK Request */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 4, 2, TO_SEND_HK_MIDX, SCH_GROUP_NONE }, /* TO HK Request */
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},์ด๋ํ ์ฌ๋กฏ์ ๊ธฐ์กด์ ๋น์ด์๋ ๊ณณ ์ค ์๋ฌด ๊ณณ์ด๋ ๊ณจ๋ผ๋ ๋๋ค. ๋ค๋ง ํ ์ฌ๋กฏ์ activity๋ฅผ ๋๋ฌด ๋ชฐ์๋ฃ์ผ๋ฉด ํด๋น minor frame ์์ ์ฒ๋ฆฌ๊ฐ ๋๋์ง ์์ ์ ์์ผ๋ฏ๋ก ์ ๋นํ ๋ถ์ฐ์ํค๋ ๊ฒ์ด ์ข๋ค.
์ด๋ ํ ์ฌ๋กฏ #40~#99๋ฅผ ์ ๋ถ ์ญ์ ํ๊ณ , ๋ฐฐ์ด์ ๋ง์ง๋ง ์์(์ฌ๋กฏ #39์ ๋ง์ง๋ง ์ํธ๋ฆฌ)์์ trailing comma๋ฅผ ์ ๊ฑฐํ๋ฉด ๋๋ค.
Frequency / Remainder์ ๋ํด
์ค์ผ์ค ํ
์ด๋ธ์ ๊ฐ ์ํธ๋ฆฌ์๋ Frequency์ Remainder ํ๋๊ฐ ์๋ค. ์๋ฅผ ๋ค์ด Frequency=4, Remainder=3์ "4๋ฒ์งธ major frame๋ง๋ค ์คํ"์ ์๋ฏธํ๋ค.
Major frame 1๊ฐ๋ ์ ์ฒด ์ฌ๋กฏ์ ํ ๋ฐํด ๋๋ ์ฃผ๊ธฐ๋ค.
- 100Hz, 100์ฌ๋กฏ โ major frame = 100 รท 100 = 1์ด
- 40Hz, 40์ฌ๋กฏ โ major frame = 40 รท 40 = 1์ด
์ฌ๋กฏ ์์ Hz๋ฅผ ํจ๊ป ๋ณ๊ฒฝํ์ผ๋ฏ๋ก major frame ์ฃผ๊ธฐ๋ ๋์ผํ๊ฒ 1์ด๋ก ์ ์ง๋๋ค. ๋ฐ๋ผ์ Frequency=4์ธ HK request๋ ์ฌ์ ํ 4์ด๋ง๋ค ์คํ๋๋ฉฐ, ๊ธฐ์กด๊ณผ ๋์์ด ๋ฌ๋ผ์ง์ง ์๋๋ค.
๋ง์ฝ ์ฌ๋กฏ ์๋ง ์ค์ด๊ณ Hz๋ฅผ ๊ทธ๋๋ก ๋๋ค๋ฉด (40์ฌ๋กฏ์ 100Hz) major frame์ด 0.4์ด๊ฐ ๋์ด ์๋์น ์๊ฒ ์ฃผ๊ธฐ๊ฐ ๋นจ๋ผ์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ ์ฃผ์ํด์ผ ํ๋ค.
โจ ๋ง์น๋ฉฐ
๊ฐ๋จํ ์์ ์ด์ง๋ง, "์ด๋ค ํ์ผ์ ์ ๋ฐ๊ฟ์ผ ํ๋์ง"๋ฅผ ์ค์ค๋ก ์ฐพ์๋ด๊ธฐ๊ฐ ์ฝ์ง ์์๋ค. SCH_TOTAL_SLOTS๋ฅผ ๋ฐ๊พธ๋ฉด ํ ์ด๋ธ ํฌ๊ธฐ๊ฐ ๋ฌ๋ผ์ง๊ณ , ๊ทธ๋ฌ๋ฉด ๊ธฐ์กด์ #40 ์ดํ์ ๋ฐฐ์น๋ ํ์ฑ ์ํธ๋ฆฌ๊ฐ ์๋ ค๋๊ฐ๋ค๋ ๊ฑธ ์์์ฑ์ผ ํ๋ค. ๋ํ Frequency/Remainder๊ฐ major frame ๊ธฐ์ค์ด๋ผ๋ ์ ์ ์ดํดํด์ผ "์ฌ๋กฏ ์๋ฅผ ์ค์ฌ๋ HK ์ฃผ๊ธฐ๊ฐ ์ ๋ณํ๋ ์ด์ "๋ฅผ ์ค๋ช ํ ์ ์๋ค.
CFS-101 ํธ๋ ์ด๋ ์๋ฆฌ์ฆ๋ ์ด๊ฒ์ผ๋ก ๋ง๋ฌด๋ฆฌ๋์๋ค. cFE ํ๋ ์์ํฌ ์์์ ์ฑ์ ์ถ๊ฐํ๊ณ , ํ ์ด๋ธ์ ์์ ํ๊ณ , ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ๊ตฌ์ฑํ๋ ์ผ๋ จ์ ๊ณผ์ ์ ํตํด cFS์ ์ค๊ณ ์ฒ ํ โ ๋ชจ๋ํ์ ์ฌ๊ตฌ์ฑ ์ฉ์ด์ฑ โ ์ ์ฒด๊ฐํ ์ ์์๊ธธ ๋ฐ๋๋ค!