์ธํ๋ํ๊ต ๊ณต๊ณผ๋ํ์์ ์ ์๊ณตํ ํ์ฌ ํ์๋ฅผ ๋ฐ์์ผ๋ฉฐ ์๋ฒ ๋๋ ์์คํ ์ฉ ์ํํธ์จ์ด ๊ฐ๋ฐ์๋ก์จ ์๋ ๊ฐ์ ๊ฒฝ๋ ฅ์ ์์์ต๋๋ค. ์๋ฒ ๋๋ ์์คํ ๋ฐ ํ๋ก๊ทธ๋๋ฐ์ ์ํ ์ ๋ฌธ ๊ฐ์ฌ๋ก๋ ํ๋ ์ค์ ๋๋ค. ์์ดํฐ 3GS ๋ฑ์ฅ๊ณผ ๊ฐ์ ์๊ธฐ์ ๋งฅ(๋ถ)์ ์ ๋ฌธํ์๊ณ , ๊ทธ๋๋ถํฐ ๋งฅ(๋ถ) ์๋ํ์ ๊ด์ฌ์ ๊ฐ๊ฒ ๋์์ต๋๋ค. '๋งฅ(๋ถ)์์ ์ฌ์ฉํ ์ ์๋ ์๋ฆฌ ๋ฆฌ๋ชจํธ', 'ํค๋ณด๋๋ง์์คํธ๋ก๋ฅผ ์ด์ฉํ ๊ตฌ๊ธ๋ฒ์ญ๊ธฐ' ๊ฐ์ ์คํ ์์ค๋ฅผ ๊นํ๋ธ(https://github.com/guileschool) ์ ๋๊ณ ๊ฐ๋ฐ ๋ฐ ์ ์ง๋ณด์ํ๊ณ ์์ต๋๋ค. ์คํ ์์ค ํ๋์จ์ด '๋น๊ธ๋ณธ๋ธ๋' ์๋ ๋ง์ ๊ด์ฌ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋งฅ(๋ถ) ์๋ํ๋ฅผ ์ด์ฉํ์ฌ ์์ฐ์ฑ์ ๋์ผ ์ ์๋ ์ปดํจํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ๋ถ์ผ์ ๊ด์ฌ์ ๊ฐ์ง๊ณ ์๊ณ , ์ด๋ฅผ ํ์๋ก ํ๋ ์ฌ๋๋ค์ ๋๊ณ ์์ต๋๋ค.
๊ฐ์ ์์ฒญ ๋ฐ ๊ธฐํ ๋ฌธ์์ฌํญ์ guileschool@gmail.com์ผ๋ก ๋ณด๋ด์ฃผ์ธ์ :)
Courses
Reviews
- FreeRTOS Programming
- FreeRTOS Programming
- FreeRTOS Programming
- ARM Cortex-M Processor Programming
Posts
Q&A
ํฌํ ๋ถํ๋๋ฆฝ๋๋ค. <NUCLEO-G071RB>
์๋ ํ์ธ์. jykim3๋!ํฌํ ์๋ฃ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์https://inf.run/9vCpB
- 0
- 2
- 12
Q&A
์ฌ์ง์ ๊ฐ๋ฅ์ฌ๋ถ์ ๊ดํ ์ง๋ฌธ
์๋ ํ์ธ์. ๋ฐ์์ฐ๋!์๋์ ๊ฐ์ด ์ฌ์ฉํ์๋ฉด void swap(int x, int y) ์ ์ฌ์ง์ ์ ๋์ํ ์ ์๋ ํจ์๋ก์์ ๊ธฐ๋ฅ์ ์ ์ํํด์ค๋๋ค.// ํ์คํฌ 1int a = 10, b = 20;swap(&a, &b); // temp1์ ํ์คํฌ1์ ์คํ// ํ์คํฌ 2 (๋์ ์คํ)int c = 30, d = 40;swap(&c, &d); // temp2๋ ํ์คํฌ2์ ์คํํ์ง๋ง, ์๋์ ๊ฐ์ ์ฌ์ฉ ์์์์๋ ์ฌ์ง์ ์ด ์๋๋ค๋ ์ ์์งํ์๊ธฐ ๋ฐ๋๋๋ค.์ด๊ฑด swap ํจ์๊ฐ ์ฌ์ง์ ๋ถ๊ฐ๋ฅํด์๊ฐ ์๋๋ผ, ํธ์ถ์๊ฐ ๊ฐ์ ๋ฐ์ดํฐ์ ๋์ ์ ๊ทผํ๊ธฐ ๋๋ฌธ์ ๋๋ค.// ํ์คํฌ 1swap(&shared_x, &shared_y);// ํ์คํฌ 2 (๋์ ์คํ)swap(&shared_x, &shared_y);- ๋ -
- 1
- 1
- 27
Q&A
01_TASKMANํ๋ก์ ํธ ๋๋ฒ๊น ๋ชจ๋ ์คํจ
์๋ ํ์ธ์. ํ์ต์๋!STM32CubeIDE ์ต์ ๋ฒ์ ์์ GCC ์ปดํ์ผ๋ฌ๊ฐ ์ ๋ฐ์ดํธ๋๋ฉด์ ๋ฐ์ํ๋ ๋ฌธ์ ๊ฐ ์์ฌ๋์ด chatGPT ์ ํ์ธํ ๊ฒฐ๊ณผ ์์๋๋ก ๊ทธ ๋ฌธ์ ๊ฐ ๋ง์์ต๋๋ค.__FILENAME__ ๋งคํฌ๋ก๊ฐ ๋ ์ด์ ๊ธฐ๋ณธ ์ ๊ณต๋์ง ์์ต๋๋ค.__FILE_NAME__ ์ ์ฌ์ฉํ์๋ฉด ๋๊ฒ ์ต๋๋ค. ์๋ ๋ด์ฉ ์ฐธ๊ณ ํด์ฃผ์ธ์.์ปดํ์ผ๋ฌ ์ต์ ์ผ๋ก ๋งคํฌ๋ก ์ ์ (๊ฐ์ฅ ๊น๋)1. ํ๋ก์ ํธ ์ฐํด๋ฆญ โ Properties2. C/C++ Build โ Settings โ Tool Settings3. MCU GCC Compiler โ Preprocessor4. Defined symbols (-D) ์ ์ถ๊ฐ:```FILENAME=__FILE_NAME__```
- 1
- 2
- 34
Q&A
๊ทธ๋ฌ๋ฉด malloc/free๊ฐ ์๋ ๋์ ํ ๋น์๋ฅผ ์จ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ธฐ๋๋ฌธ์
์๋ ํ์ธ์. ๋ฐ์์ฐ๋!ํ์ํ๋ค๋ฉด main ํจ์ ์์ ์งํ c runtime heap ์์ญ์ malloc ์ด๋ new ๋ก ํฐ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ญ์ ํ ๋นํ์๊ณ ๊ทธ ์์ญ์ bss ์ ํ ๋นํ๊ณ ์๋ ๊ฒ์ฒ๋ผ freertos ์ฉ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ์ ์ ์ธํ์ฌ ์ฌ์ฉํ์ค ์ ์์ต๋๋ค. // FreeRTOSConfig.h #define configAPPLICATION_ALLOCATED_HEAP 1 #define configTOTAL_HEAP_SIZE (100 * 1024) // main.c uint8_t *ucHeap; // extern์ผ๋ก ์ ์ธ๋ ucHeap์ ์ํด int main(void) { // C ๋ฐํ์ heap์์ ํ ๋น ucHeap = (uint8_t*)malloc(configTOTAL_HEAP_SIZE); if (ucHeap == NULL) { // ํ ๋น ์คํจ ์ฒ๋ฆฌ while(1); } // ์ด์ FreeRTOS๋ malloc๋ ์์ญ์ ucHeap์ผ๋ก ์ฌ์ฉ xTaskCreate(...); vTaskStartScheduler(); return 0; }
- 1
- 2
- 32
Q&A
์คํ์์
์๋ ํ์ธ์. ๋ฐ์์ฐ๋!๋ฉํฐํ์คํน ํ๊ฒฝ์์์ printf ๋๋ฒ๊น ์ ์์นซํ๋ฉด ํ์คํฌ์ ๋์ ์ํฉ์ ๋ํด ์๋ชป ์ดํดํ๋ ์ค๋ฅ๋ฅผ ๋ฒํ๊ธฐ ์ฌ์ด๋ฐ์. ๊ทธ๋ฐ ์๋ฏธ์์ ์ง๊ธ ํ์ ์ง๋ฌธ๊ณผ ๊ถ๊ธ์ฆ์ ๊ทธ ์๋ฏธ๊ฐ ํฌ๋ค๊ณ ํ ์ ์์ต๋๋ค.๋ต๋ณ ๋๋ฆฌ๊ธฐ ์์ ์ ๊ฐ ์ํํ ํ ์คํธ์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ง๊ธ๋ถํฐ ๋ด์ฃผ์์ฃ .ํ ์คํธ์ ์ฌ์ฉํ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ฐ์์ฐ๋์ด ๊ถ๊ธํด ํ์๋ ๊ทธ ์กฐ๊ฑด์ด์ฃ .์ ๋ ๋ก์ง๋ถ์๊ธฐ๋ฅผ ์ด์ฉํด์ ํ์คํฌ ๋์์ ๋ฉด๋ฐํ ๋ณด๊ธฐ ์ํด ํ์ํ ์ฝ๋๋ฅผ ์ถ๊ฐํ์์ต๋๋ค.HAL_GPIO_WritePin(GPIOB, T1_Pin, GPIO_PIN_SET); ๋ฐ๋ก ์ด๊ฑฐ์ ๋๋ค.static void Task1( void const *pvParameters ) { const char *pcTaskName = "Task1"; pvParameters = pvParameters; // for compiler warning /* Print out the name of this task. */ printf( "%s is running\n", pcTaskName ); printf("\n------- Task1 information -------\n"); printf("task1 name = %s \n",pcTaskGetName( xHandle1 )); printf("task1 priority = %d \n",(int)uxTaskPriorityGet( xHandle1 )); // printf("task1 status = %d \n",eTaskGetState( xHandle1 )); printf("----------------------------------\n"); //vTaskDelay(1); while(1) { HAL_GPIO_WritePin(GPIOB, T1_Pin, GPIO_PIN_SET); /* TODO #3: ์ฝ๋๋ฅผ ์คํ ํ์ฌ ๋ณด๊ณ vTaskDelay() ์ฝ๋๋ฅผ ์ฃผ์ ์ฒ๋ฆฌํ ํ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ค๋ช ํ๋ค */ #if 1 // No comment //vTaskDelay (pdMS_TO_TICKS (1000)); printf("a"); fflush(stdout); // ๋ฌธ์ 'a' ์ถ๋ ฅ #endif // TODO #3 HAL_GPIO_WritePin(GPIOB, T1_Pin, GPIO_PIN_SET); task1timer++; } } static void Task2( const struct Param_types *Param ) { const char *pcTaskName = "Task2"; /* Print out the name of this task. */ printf( "%s is running\n", pcTaskName ); printf("\n------- Task2 parameter passed from main --------\n"); printf("task2 first parameter = %d \n",Param->P1); printf("task2 second parameter = %d \n",Param->P2); printf("--------------------------------------------------\n"); while(1) { HAL_GPIO_WritePin(GPIOB, T2_Pin, GPIO_PIN_SET); int i; /* TODO #3: ์ฝ๋๋ฅผ ์คํ ํ์ฌ ๋ณด๊ณ vTaskDelay() ์ฝ๋๋ฅผ ์ฃผ์ ์ฒ๋ฆฌํ ํ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ค๋ช ํ๋ค */ #if 1 // No comment //vTaskDelay (pdMS_TO_TICKS (1000)); printf("b"); fflush(stdout); // ๋ฌธ์ 'b' ์ถ๋ ฅ #endif // TODO #3 HAL_GPIO_WritePin(GPIOB, T2_Pin, GPIO_PIN_SET); task2timer++; } } ์๋ ์คํ๊ฒฐ๊ณผ๋ฅผ ๋ณด์์ฃ . ์ ํํ๊ฒ ์ฐ์ ์์๋ฅผ ๋์ผํ๊ฒ ๋ถ์ฌํ Task1 ์ Task2 ์ printf, fflush, HAL_UART_Transmit ๊ฐ ์คํ๋๊ณ ์๋์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด ์ ํํ๊ฒ 1๋ฐ๋ฆฌ ์ด ๊ฐ๊ฒฉ์ผ๋ก ๋ผ์ด๋๋ก๋น์ด ์ํ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.(์ฌ์ง) (์ฌ์ง)๋ํ ์๋์ ๊ฐ์ ํ ์คํธ ๊ฒฐ๊ณผ๋ ๋ณด์๊ฒ ์ต๋๋ค. ๋จ์ง 171 ๋ผ์ธ์ ์คํ ์ ๋ฌด์ ๋ฐ๋ผ ์๋์ ๊ฐ์ด printf ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ํฌ๊ฒ ๋ฌ๋ผ์ง๋๋ค.(์ฌ์ง)(์ฌ์ง)(์ฌ์ง) ์ด ์ฆ์์ ์ด๋ป๊ฒ ์ค๋ช ํ ์ ์๋๊ฐ ํ๋ฉด ๊ท์น์ ์ผ๋ก ๋ฐ์ํ๋ tick ์ธํฐ๋ฝํธ์ ์ฃผ๊ธฐ์ (์ผ์ ํ ๊ฐ๊ฒฉ)์ผ๋ก ์คํ๋๋ for ๋ฃจํ๋ฅผ ๊ณ ๋ คํ๋ฉด ์ด๋ค ํ์คํฌ๋ ์ด์ด์ข์ ์ฝ์ ์ถ๋ ฅ๋ฒํผ์ ๊ธ์๋ฅผ ๋ ๋ง์ด ์ ๋ ฅํ ์ ์๊ฒ ๋๊ณ ๋ ๋ค๋ฅธ ์ด๋ค ํ์คํฌ๋ ์ฝ์ ์ถ๋ ฅ๋ฒํผ์ ๊ธ์๋ฅผ ๋ ์ ๋ ฅํ๊ฒ ๋๋ ์ํฉ์ผ๋ก ์ดํดํ ์ ์์ ๊ฒ๋๋ค. ์๋ ํจ์ HAL_UART_Transmit ๋ด์์๋ UART ์ ์ก์ ์ํด ๋ฒํผ๊ฐ ๋น์์ง๋ ๋๊น์ง CPU ์๊ฐ์ ์๋ชจํ๋ฉด์ ๊ธฐ๋ค๋ฆฌ๋ ์ฝ๋(UART_WaitOnFlagUntilTimeout) ๊ฐ ์ฌ์ฉ๋๊ณ ์๋๋ฐ, ์ด ํจ์๊ฐ ๋ฐ๋ก ์ง๊ธ ์ด๋ฌํ ์ด์ํ ์ผ์ด ์ผ์ด๋๋ ์ฃผ ์์ธ์ผ ๊ฒ์ ๋๋ค. ์ ๋ฌํ ํ์ด๋ฐ ์ฐจ์ด์ ๋ฐ๋ผ task1 ์ด๋ task2 ๋ ์ค ํ๋๋ ์ด ์ธ๋ชจ์๋? ์ผ๋ง ์ํํ๊ฒ ๋์์ ๊ฒ๋๋ค. ์ด๋ค ํ์คํฌ๋ a (ํน์ b) ๊ธ์๋ฅผ ๋ฒํผ์ ๋ฃ๋ ์์ฐ์ ์ธ ์ผ์ ์์ฃผ๋ก ์คํํ๋๊ฐ ํ๋ฉด, ์ด๋ค ํ์คํฌ๋ ์ด ๊ธฐ๋ค๋ฆฌ๋ ์ผ์ ์์ฃผ๋ก ์ํ ํ๋ ๊ฑฐ์ฃ .HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) { uint8_t *pdata8bits; uint16_t *pdata16bits; uint32_t tickstart = 0U; /* Check that a Tx process is not already ongoing */ if (huart->gState == HAL_UART_STATE_READY) { if ((pData == NULL) || (Size == 0U)) { return HAL_ERROR; } /* Process Locked */ __HAL_LOCK(huart); huart->ErrorCode = HAL_UART_ERROR_NONE; huart->gState = HAL_UART_STATE_BUSY_TX; /* Init tickstart for timeout management */ tickstart = HAL_GetTick(); huart->TxXferSize = Size; huart->TxXferCount = Size; /* In case of 9bits/No Parity transfer, pData needs to be handled as a uint16_t pointer */ if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) { pdata8bits = NULL; pdata16bits = (uint16_t *) pData; } else { pdata8bits = pData; pdata16bits = NULL; } /* Process Unlocked */ __HAL_UNLOCK(huart); while (huart->TxXferCount > 0U) { if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK) { return HAL_TIMEOUT; } if (pdata8bits == NULL) { huart->Instance->DR = (uint16_t)(*pdata16bits & 0x01FFU); pdata16bits++; } else { huart->Instance->DR = (uint8_t)(*pdata8bits & 0xFFU); pdata8bits++; } huart->TxXferCount--; } if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TC, RESET, tickstart, Timeout) != HAL_OK) { return HAL_TIMEOUT; } /* At end of Tx process, restore huart->gState to Ready */ huart->gState = HAL_UART_STATE_READY; return HAL_OK; } else { return HAL_BUSY; } } ๋ฐ๋ผ์, ๊ฐ๋ฐ๊ณผ ๋๋ฒ๊น ์ ์์ด ์ธ์ ๋ ์ด๋ฐ ์ํฉ์ด ์ผ์ด๋๊ณ ์๋ค๋ ์ ์ ๊ณ ๋ คํด์ผ ํ ๊ฒ๋๋ค.๊ทธ๋ฆฌ๊ณ , ์ถ๊ฐ์ ์ผ๋ก ์๋ ์์ค๋ ์ฐธ๊ณ ํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค.### 1. printf.chttps://github.com/lattera/glibc/blob/master/stdio-common/printf.c### 2. vfprintf.chttps://github.com/lattera/glibc/blob/master/stdio-common/vfprintf.c### 3. fileops.c (new_do_write, IOnew_file_write ๋ฑ)https://github.com/lattera/glibc/blob/master/libio/fileops.chttps://github.com/bminor/glibc/blob/master/libio/fileops.c### 4. syscall.S (x86_64 ์ด์ ๋ธ๋ฆฌ)https://github.com/lattera/glibc/blob/master/sysdeps/unix/sysv/linux/x86_64/syscall.S### 5. iofflush.chttps://github.com/lattera/glibc/blob/master/libio/iofflush.c
- 1
- 2
- 31
Q&A
uart ์ ์ก์ค์๋ ์ค์์นญ์ด ๊ธ์ง๋๋์?
์๋ ํ์ธ์. ๋ฐ์์ฐ๋!freertos ์์ ์ค์ ์ฌ์ฉํ ์์ ์์ค ๊ธฐ์ค์ผ๋ก ๋ต๋ณ๋๋ฆฝ๋๋ค. ํ์ฌ ์ฐ๋ฆฌ ์์ค ์ฝ๋์์๋ stm32cubeide ์์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ HAL API UART ๋๋ผ์ด๋ฒ๋ฅผ ์ด์ฉํ์ฌ printf ์ ์ํํฉ๋๋ค.๊ฒฐ๊ตญ ์ง๋ฌธ ๋ด์ฉ์ ๊ด๋ จ ํต์ฌ ํจ์์ธ HAL_UART_Transmit ์ ์ดํด๋ณด์์ผ ํ ํ ๋ฐ์. ํด๋น ํจ์๋ด์์ tick ์ธํฐ๋ฝํธ๋ฅผ ๋ถํ์ฑํ๊ฑฐ๋ ์๋์ ๋ฐฉํดํ ๋งํ ์์๋ ๋ฐ๊ฒฌ๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์, ๊ฐ๋จํ ๋ต๋ณ๋๋ฆฌ์๋ฉด 'fflush ๋ HAL_UART_Transmit ํจ์๊ฐ ์คํ์ค์ด๋๋ผ๋ tick ์ธํฐ๋ฝํธ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค๋ฉด ์ธํฐ๋ฝํธ๋ ์ฆ์ ์ฒ๋ฆฌ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฌธ๋งฅ์ ํ๋ ํ์ํ๋ค๋ฉด ์คํ๋๋ค' ์ ๋๋ค.HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) { uint8_t *pdata8bits; uint16_t *pdata16bits; uint32_t tickstart = 0U; /* Check that a Tx process is not already ongoing */ if (huart->gState == HAL_UART_STATE_READY) { if ((pData == NULL) || (Size == 0U)) { return HAL_ERROR; } /* Process Locked */ __HAL_LOCK(huart); huart->ErrorCode = HAL_UART_ERROR_NONE; huart->gState = HAL_UART_STATE_BUSY_TX; /* Init tickstart for timeout management */ tickstart = HAL_GetTick(); huart->TxXferSize = Size; huart->TxXferCount = Size; /* In case of 9bits/No Parity transfer, pData needs to be handled as a uint16_t pointer */ if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) { pdata8bits = NULL; pdata16bits = (uint16_t *) pData; } else { pdata8bits = pData; pdata16bits = NULL; } /* Process Unlocked */ __HAL_UNLOCK(huart); while (huart->TxXferCount > 0U) { if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK) { return HAL_TIMEOUT; } if (pdata8bits == NULL) { huart->Instance->DR = (uint16_t)(*pdata16bits & 0x01FFU); pdata16bits++; } else { huart->Instance->DR = (uint8_t)(*pdata8bits & 0xFFU); pdata8bits++; } huart->TxXferCount--; } if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TC, RESET, tickstart, Timeout) != HAL_OK) { return HAL_TIMEOUT; } /* At end of Tx process, restore huart->gState to Ready */ huart->gState = HAL_UART_STATE_READY; return HAL_OK; } else { return HAL_BUSY; } }
- 1
- 2
- 26
Q&A
๊ทธ๋ฆผ๋ค๋ ํด์ ํ ์ ์์ด์ผ ํ๋์?
์๋ ํ์ธ์. ์ด์ค์ฃผ๋!CORTEX ํจ๋ฐ๋ฆฌ ๊ฐ๊ฐ์ ํน์ง์ ์์ฝํด๋๋ฆฐ๊ฒ์ด๊ณ ์, '๊ผญ ์ดํดํ๊ณ ๊ฐ์ผ ํ๋ ๋ด์ฉ์ ์๋๋ค' ๋ผ๊ณ ๋ง์๋๋ฆฝ๋๋ค. ๋๋ถ์ด ์ด๋ฒ ์์ ์ CORTEX-M ๊ธฐ๋ฐ์ STM32 ์นฉ์ ์ค์ฌ์ผ๋ก ์งํ๋ฉ๋๋ค.๊ทธ๋ฌ๋ ํด๋น ์ฃผ์ ์๋ง ์ง์คํ์ ๋ ์ข์ต๋๋ค. ๐
- 1
- 2
- 48
Q&A
์คํ์ค๋ฒํ๋ก์ฐ ์ค์ต ์ค stack size ์ค์ ์ง๋ฌธ
์๋ ํ์ธ์, SeongJin ๋!์์ ์ดฌ์ ๋น์์๋ ์คํ ์ฌ์ด์ฆ๊ฐ 128 ์ด์๊ณ , ์ดํ ์์ ํํ ๋ฆฌ์ผ์ด ๋ฒ์ ผ์ ๋๋ฉด์ ์คํ ํฌ๊ธฐ ์ฌ์ ๋ถ ์ฆ๊ฐ์ ํ์์ฑ ๋๋ฌธ์ ์์ ํ๊ฒ ๋์๊ณ ํ์ฌ๋ 256 ์ด ๋ง์ต๋๋ค. ์ถ๊ฐ์ ์ผ๋ก ๊ถ๊ธํ ์ ์์ผ์๋ฉด ๋ค์ ์ง๋ฌธ ๋จ๊ฒจ์ฃผ์ธ์. ๊ฐ์ฌํฉ๋๋ค ๐
- 0
- 2
- 30
Q&A
no-stlink
๊ธ์์.. ์ฒ์์ ์ค์นํ์์ง ์์์๊น์?(์ฌ์ง)
- 1
- 2
- 43
Q&A
ํฌํ ์ํฉ๋๋ค.
taegyu224๋์ด ๋ง์ํ์ ํฌํ ์๋ฃ๋ ์๋ ๋งํฌ์์ ๋ค์ด๋ก๋ ํ์ค ์ ์์ต๋๋ค.https://inf.run/45f6Yํน์ฌ ์ฌ์ฉํ์๋ ์ปดํ์ผ๋ฌ ๋ฒ์ ผ๊ณผ ์ด ์๋ฃ๊ฐ ํธํ์ฑ ๋ฌธ์ ๊ฐ ์์ ์ ์์ผ๋ ๊ทธ๋๋ ์๋ ๊ธ์ ์ฐธ๊ณ ํด์ฃผ์ธ์.https://inf.run/9mVm4
- 2
- 2
- 47






