개발 30

[에러/arduino] avrdude: stk500_recv(): programmer is not responding

[에러/arduino] avrdude: stk500_recv(): programmer is not responding 아두이노 나노를 사용하다가 이런 에러 문구가 발생했습니다. 문구의 뜻으로는 프로그래머가 반응하지 않는다인데 이는 아두이노가 반응하지 않는다는 말입니다. 해결방법으로는 2가지가 있습니다. RX, TX 핀에 연결된 부분 확인 아두이노 보드에는 RX와 TX가 있습니다. 가장 많이 사용하는 아두이노 우노와 나노에는 0번 핀과 1번 핀이 Rx, Tx 역할을 합니다. 이 핀에 선이나 다른 장치들이 연결되어 있으면, 업로드하는 과정이 진행되지 않고, 에러를 띄우게 됩니다. 이 에러가 프로그래머가 반응하지 않는다는 에러입니다. 이 경우에는 연결된 선을 잠깐 제거하고 업로드가 완료되면 다시 연결하는 방법..

I2C와 SPI 통신, MOSI, MISO, SCL, SS, SDA 등의 핀 정리

I2C와 SPI 통신 I2C와 SPI 통신은 유사하지만 다른 통신 방법입니다. 따라서 소형 TFT 디스플레이들에 보면 SPI와 I2C가 겸용으로 되어 있는 부품들이 많습니다. I2C와 SPI를 겸용으로 사용하다 보니 핀 이름과 관련된 것부터 혼동이 있어서 정리하는 김에 글을 작성합니다. ※ 현재 SPI, I2C에서 사용되는 단어인 Master, Slave는 Controller(컨트롤러), Peripheral(주변기기)로 변경해서 사용하는걸 권장하는 추세이지만 여기에서는 기존에 사용했던 Master, Slave를 사용합니다. 현재 많은 부품들이 Controller, Peripheral보다는 Mastser, slave로 많이 사용되기 때문입니다. SPI 통신, Serial Peripheral Interfac..

[C/C++] -> 화살표 연산자와 . 도트(멤버) 연산자 차이점과 사용

-> 화살표 연산자와. 도트(멤버) 연산자 차이점과 사용 ptrStr->name = "aa"; 이런 화살표 연산자를 한 번쯤은 보셨을 겁니다. 사용상에 직감적으로 어느 구조체, 클래스에 name 변수에 접근한다는 것을 알 수 있으실 겁니다. 하지만 정확히 -> 와 . 의 차이점은 포인터인지 아닌지에 따라 결정됩니다. struct Character { int level; int rank; }; int main() { struct Character myCharacter = { 1, 100 }; myCharacter.level += 2; } 일반적인 구조체 모습입니다. Character 구조체에 level 변수에 접근하는 것은 도트(멤버) 연산자로 위와 같이 접근을 할 수 있습니다. struct Charact..

개발/C와 C++ 2022.09.03

[C/C++ Error] switch quantity not an integer

[C/C++ Error] switch quantity not an integer 스위치에는 정수 값을 넣어야 합니다. 정수 값을 넣지 않았을 경우에 발생하는 에러입니다. 저의 경우 실수 값을 넣었는데, 이를 해결하는 방법들을 아래에 작성합니다. 정수 변수로 변환_1 float num1 = 4.2; int num2 = num1; switch(num2) { ... case 4: ... break; ... } 정수 변수로 변환_2 float num = 4.2; switch((int)num) { ... case 4: ... break; ... }

개발/C와 C++ 2022.09.01

[EPS32/memory] 플래시 메모리가 부족할 때 해결법

[EPS32/memory] 플래시 메모리가 부족할 때 해결법 보통 많이 사용하는 모델로는 ESP32-WROOM-32로 개발 키트에 많이 적용된 모델입니다. 이 모델에는 4BM 플래시 메모리가 있습니다. 하지만 코드를 짜서 업로드할때, 용량이 그렇게 크지도 않는데 용량 부족이라고 뜰 때가 있습니다. 이는 기본적으로 메모리 파티션이 1.4MB로 나누어져 있기 때문입니다. 아래는 기본 파티션에 대한 표입니다. #Name Type SubType Offset Size Flags nvs data nvs 0x9000 0x5000 otadata data ota 0xe000 0x2000 app0 app ota_0 0x10000 0x140000 app1 app ota_1 0x150000 0x140000 spiffs dat..

