본문 바로가기

Const Keyword 공부하다가 좋은 부분을 발견해서 적습니다. const 의 올바른 사용은 에러를 막는데 좋은 역할을 할 수 있다. void func(Hello* const hello) { hello = NULL; //error hello = (Hello*)malloc(sizeof(Hello)); //error Hello h; hello = &h; //error } Hello* const hello의 의미는 hello라는 포인터가 다른 객체를 가리키도록 바뀔 수가 없다는 의미이다. 이렇게 const를 붙이는 것이 의미가 있는 것이 위의 함수가 Hello 객체를 위한 함수라면 그 객체에게 일을 시키는 것이 목적이므로 저렇게 함수 안에서 자신이 가리키는 객체가 바뀔 이유가 없고, 만약 바뀐다면 그것이 에러인 상황일 확률이 높기..
STM32F4 Discovery board - Keil 5 IDE with CubeMX: Tutorial 8 UART - Updated Dec 2017 FreeRTOS를 하면서 Printf 함수를 사용하니 TrueStudio에서 뭐가 잘 안뜬다. 찾아보면 해결 할 수 있겠지만 귀찮기도 하고 Uart도 써볼까 해서 해봤다. https://www.youtube.com/watch?v=RQNT0-_Iq-o&list=LLnJ3dJnBdwC2gZZdKionReg&index=3&t=238s 다음의 영상에서 CubeMX 설정하는 거랑 Tx , Rx 하는 것을 다 알려준다. 그런데 따라해도 계속 안되길래 여러가지를 찾아봤는데 CubeMX 설정을 할 때 모르고 FreeRTOS 를 미들웨어로 설정한 채로 main 문 안에 while(1) 을 사용 했던 것이다. 그래서 이번엔 Task를 만들어 해보니 잘 동작한다. FreeRTOS에서는 main 문의 while(1)문이 동작..
FreeRTOS API http://www.ubinos.org/mediawiki/index.php/FreeRTOS_API 서핑을 하다가 좋은 사이트를 찾았다. 2007년 기준이긴 하지만 초보자가 틀 잡기는 좋은 것 같다.
Suspending and Resuming task /* USER CODE BEGIN 0 */ TaskHandle_t Led_GateKeeperHandle = NULL; TaskHandle_t myTask2Handle = NULL; void Led_GateKeeper(void *pvParameters) { int count = (int*) pvParameters; //TickType_t xDelay = 500 / portTICK_PERIOD_MS; TickType_t xDelay = pdMS_TO_TICKS(1000); TickType_t myLastUnblock; myLastUnblock = xTaskGetTickCount(); for(;;) { HAL_GPIO_WritePin(GPIOD, LD4_Pin|LD3_Pin|LD5_Pin|LD6_Pin, GP..
Create Task & Delete Task , Delay 먼저 CubeMX를 이용해서 STM32F4 Discovery 보드 환경설정을 해준다. https://www.youtube.com/watch?v=CsMUmFLNTok&list=LLnJ3dJnBdwC2gZZdKionReg&index=4&t=169s 다음의 영상을 보면 FreeRTOS 코드를 다운로드해서 따로 설정하지 않아도 MiddleWare로 바로 FreeRTOS를 껴넣을 수있다. 최근에는 FreeRTOS CMSIS_V2 도 사용 할 수 있게 되었는데 더 좋은 성능을 내는 것 같다. 하지만 교육영상에서는 V1을 사용했으므로 V1으로 설정해주자. Create Task /* Private user code ---------------------------------------------------------*..
FreeRTOS Setup Target : STM32F407VGxx (Cortex-M4 Discovery Board) IDE : atollic TrueStudio 9.2 https://youtu.be/7efj3bJbGbk 다음의 영상을 보고 FreeRTOS setup을 따라해봤다. 좋은 점은 완전히 새로운 사용자에게 어떤 파일이 필요한지, 어떤 파일만 Build 할 것인지 대략적으로 알려준다는 것이다. 그러나 계속해서 linker 오류가 났는데 이유는 짐작하기에 FreeRTOSConfig.h 파일을 영상제작자는 따로 준비하여 왔는데 나는 그렇지 않았기 때문 인 것 같다. (본인은 FreeRTOS 폴더에 있는 Demo 파일중 Cortex-M4 아무거나 긁어왔음) 그래서 찾은게 https://www.youtube.com/watch?v..
IoT 시대, 차세대 RTOS를 주목해야할 이유 클라우드 기술의 융합, 급격한 데이터 증가와 커넥티드 기기 발달과 함께 사물인터넷(Internet of Things: IoT)이 새로운 기회를 창출할 것이라는 사실에는 의심의 여지가 없다. 여러 시스템이 연결된 복합 시스템(System-of-Systems)은 데이터에 대한 새로운 통찰을 가능하게 하고 새로운 서비스를 발굴하며 생산성과 효율성을 향상시키는 것은 물론, 실시간 의사 결정 역량을 강화해 중요한 문제를 해결하며, 새롭고 혁신적인 사용자 경험을 개발하는 등 비즈니스 가치를 실현하는 핵심 토대가 되고 있다. 사물인터넷은 수십 억 개의 지능형 디바이스와 시스템들로 구성된다. 여기에서 ‘사물’의 대부분이 바로 임베디드 시스템이다. 임베디드시스템 상당수는 실시간 임베디드 운영체제(Real-Time Ope..
Cortex-M에서의 HardFault 디버깅 Embedded Vol.184 - Technical Report [테크월드=정환용 기자] 하드폴트(HardFault)란 일반적인 예외 처리 메커니즘으로 처리할 수 없는 모든 경우의 결함을 말한다. 일반적으로 하드폴트는 복구할 수 없는 시스템 오류다. 하드폴트는 다양한 원인에 의해 발생할 수 있고, 하드폴트 오류가 발생한 경우 명확한 원인 분석과 문제 해결이 쉽지 않다. 이렇게 다양한 하드폴트 오류를 살펴보고 IAR 임베디드 워크벤치(Embedded Workbench)를 활용해 하드폴트 오류를 수정할 수 있는 방법을 알아보자. 예제 1. CPU 오버클럭 코어텍스 M3(Cortex-M3) 코어 보드를 매우 빠른 주파수의 클럭으로 설정한 경우 하드폴트가 발생할 수 있다. 이런 경우에는 특정 코드위치가 아닌 무..