안녕하세요 FreeRTOS 강의를 잘 들었던 취준생입니다. STM32F407 MCU에 uC/OS-II RTOS를 포팅해 보았는데 첨부한 사진 형태로 포팅하는 것이 정석적인 방법이 맞는지 궁금하여 질문드리게 되었습니다. 또한 해당 RTOS를 포팅할 때 자잘한 링크 에러들과 PensSV 핸들러에 5줄 정도만 바꾸니 잘 동작하던데 uC/OS-II는 다른 RTOS들에 비해 포팅이 간단한 건지, 다른 RTOS들도 이정도만 수정하면 잘 포팅되는지도 궁금합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 그 문제가 나타날 때 까지 예상 되는 부분으로만 감지를 해야하는것일까요? 포팅은 결국에 옮기고 문제가 생기면 해결한다는 사후적인 해결책만을 가지고 있는 것인지 궁금합니다.
안녕하세요. 강의 너무 잘 듣고있습니다. 그런데 FreeRTOS 소개 강의를 듣다가, 단점으로 멀티코어 지원 안됨. 이라는 말을 듣고 이런저런 검색을 해보았는데요.. https://embeddedai.tistory.com/entry/FreeRTOS-%EB%A9%80%ED%8B%B0%EC%BD%94%EC%96%B4-%EC%A7%80%EC%9B%90 이런 글을 보면, 최근 FreeRTOS가 SMP? 기능을 도입해서 멀티코어 지원을 하도록 되었다는 것 같은데, 맞을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. #if ( ( configUSE_PREEMPTION == 1 ) && ( configUSE_TIME_SLICING == 1 ) ) { if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ pxCurrentTCB->uxPriority ] ) ) > ( UBaseType_t ) 1 ) { xSwitchRequired = pdTRUE; } else { mtCOVERAGE_TEST_MARKER(); } } configUSE_TIME_SLICING값이 1->0이 되면 위 코드의 실행 조건이 변경되어 스케쥴러가 cpu 양보를 고려하지 않아 처음 cpu를 잡은 task만 반복해서 동작하게 된다는 것 까지는 이해했습니다. 이때 저의 경우에 (1) configUSE_TIME_SLICING == 1 이면 'bbbba...'으로 b가 더 많이 수행되고 (2) configUSE_TIME_SLICING == 0 이면 'a'만 계속 해서 출력되는데 위에서 저의 이해를 바탕으로 configUSE_TIME_SLICING == 1인 경우에 'aaaaaaaaaaab...' 이런식으로 나와야 할 것 같은데(혹은 (2)번에서 'b'만 출력) 두 경우에서 먼저 cpu를 선점하는 task가 다른 이유가 궁금합니다!
강사님 안녕하세요, 구매후 아직 강의를 듣고 있지는 않는데, 조만간 시작하려고 합니다. 강의 초반 준비사항에서 아무 ESP32나 상관 없다고 하셨지만, 최대한 병목을 줄이기 위해 전체 커리큘럼을 따라갈 때 문제되지 않도록, 준비 사항을 미리 알고 싶습니다. (보드, 디스플레이, 브레드 보드 등등) 구체적인 구매처 정보까지 있으면 좋을 것 같습니다. 감사합니다.
포팅을 직접하실 시간이 없거나 어려운 점이 있으시면 제가 도와드려요 :-) <인프런 FreeRTOS 프로그래밍 강좌> 질문란에 포팅을 원한다고 올려주시고 다음과 같은 내용을 꼭 함께 적어주세요 ------------------------------------------------- - 사용하고 싶은 ST 보드명: NuCLEO-F103RB NUF103RB$KU1 - 사용하시는 컴파일러(stm32cubeide) 버젼: 1.2.0 - 기타: ------------------------------------------------- 저에게 파일을 보내고 싶으신 분은 guileschool@gmail.com 으로 보내주세요. (필독1) 스팸 혹은 기타 이유로 메일을 제가 못 받을 수도 있으므로 메일을 보내신 분은 꼭 이 강좌의 질문란에다가 저에게 메일을 보내셨다고 글을 남겨주세요. (필독2) 메일에는 본인이 누구인지 알 수 있도록 인프런 아이디를 '꼭' 적어주세요( 기재되지 않으면 회신 보장 못함 ) - 끝 -
수료증 발급 기준에서 [부록] 강좌 제외 요청 드립니다. 현재는 수료증 발급 기준이 [부록] 강좌까지 모두 수강해야 발급되는 걸로 확인됩니다. 이는 정규 수강 강좌가 아닌 것으로 알고 있습니다. 이러한 이유로 수료증 발급 기준에 [부록] 강좌 제외 요청 드립니다. 감사합니다.
void swap(int * x, int * y) { int temp; temp = *x; * x = *y; *y = temp; } 안녕하세요 강사님 위 함수가 temp를 지역변수로 선언하면 재진입가능한 함수가 된다고하셨는데 x와 y 포인터 접근으로 공유자원이 발생할 수 있는 상황이 발생할 수 있어 재진입 불가능한 함수이지 않나요? 잦은 질문드려 죄송합니다.
강좌 3번에서 진행되는 TASKMAN의 task.c를 디버깅 모드로 실행했는데 에러가 뜹니다. ../Inc/FreeRTOSConfig_base.h:120:59: error: '__FILENAME__' undeclared (first use in this function); did you mean '__FILE_NAME__'? inc 폴더에 시스템 헤더파일 같은데 어떻게 대처 해야할지 모르겠습니다.
안녕하세요 강사님 fflush를 주석처리하지 않고 동일한 우선순위인 task1 과 task2가 있을때 aaaaaaaaaaaaaaab와 같이 비정상 출력이 나오는 상황에서 아래 제가 정리한 내용이 맞나요? FACT 1. HAL_UART_Transmit 실행 중에도 컨텍스트 스위칭은 가능하며, 단지 UART 하드웨어 자원이 점유 중이라 다른 Task는 전송만 못 할 뿐이지 SysTick에 의해 timeslice마다 Context Switching이 일어난다. FACT2. FACT1에 따라 Task2가 printf("b")와 fflush로 UART 점유 및 전송중일때 Tick마다 ContextSwitching이 일어나고 그때 Task1의 printf("a")로 인해 버퍼가 누적되며 동시에 fflush는 기존에 TASK2가 UART를 점유중이여서 Skip된다는 것이 맞을까요? ____________ 그리고 task1과 task2가 fflush때문에 aaaaaaaaaaaaaab 와 같이 a다수 b한개만 실행될경우 어떤 timeline을 거쳐 저렇게 실행되는것인지 정리해주실수 있나요? ___________
안녕하세요. 저는 F429I 보드를 사용하고 있고, 올려주신 포팅한 자료로 실습하고 있습니다. 그런데, 강의 내용과는 다르게 taskCreate 함수에서 설정하는 stak 크기가 default로 256이 설정되어 있었습니다. 아래와 같이 256으로 설정하면, 정상적으로 동작하는데, 모든 tsck의 Create 함수를 128로 설정하면, 아래 putty 캡처 그림과 같이 task2가 정상적으로 실행되지 않습니다. 혹시 stack size를 128로 줄이면서 문제가 발생하는 이유를 알려주실 수 있을까요?