[C/C++] 메모리 할당(malloc, calloc, realoc, free)

[C/C++] 메모리 할당(malloc, calloc, realoc, free) C언어에서는 메모리를 할당할 때가 있습니다. 그때 사용하는 함수들입니다. allocation이 할당이라는 뜻을 가지고 있기에 함수의 이름으로 의미를 파악할 수 있습니다. 헤더파일에 있으며 다음과 같습니다. malloc (memory allocation - 메모리 할당) : 메모리를 할당한다. calloc (contiguous allocation - 연속 할당) : 메모리를 할당 및 초기화한다. realloc (resize allocation - 할당 크기 조절) : 메모리를 추가 할당한다. free : 메모리를 할당을 해제한다. 각각의 함수와 예시를 살펴보면 다음과 같습니다. void *malloc(size_t size); ..

개발/C와 C++ 2022.08.22

[에러/arduino] expected '=', ',', ';', 'asm' or 'attribute' before 'PROGMEM' arduino

expected '=', ',', ';', 'asm' or 'attribute' before 'PROGMEM' arduino 아두이노를 작업하면서 혹은 C/C++을 작업하면서 종종 PROGMEM을 사용할 때가 있습니다. 이때 여러 파일에서 한 번에 작업하다 보면, 위와 같은 에러를 띄우기도 합니다. 저의 경우에는 pgmspace.h를 찾지 못해서 발생하는 에러였습니다. #ifdef ARDUINO_ARCH_AVR #include #else #include #endif 위와 같이 변경해 주면 에러 없이 진행됩니다.

[android/kotlin] Intent는 무엇인가?

[android/kotlin] Intent는 무엇인가? intent의 뜻은 의도, 의지라는 뜻을 가지고 있습니다. 저는 이제 막 안드로이드를 접하고 배우고 있는 단계일 때, 이 단어를 보고 어떤 용도인지 감이 오지 않아서 여기저기 많이 찾아봤습니다만 사용방법에 대해서는 잘 알려주지만 시원하게 궁금증을 해결해 주는 곳은 없었던 것 같습니다. intent의 의도라는 뜻은 우리의 의도라고 봐야 할 것 같습니다. '스택오버플로우'라는 커뮤니티에서도 저와 비슷한 궁금증을 가진 사람이 있었는데 그에 대한 대답으로는 다음과 같았습니다. 의도(Intent)는 당신이 하고 싶은 것을 안드로이드에게 말하는 한 방법이다. 다시 말해, 당신은 당신의 의도를 묘사합니다. 안드로이드 4대 컴포넌트 간의 통신 안드로이드에는 4대 ..

[android/kotlin] RecyclerView이 보이지 않을 때

[android/kotlin] RecyclerView이 보이지 않을 때 안드로이드에는 RecyclerView가 보이지 않은 경우가 있었습니다. 이때 디버그를 해보니 onCreateViewHolder 도 호출이 안돼서 찾아보니 결론은 레이아웃의 형태를 가로 형태로 보여줄 것인지, 세로 형태로 보여줄 것인지 아니면 그리드 형태로 보여줄 것인지 정해주지 않아서였던 것 같습니다. 해결 방법으로는 레이아웃의 형태를 설정해 주면 됩니다. .xml에서 설정하는 방법 해당 코드에서 app:layoutManager로 androidx.recyclerview.widget.LinearLayoutManager 을 설정해주고, android:orientation으로 vertical을 설정해주면 됩니다. LinearLayoutMa..

[ESP32 에러] Failed to connect to ESP32: Timed out waiting for packet header

[ESP32 에러] Failed to connect to ESP32: Timed out waiting for packet header ESP32 개발 키트를 사용하여 기본 테스트 코드를 업로드를 할 때 이 에러를 만났습니다. 아두이노 IDE를 사용해 업로드할 때 발생한 에러로 원인은 ESP32가 어디에 연결되어 있는지 찾지 못한 것이고, 정해진 시간을 넘겨 버렸을 때 Timed out이라는 에러로 표시됩니다. EPS32를 못 찾는 경우는 몇 가지가 있습니다. 아래에서 알아봅니다. 1.연결된 장치를 못 찾는 경우 USB에 연결을 했더라도 장치를 찾지 못하는 경우가 있습니다. 시작-장치 관리자에서 포트(COM & LPT) 항목에서 포트가 연결되어 있는지 확인합니다. EPS32 개발 키트는 종류가 여럿 있기 ..