월 37,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨FreeRTOS 프로그래밍
[질문/해결완료] Task에서 사용하는 stack 영역 위치
현재 test중인 프로젝트의 stack이 강의내용과 달리 static 방식으로만 고정되어 있는 것 같아서 확인 부탁드립니다.porting에 사용된 파일을 보면 middlewares/third_party/.../portable/gcc/memmang/heap_4.c를 확인한 결과 아래와 같이 기 설정한 배열영역을 대상으로 task의 stack을 할당하는 것처럼 보입니다. malloc을 사용하여 할당하는 부분을 code에서 찾지 못해서 분석을 잘 못 할 수 있으니 확인 부탁드립니다.#if( configAPPLICATION_ALLOCATED_HEAP == 1 )/* The application writer has already defined the array used for the RTOSheap - probably so it can be placed in a special segment or address. */extern uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];#elsestatic uint8_t ucHeap[ configTOTAL_HEAP_SIZE ]; //cms: the area used for task's stack#endif /* configAPPLICATION_ALLOCATED_HEAP */freertosconfig_base.h 설정#define configSUPPORT_STATIC_ALLOCATION 1 //cms: stack is created at bss area#define configSUPPORT_DYNAMIC_ALLOCATION 1 //cms: stack is created at heap areatask.c에서 task 생성시 사용한 함수use 'xTaskCreate' */#if 1xTaskCreate( (TaskFunction_t)Task1, "Task1", 256, (void*)Param, TASK_1_PRIO, &xHandle1);#endif // TODO #1/* Create the other task in exactly the same way. */Param = &Param_Tbl; /* get parameter tbl addr */Param->P1 = 111111; /* set parameter */Param->P2 = 222222;#ifdef CMSIS_OSosThreadDef(Task2, (void const *)Task2, osPriorityBelowNormal, 0, 256);xHandle2 = osThreadCreate (osThread(Task2), (void*)Param);#elsexTaskCreate( (TaskFunction_t)Task2, "Task2", 256, (void*)Param, TASK_2_PRIO, &xHandle2 );xTaskCreate( (TaskFunction_t)Task3, "Task2", 128, (void*)Param, TASK_3_PRIO, &xHandle3 );#endifmemory map01_TASKMAN.elf: file format elf32-littlearmSections:Idx Name Size VMA LMA File off Algn 0 .isr_vector 00000198 08000000 08000000 00010000 2**0 CONTENTS, ALLOC, LOAD, READONLY, DATA 1 .text 00004f04 080001a0 080001a0 000101a0 2**4 CONTENTS, ALLOC, LOAD, READONLY, CODE 2 .rodata 0000092c 080050a4 080050a4 000150a4 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 3 .ARM.extab 00000000 080059d0 080059d0 00020074 2**0 CONTENTS 4 .ARM 00000008 080059d0 080059d0 000159d0 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 5 .preinit_array 00000000 080059d8 080059d8 00020074 2**0 CONTENTS, ALLOC, LOAD, DATA 6 .init_array 00000004 080059d8 080059d8 000159d8 2**2 CONTENTS, ALLOC, LOAD, DATA 7 .fini_array 00000004 080059dc 080059dc 000159dc 2**2 CONTENTS, ALLOC, LOAD, DATA 8 .data 00000074 20000000 080059e0 00020000 2**2 CONTENTS, ALLOC, LOAD, DATA 9 .bss 00004150 20000074 08005a54 00020074 2**2 10 ._user_heap_stack 00000604 200041c4 08005a54 000241c4 2**0task 동작시 확인한 stack 영역은 bss영역
- 미해결FreeRTOS 프로그래밍
파일다운로드문의
안녕하세요. 수업시간에 보여주신 FreeRTOS_실습응용프로젝트_2019-03-14 홍영기.pdf 파일은 어디서 다운로드 받나요?
- 해결됨FreeRTOS 프로그래밍
[질문/해결완료] configUSE_IDLE_HOOK 를 1로 설정하고 동작 시 BusFault exception 발생
test시 code는 아래와 같이 수정하였습니다.freertosconfig.h에서 configUSE_IDLE_HOOK를 1로 설정각 task마다, 각 task에 할당된 전역변수를 1씩 증가vApplicationIdleHook에서 task별 증가된 전역변수값 출력디버깅을 위해서 exception hander를 모두 enable (control.shcsr [18:16] = 0x7 로 설정) 하고 test 결과.busfault exception이 발생하였습니다.vApplicationIdleHook() 수정상황UART 상황: task1~3값은 0이고 idle task에서만 count 증가한 것처럼 출력니다. reset 하고 동작시에도 항상 고정적인 위치 (Idle task에서 증가한 변수가 180인 시점) 에서 발생합니다. (재현 100%)해당 시점의 register 상황입니다. lr이 0xfffffff1로 보아 exception 처리 중 busfault exception이 발생한 듯 보입니다만 추가적인 stack 분석은 능력 밖이네요.fflush 등의 uart 처리가 상대적으로 느려서 뭔가 문제가 발생하는 걸까요? 타 환경에서라도 test 부탁드립니다.
- 해결됨FreeRTOS 프로그래밍
[질문/해결완료] configUSE_IDLE_HOOK를 1로 설정시 기존 task printf 문 동작 불가능
freertosconfig.h에서 configUSE_IDLE_HOOK를 1로 설정하면 vApplicationIdleHook() 정상적으로 호출되지만,기존 task에서 printf로 출력한 string이 uart를 통해서 출력되지 않습니다.기존 task1 및 2에 break point를 설정하고 동작시켜본 결과, task switching을 정상적으로 수행되는것은 확인했습니다.이유가 뭘까요?우측의 expression에는 각 task에서 1씩 증가한 전역변수 값인데 정상적으로 증가하면서 동작하고 있습니다.
- 해결됨FreeRTOS 프로그래밍
[질문/해결완료] Idle Task hooking 함수 (vApplicationIdleHook ) 수행되지 않음
Board: nucleo-f411reenv.: stm32cubeide 1.10.1test source: 01_taskman강의시 타 task가 모두 동작하지 않은 시점에 idel task가 수행되는것을 확인하기 위해서 아래와 같이 task3를 생성하였으나, idle task 수행시 증가하는 count가 0입니다.debugging을 통해서 확인한 결과 idle task는 수행되나 vApplicationIdleHook 함수가 수행되지 않는 것으로 보입니다.Hooking 함수를 enable 하려면 어떻게 하면 될까요?수정사항:static void Task3( const struct Param_types *Param){while(1){vTaskDelay(pdMS_TO_TICKS(5000));printf("T1 %d, T2 %d, T3 %d, Idle %d\n", task1timer, task2timer, task3timer, idletimer);fflush(stdout);task3timer++;}}/*-----------------------------------------------------------*/void vApplicationIdleHook (void){idletimer++;printf (".");fflush (stdout);}test log:aaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaT1 2250, T2 225, T3 44, Idle 0aaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaT1 2301, T2 230, T3 45, Idle 0aaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaT1 2351, T2 235, T3 46, Idle 0aaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaT1 2401, T2 240, T3 47, Idle 0aaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaT1 2451, T2 245, T3 48, Idle 0aaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaT1 2501, T2 250, T3 49, Idle 0aaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaT1 2551, T2 255, T3 50, Idle 0aaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaT1 2601, T2 260, T3 51, Idle 0aaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaT1 2651, T2 265, T3 52, Idle 0aaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaT1 2701, T2 270, T3 53, Idle 0aaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaT1 2751, T2 275, T3 54, Idle 0aaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaaaaaaaaabaaT1 2801, T2 280, T3 55, Idle 0
- 미해결FreeRTOS 프로그래밍
CubeIDE 디버깅 에러 발생 문제
안녕하세요. 좋은 강의 잘 듣고 있습니다!Nucleo-G071RB 보드에 포트를 진행하던 중 CubeIDE에서 디버깅 에러가 발생해 문의 드립니다!다음과 같은 오류사항이 발생하는데, 해결방법을 알고 싶습니다 ㅜ 감사합니다
- 미해결FreeRTOS 프로그래밍
실습예제
실습예제를 어떻게 받는지요?
- 미해결FreeRTOS 프로그래밍
죄송하지만, 포팅 부탁드려도 될까요?
[죄송하지만, 포팅 부탁드립니다.]-------------------------------------------------- 사용하고 싶은 ST 보드명: stm32746g-discovery- 사용하시는 컴파일러(stm32cubeide) 버젼 1.10.1-------------------------------------------------
- 미해결FreeRTOS 프로그래밍
지연 인터럽트 관련 질문입니다.
강의 잘 듣고 있습니다. HAL_GPIO_EXTI_Callback(EXTI15_10_IRQHandler)함수(이하 gpio call back isr)안에서 heavy 한 작업을 한다면 SYSTICK event가 상대적으로 적게 발생하는 이유에 대해서 정리했습니다. 이해 한게 맞는지와 질문들 확인 부탁드립니다. gpio call back isr 진행 도중 context switching이 이루어 지는 어떤 freertos kernel함수가 호출 될때 systick 이벤트가 발생한 상태이고 이 이벤트가 nested되어 있으면 systick 카운트를 증가하게 된다. 하지만, gpio call back 함수 내의 memset 함수 내부 진행을 보면 context switching 이벤트 발생하는 부분이 없음으로 이 memset함수 처리하는 동안에 발생하는 systick 이벤트는 사라지게 된다. 인터럽트 우선순위가 gpio call back isr 보다도 높은 systick 이벤트(systick isr)가 발생하더라도 카운터가 증가되지 않아 uart switch log 뒤에 따라오는 systick count값이 전 값과 크게 다르지 않게 된다. 반면에 gpio call back 함수 진행 시 동작이 오래 걸리는 부분은 별도의 task1로 만들어 빼버리고 gpio call back isr은 종료를 하게 된다.실제로는 종료하기 전 Task1을 깨우게 되고 가장 높은 우선순위 task로 context switching까지 해주고 나서 gpio call back 함수가 종료가 된다. 추가 질문으로 1. context switching을 발생시키는 어떤 freertos kernel 함수는 gpio call back isr 함수안에서 portYIELD_FROM_ISR() 뿐인가요? 2.portYIELD_FROM_ISR 함수가 gpio call back 마지막에 있던데 목적은 context switching 하는거같은데 모든 isr 함수 마지막에는 portYIELD_FROM_ISR 함수가 오게 되는건가요? 아니면 어떠한 함수든 context switching 이 이루어 지는 함수가 오게 되나요? 3. gpio call back 마지막에 있는 함수 대신 vTaskSwitchContext()함수를 넣어주게 된다면 시간이 좀더 오래 걸리긴 하겠지만 vTaskSwitchContext()안의{.....taskSELECT_HIGHEST_PRIORITY_TASK()..} 함수가 진행이 되어 동일한 효과를 얻게 되나요? (systick 이벤트가 nested된 상태라면 context switching 발생 후 systick isr로 들어가서 counter 값이 증가하게 되고 systick isr 종료)
- 해결됨FreeRTOS 프로그래밍
portNVIC_INT_CTRL_REG 값 변경이 인터럽트를 유발시키는 이유가 궁금합니다.
문맥전환-커널소스코드로 본 문맥전환 방법 2가지 1:10부분 내용에서 vTaskDelay() à portYIELD_WITH_API()à portYIELD()à portNVIC_INT_CTRL_REG 값 변경하면 인터럽트를 유발시킨다고 하셨는데 portNVIC_INT_CTRL_REG 값 변경한다고해서 어떻게 인터럽트 핸들러까지 호출하게 되는 과정을 모르겠습니다. 같이 설명하신 부분이 startup 코드쪽에 .weak PendSV_Handler .thumb_set PendSV_Handler, Default_Handler 내용을 언급하셧는데 이 handler 함수(xPortPendSVHandler, PendSV_Handler) 가 어디서 호출이 되는지 잘 모르겠습니다.
- 미해결FreeRTOS 프로그래밍
heap 영역에 task 할당해주는 함수가 있나요?
동적할당을 이용한 방법으로 configSUPORT_DYNAMIC_ALLOCATION 선언후xTaskCreate 사용하면 BSS 영역에 task 할당이 된다고 하셨는데 동적할당은 heap 영역에 되는게 아닌가요? xTaskCreate가 BSS 영역에 할당하는 함수라면 xTaskCreateStatic 함수와 다름이 없을거같다고 생각됩니다. heap 영역(동적메모리)에 굳이 할당하고 싶다면 어떤 함수를 사용하면 되나요? BSS는 정적메모리영역인데 동 heap 영역에 할당하면 좋은점이 있을까요?
- 해결됨FreeRTOS 프로그래밍
task status 확인 방법 문의드립니다.
질문이 두가지 입니다. 1. 예제 1번에서 Task1 information 출력 부분 보면 printf("task1 status = %d \n",eTaskGetState( xHandle1 )); 주석처리 되어있습니다. eTaskGetState 함수를 사용하기 위해서는 INCLUDE_eTaskGetState 를 1로 선언해야 한다고 되어있는데 #define INCLUDE_eTaskGetState 1 선언하고 진행하니 출력이 되었습니다. uart log 결과 ------- Task1 information ------- task1 name = Task1 task1 priority = 6 task1 status = 0 궁금한점은 보통 이런 define을 해주는 위치는 어디서 해야하는지 궁금합니다. 저같은 경우 FreeRTOS 폴더내의 task.c 파일 중 #define이 몰려있는 부분에 임의로 했습니다. 특정 함수를 사용할때 정의가 필요하게 되면 #define 할때 정해진 암묵적인 규칙이 있을까요? 2. ------- Task1 information ------- task1 name = Task1 task1 priority = 6 task1 status = 0 여기서 priority = 6으로 되어있는데 10이 아니라 왜 그런걸까요 TASK_1_PRIO = 10으로 되어있고 TASK_1_PRIO 를 다른값으로 변경해도 6으로 출력됩니다.
- 미해결FreeRTOS 프로그래밍
태스크 생성 시에 스택 할당량이 512가 맞는 건가요?
안녕하세요 강의 잘 듣고 있습니다. 강의 듣다가 질문이 있어 문의 드립니다. Task1, Task2 를 생성할 때 모두 Stack Depth를 256으로 주고 있는데요, pvPortMalloc 설명하실때 StackType_t의 사이즈가 4라고 하셨습니다. (printf로 StackType_t의 사이즈를 출력해 보니 4가 맞았습니다.) 그렇다면 256*4가 되는 것이 맞지 않나요? usStackDepth를 256를 주었으니까요.. (강의에서는 128을 주었다고 하시더라구요..강의영상에도 256으로 설정한 코드가 보입니다.)
- 미해결FreeRTOS 프로그래밍
NUCLEO-F429ZI 포팅 질문 드립니다. (UART 통신 문제)
해결 하였습니다. 스펙 문서를 찾아보니 PD8과 PD9를 사용해야 했는데, STM32CubeIDE 툴에서 USART3 을 그냥 선택하면, PB10과 PB11을 선택되는게 문제였습니다. 원래 작성하였던 질문은 혹시 다른 분들께 도움이 될지도 모르니 남겨놓도록 하겠습니다. -------------------------------------------------------------------------------------------------------------------------- NUCLEO-F429ZI 에서 포팅을 시도하고 있는 중입니다. STM32CubeIDE Version : 1.9.0 보드와 PC연결은 잘 된것 같아보입니다. 장치관리자를 확인 해보면 STMicroelectronics STLink Virtual COM Port 가 잘 잡혀 있습니다. Connectivity 에서 USART3을 선택하고, FreeRTOS는 CMSIS_V1 을 선택하였습니다. main.c 에 <stdio.h> 헤더를 추가 하고, __io_putchar 함수를 오버라이트도 하였는데, int __io_putchar(int ch) { if ( ch == '\n' ) { HAL_UART_Transmit(&huart3, (uint8_t*)&"\r", 1, HAL_MAX_DELAY); } HAL_UART_Transmit(&huart3, (uint8_t*)&ch, 1, HAL_MAX_DELAY); return ch; } UART 통신이 되지 않습니다. 디버깅을 시작하여 HAL_Init( ); 부터 계속 Step Over를 클릭하여 넘어가면 중간에 printf 함수와 fflush(stdout); 을 호출하고 osKernelStart( ); 까지 잘 넘어가 지는데 PUTTY에 어떠한 아웃풋도 나오지 않습니다. 중간에 break point 를 걸어서 확인해보면 함수가 호출이 되는것을 확인 가능한데 터미널 에만 출력이 되지 않습니다. Baud Rate는 디폴트인 115200 을 사용하였습니다. 혹시 제가 빠뜨린 부분이 있는지 확인 부탁드립니다. (USART1, 2, 6 도 해보았는데 PUTTY로 출력 되지 않았습니다.) Connectivity GPIO Pinout View
- 미해결FreeRTOS 프로그래밍
NUCLEO-G491RE 포팅 중 문의드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. ------------------------------------------------- - 사용하신 첨부파일의 버젼:freeRTOS_tutorials_v1.5.zip - 사용하시는 ST 보드명: NUCLEO-G491RE - 사용하시는 컴파일러(stm32cubeide) 버젼: 1.9.0 - 증상: 내가 가진 보드로 포팅 하기 작업중 02_STACKOVERFLOW에서 프로그램을 돌리면 a와 b 가 반복해서 출력 되어야하는데 다음과 같이 task2 는 동작하지 않고 Task1만 동작하는듯합니다. 03_CRITICAL 예제도 마찬가지로 Task2가 동작하지 않네요.. 어떤 문제인지 알고 싶습니다.. ** 메일로 해당 프로젝트 압축파일을 첨부드렸습니다. 확인부탁드립니다. -------------------------------------------------
- 미해결FreeRTOS 프로그래밍
IDLE_HOOK에 대한 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강사님 좋은 강의 잘듣고 많은걸 배우고 있습니다. 강의를 듣는 중 응용에 대한 질문입니다. 번외 질문이라면 죄송합니다. 질문 1번 :IDLE_HOOK에 대한 강의를 듣다가 혹시 아래와 같은 용도로 사용해도 되나요? 질문2: 추가 질문하나만 드리면 rtos사용 중 main.c에서 timer에 대한 콜백함수가 되나요? 테스트를 해보니 진입이 안되는듯해서 제가 잘못사용하고 있나요? 추후에 듣게 될 소프트웨어 타이머가 대안이 될수 있나요? 질문 3번 : FreeRTOSComfig.h의 IDLE_HOOK 설정값이 default 0인가요? 강의 말씀에 의하면 running 상태는 비워둘수가 없다고 하셨는데 0으로 하면 비워진 상태가 되는게 아닌가 해서요? 질문이 좀 많았습니다.. 양해를 부탁합니다.
- 미해결FreeRTOS 프로그래밍
F769_EVAL는 안되나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강사님 F769_eval 보드로는 진행이 안되나요? 가능하시면 포팅을 부탁드려도 되나요? 수강 준비중인 B/D의 포팅을 부탁드릴려고 글을 남깁니다. 사용 컴파일러는 cubeIDE입니다. 강의 하단에 있는 포팅방법으로 포팅을 했는 printf도 안되고 컴파일 에러가 많이 나서 진행에 어려움이 있어 연락을 드립니다. 포팅을 부탁드립니다. 감사합니다.
- 미해결FreeRTOS 프로그래밍
2. stackoverflow 질문입니다..
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강사님 강의 잘듣고 있습니다. 강의를 따라가다가 질문이 있어 드립니다. stackoverflow detect 기능에서 config.h의 defien을 2로 변경을 하고 save를 했는데 task.c if문에서 활성화가 안되는건 어떤이유인가요? 강의하고는 별도로 언어적인 질문입니다만 질문을 드립니다. 그래서 Putty에서 안나오는건지 아님 detect를 못한건지 확인이 되네요..
- 미해결FreeRTOS 프로그래밍
프로세스 종료 관련
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강사님 예제 관련 강의들을 보고 따라하고 있습니다. 진행 중에 디버그모드 -> 종료 후에도 콘솔 창에서는 계속 실행이 되고 있어 문의 드립니다. 강사님 아래 이미지 확인 부탁드리겠습니다. 감사합니다.
- 미해결FreeRTOS 프로그래밍
맥OS 환경에서도 실습이 가능한지 문의 드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요? 강사님 RTOS 첨 접하는 새내기 입니다. 금일 강사님 강의를 수강하고 순차적으로 보고 있는 중인데 개발환경이 윈도우로 되어 있는것 같아서요 맥OS 환경에서도 강사님 강의들에 대해 실습이 가능한지 문의 드립니다. 그리고 보드 관련해서 아래 링크 보드를 구매하면 되는지도 문의 드려요 https://www.devicemart.co.kr/goods/view?no=1346033 위 내용 확인 부탁드리겠습니다.