[cFS] CFS-101(7): SCH ์ถ”๊ฐ€๊ณผ์ œ

@zunione ยท April 09, 2026 ยท 3 min read

๐Ÿš€ ๋“ค์–ด๊ฐ€๋ฉฐ

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์˜ ์„ค๊ณ„ ์ฒ ํ•™ โ€” ๋ชจ๋“ˆํ™”์™€ ์žฌ๊ตฌ์„ฑ ์šฉ์ด์„ฑ โ€” ์„ ์ฒด๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ๊ธธ ๋ฐ”๋ž€๋‹ค!

@zunione
์ „ํฌ์›