월 37,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨FreeRTOS 프로그래밍
portYIELD() 사용법에 대해 질문드립니다.
안녕하세요. portYIELD() 사용법에 대해 궁금한게 있어 질문드립니다. portYIELD()를 실행하게 되면 task가 점유하고 있던 CPU를 반납하는 명령으로 알고 있습니다. 그런데 아래의 그림과 같이 실행을 하게 되면 TaskMain은 실행 되지 않아야 하지 않는지요? #define TASK_MAIN_PRIO 5 #define TASK_TASK1_PRIO 4 #define TASK_TASK2_PRIO 3 #define TASK_TASK3_PRIO 2 TaskHandle_t xHandleMain, xTask1Handle, xTask2Handle; void userThread(void) { xTaskCreate((TaskFunction_t)TaskMain, "TaskMain", 128, NULL, TASK_MAIN_PRIO, &xHandleMain); xTaskCreate((TaskFunction_t)vTask1, "vTask1", 128, NULL, TASK_TASK1_PRIO, &xTask1Handle); } void TaskMain(void const *pvParameters) { while(1) { for(uint8_t i=0; i<5; i++) { HAL_GPIO_TogglePin(GPIO5_BEAD_GPIO_Port, GPIO5_BEAD_Pin); HAL_Delay(1); } vTaskSuspend(xHandleMain); } } void vTask1(void const *pvParameters) { while(1) { for(uint8_t i=0; i<5; i++) { HAL_GPIO_TogglePin(GPIO4_BEAD_GPIO_Port, GPIO4_BEAD_Pin); HAL_Delay(1); } portYIELD(); vTaskResume(xHandleMain); //portYIELD(); } } 위 소스를 보게 되면최초 MainTask가 실행을 하다가 5번 GPIO를 5번 토굴하고 block 상태로 전환Task1번에서 gpio를 5번 토굴하고 vTaskResume을 실행하기 전에 portYIELD()를 만나기 때문에vTaskResume(xHandleMain) 실행이 안되어야 하지 않는지요?실행 결과 TaskMain이 실행되어 이렇게 문의드립니다. 감사합니다.
- 해결됨FreeRTOS 프로그래밍
정적/동적 Task 생성의 메모리 할당 영역
안녕하세요. 수업을 듣던 중 정적/동적 Task 생성 시 할당되는 메모리 영역과 관련해 질문 사항이 생겨 글 남깁니다.태스크와 메모리 파트 강의를 듣고 Task Stack 메모리는 동적/정적 할당이 가능하고, RTOS의 동적 할당은 RTOS 커널에서 지원하는 동적 메모리 할당자 함수를 쓰기 때문에 heap영역이 아닌 bss 영역에서 할당된다. 라고 이해하였습니다.즉, xTaskCreate() 함수를 사용하면 동적 할당이지만 데이터가 bss 영역에 할당되는 특성이 있다고 생각했었는데, '태스크 스택의 크기를 결정하기' 부분의 강의 끝부분에서 xTaskCreate() 는 heap 영역에 xTaskCreateStatic() 은 bss 영역에서 Task Stack을 쓴다고 말씀하여 기존에 제가 이해했던 부분과 일치하지 않았습니다.이와 관련해 인터넷에 검색해 보니, freertos.org 사이트에서는 xTaskCreate()를 사용하여 작업을 생성하면 필요한 RAM이 FreeRTOS 힙에 자동으로 할당된다. 라고 적혀있더군요.xTaskCreate() 함수는 bss 영역에 자동 할당되기도 하고, heap 영역에 자동 할당되기도 한다는 의미인가요?
- 해결됨FreeRTOS 프로그래밍
task를 생성 할 때에 stackDepth 설정 관련하여 궁금한게 있습니다.
강의를 보던 도중에 메모리 할당에 관련하여 몇가지 궁금한점이 있어 질문드립니다. 아래그림과 같이 stack 사이즈를 128로 지정하는 경우 task에 사용되는 메모리는 bss 영역에 할당되는게 맞는지요? 아래 그림과 같이 stack 사이즈를 변경하게되면 메모리에 할당이 되어 Memory Regions 창에 변화량이 보여야 하는데 반영되지 않는거 같아 질문드립니다. 테스크를 생성 할 때에 stack 사이즈는 어떤 메모리에서 할당되는건지요?감사합니다.
- 미해결FreeRTOS 프로그래밍
포팅 부탁드립니다.
안녕하세요. 강의 듣고 있는데 포팅 부탁드립니다.- 사용하고 싶은 ST 보드명: NUCLEO_G070RB- 사용하시는 컴파일러(stm32cubeide) 버젼: 1.12.0감사합니다.
- 미해결FreeRTOS 프로그래밍
포팅 부탁 드립니다.
-------------------------------------------------- 사용하고 싶은 ST 보드명: STM32F407G-DISC1- 사용하시는 컴파일러(stm32cubeide) 버젼: 1.11.0- 기타: -------------------------------------------------
- 미해결FreeRTOS 프로그래밍
isr 여러개인 경우 deferred task
안녕하세요수업듣고 심도있게 학습하고 있는 학생입니다.인터럽트 처리를 공부하고 있는데 질문이 있습니다.exti가 여러 개인 경우 어떻게 처리하는지 궁금합니다.저의 처리방식은 인터럽트gpio가 4개로 가정했을때char 전역변수;void 콜백함수(gpio){if(gpio==1){전역변수+=1;}if(gpio==2){전역변수+=2;}if(gpio==3){전역변수+=4;}if(gpio==4){전역변수+=8;}vTaskNotifyGiveFromISR(xHandle1, &xHigherPriorityTaskWoken);portYIELD_FROM_ISR(&xHigherPriorityTaskWoken);}이런식으로 하고자 하여 전역변수를 뮤택스로 묶으려 했는데 isr에서는 뮤택스를 사용하면 안된다고 하신 걸로 학습했습니다.다른 여러 자료를 찾아보아도 예시를 찾기가 어려워 질문드리게 되었습니다.제가 질문드리고자 하는 핵심은 여러 인터럽트를 동시에 사용할경우 어떻게 사용해야하는지 궁금합니다.
- 미해결FreeRTOS 프로그래밍
강의 감사합니다. 포팅 부탁드립니다.
- 사용하고 싶은 ST 보드명: NUCLEO-L4R5ZI- 사용하시는 컴파일러(stm32cubeide) 버젼: 1.11.0- 기타: 열심히 공부하면서 따라가겠습니다. 감사합니다
- 미해결FreeRTOS 프로그래밍
freeRTOS와 USB_Device와의 관계
안녕하십니까현재 수업을 듣고있는 학생인데요.선생님 수업 실습중에 STM32CubeMX을 이용하여 STM32F405ZGT6의 코딩중에, 미들웨어 FreeRtos와 USB_Device가 같이 이용 하지 못하는건지 궁금합니다.Generate Code를 누르면 USB Device의 코드가 없어집니다.
- 미해결FreeRTOS 프로그래밍
(;;)의 의미
태스크의 형태 강의에서 무한루프 형태의 void YourTask 함수 중for(;;) 라는 for문이 있는데, 여기에서 세미콜론 두개인 (;;)의 의미가 무엇인지 궁금합니다.조사해봤을 때에 유의미한 답변을 찾아볼 수 없어서 질문드립니다.항상 좋은 강의 감사합니다.
- 미해결FreeRTOS 프로그래밍
포팅부탁드립니다.
- 사용하고 싶은 ST 보드명: NUCLEOF429- 사용하시는 컴파일러(stm32cubeide) 버젼: 1.10.1- 기타: 최대한 빨리 공부하고 싶습니다 감사합니다.
- 미해결FreeRTOS 프로그래밍
#define CMSIS_OS 주석에 대해서 질문입니다
이게 CMSIS_V1 이것과 연관이 있나요?주석이 되어있기 때문에 else 부분만 히팅이 되는것으로 알고 있습니다 추가적으로 보내주신 코드를 실행해보았으나 기계가 말썽인건지 뭔지는 모르겠습니다 디버깅에서 에러가 발생해서 진행이 안됩니다PUTTY는 아무것도 나오지 않습니다오실로스코프도 없고 지식도 없습니다 그래서 RUN으로 만 실행하고LED로 디버깅하고 있습니다
- 미해결FreeRTOS 프로그래밍
PUTTY 접속에 문제가 있습니다
선생님 STM32H745I DISCO 라는 lcd 달린 기계로 TASK MAN 돌리고 PUTTY로 접속했는데요PUTTY에서 아무것도 안떠요 PRINTF 함수를 써서 출력을 하면 PUTTY에 떠야하는것이 정상이죠? ide 의 console 탭에서는 COM frequency = 24000 kHzTarget connection mode: Under resetReading ROM table for AP 0 @0xe00fefd0Hardware watchpoint supported by the targetST-LINK Firmware version : V3J10M3Device ID: 0x450PC: 0x8002f80ST-LINK detects target voltage = 3.29 VST-LINK device status: HALT_MODEStm32Device, pollAndNotify running...SWV collect poll delay set to 8533µs for baudrate 8000000Hz (buffer size 20480b)SwvSrv state change: 4 -> 2GDB session, device event: 6GDB session, device event: 6GDB session, device event: 3GDB session, device event: 3GDB session, device event: 1GDB session, device event: 1GDB session, device event: 0GDB session, device event: 0NVIC_DFSR_REG = 0x0000000BGDB session, device event: 3GDB session, device event: 3GDB session, device event: 1GDB session, device event: 1ST-LINK device status: RUN_MODE이구요baudrate 115200와 COM3 PORT는 확인해서 접속했습니다
- 미해결FreeRTOS 프로그래밍
포팅 부탁 드립니다.
-------------------------------------------------- 사용하고 싶은 ST 보드명: nucleo f429zi- 사용하시는 컴파일러(stm32cubeide) 버젼 1.10.1-------------------------------------------------부탁드립니다. ㅜ
- 미해결FreeRTOS 프로그래밍
디버그
안녕하세요 이제 막 보드로 따라 해보려 하는데 보드 연결하여 디버깅하려고 하면 실행할 수 없다고 합니다. 어떤 문제일런지요... Teraterm으로 확인해보면 보드는 포트에 잡혀있는것 같습니다만Toolchain에 True studio가 없어서 그럴까요??
- 미해결FreeRTOS 프로그래밍
FreeRTOS Tick 관련 문의 드립니다.
안녕하세요막 FreeRTOS에 입문한 사람입니다.궁금한게 있어 질문드리려 합니다.FreeRTOS의 최대 TICK 주파수가 1kHz로 알고 있습니다.그렇다면 1kHz 이상의 주파수로 측정을 해야 한다면 어떻게 해야할까요?예를 들어 adc를 통해 아날로그 신호를 5kHz로 측정해야하는 경우는 어떻게 해야되는지요?FreeRTOS는 꼭 써야 하는 상황입니다.제 생각으로는 TICK 속도를 높이는 방법과 별도의 5kHz의 타이머 인터럽트를 사용하여 while(1) 루프 내에 프로그래밍하는 방법 두가지를 생각해보았습니다.[질문1] TICK 속도를 높이는게 가능하다면 어떠한 방법으로 설정하는지 궁금합니다.[질문2] 아니면 아래와 같이 while(1)루프 내에 별도의 5kHz 주파수의 타이머 인터럽트를 사용하여 프로그래밍 했을때 FreeRTOS의 태스크에는 영향이 없을지... 고려해야할게 있을지? 궁금합니다.int main(void) { while(1) { // 5kHz timer interrupt start if(tick_5khz_flag == 1) { tick_5khz_flag = 0; val = adc_read(); } // 5kHz timer interrupt End } }
- 미해결FreeRTOS 프로그래밍
실습환경구축
안녕하십니까, 선생님실습환경구축 영상을 보며 STM32CubeIDE를 설치중인데요, 가장 최근 버전인 1.10.1은 install할 때 components에 ST-LINK server를 함께 설치하는 옵션이 없습니다. 상관없나요?
- 해결됨FreeRTOS 프로그래밍
[질문/완료] "freertos 서비스 함수 사용 시 주의 사항" 강의내용 중...
minor 한 내용입니다만,"freertos 서비스 함수 사용 시 주의 사항" chapter 에서parameter가 없는 api 인데강의 내용에서는 parameter를 1로 전달하는 예제 (slide 번호 #20) 가 있습니다.
- 해결됨FreeRTOS 프로그래밍
[질문/해결완료] deferred interrupt 처리에서 portYIELD_FROM_ISR api의 용도
deferred interrupt 예제에서, gpio callback 함수내부에 사용된 "portYIELD_FROM_ISR" 함수의 목적을 설명해주세요. 해당 line을 주석 처리하고 수행해도 정상동작합니다.gpio callback 함수를 수행한 후, gpio isr의 나머지 부분을 수행한 다음 scheduler에 의해서 ulTaskNotifyTake로 다음 수행작업을 기다리던 task1이 수행되는 것으로 보이는데,portYIELD_FROM_ISR를 사용하면 gpio callback에서 scheduling이 발생하여 바로 (gpio isr 나머지 부분 수행 없이) task1이 수행되는 구조일까요?void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { static portBASE_TYPE xHigherPriorityTaskWoken; #ifdef FREERTOS_MODULE_TEST // vLogicSniffMultiSetLED5(LS_CHANNEL_ALL5, 0); // All Leds Clear // vLogicSniffMultiSetLED6(LS_CHANNEL_ALL6, 0); // All Leds Clear vLogicSniffSetLED( LS_CHANNEL_7, 1 ); // LED 'ON' #endif //printf("o"); fflush(stdout); buttoncounter++; /* xHigherPriorityTaskWoken은 pdFALSE로 초기화되어야한다 */ xHigherPriorityTaskWoken = pdFALSE; #if __MY_ENABLE_DEFERRED_INTERRUPT == 0 // 시간이 많이 소요되는 함수를 호출 heavyCopyLoader(); #endif //__MY_ENABLE_DEFERRED_INTERRUPT // Semaphore를 'Give' 하여 Blocked Task를 Unblock 상태가 되게 한다. vTaskNotifyGiveFromISR(xHandle1, &xHigherPriorityTaskWoken); //portYIELD_FROM_ISR(&xHigherPriorityTaskWoken); }
- 해결됨FreeRTOS 프로그래밍
세마포어 xSemaphoreTake 휴면상태 문의
5번 SEM 예제에서 Main Task 우선순위 20, Task1 우선순위10인 상태에서 Main Task에서 Task1을 생성한 후 Main Task가 끝나기 전에 Task1이 실행되는 원리가 궁금합니다. 강의 내용을 보면Main Task 에서 호출하는 xSemaphoreTake() 함수내부에 현재 진행중인 MainTask를 휴면상태로 만드는 부분이 존재하고 다음 우선순위의 Task를 찾아 실행하는 부분이 존재한다고 설명을 해주시는데하지만 이해가 안가는 부분은xSemaphoreTake()함수의 인자에 xQUEUE 구조체 형식인 sem_id 전달한것 뿐인데동작중인 Task 또는 handle에 대한 정보를 어떻게 알고 현재 실행중인 Task(MainTask)가 휴면상태로 가는지 모르겠습니다. xQUEUE 구조체를 확인해봤지만 단서가 될만한건 못찾겠습니다.
- 해결됨FreeRTOS 프로그래밍
[질문/해결완료] 강의 내용 중 task 생성 api 확인 요청
강의 내용 중 task 생성 api 설명이 바뀐 것 같습니다. 확인해주세요.