'embeded > arduino(genuino)' 카테고리의 다른 글
| skt-444 콘덴서 마이크 모듈 분해 (0) | 2025.08.07 |
|---|---|
| HW-504 이상해.. (0) | 2025.08.02 |
| 패시브 부저 (0) | 2025.08.01 |
| nRF24L01 복수 장치 통신 (0) | 2025.07.29 |
| 오랫만에 부품지름 (0) | 2025.07.29 |
| skt-444 콘덴서 마이크 모듈 분해 (0) | 2025.08.07 |
|---|---|
| HW-504 이상해.. (0) | 2025.08.02 |
| 패시브 부저 (0) | 2025.08.01 |
| nRF24L01 복수 장치 통신 (0) | 2025.07.29 |
| 오랫만에 부품지름 (0) | 2025.07.29 |
테스트 해보니
waveform generator로 생성한 것 대로 음이 바뀐다.
다만 볼륨은 duty로 바뀌지 않고 음색이 바뀌는 느낌 혹은 주파수 변화라고 해야하나...

[링크 : http://itempage3.auction.co.kr/DetailView.aspx?ItemNo=C441109005&frm3=V2]
의외로 주파수가 좁다?
그리고 작동이 3~5V 라는데 1V 해서 소리가 났다는게 함정(작지만)
| SKU: MDU1126 Brief Data: Oscillation Frequency: 1500~2500Hz. Connector Pitch: 2.54mm. Operation Voltage: 3~5V. Color: Black. Operating Temperature: -20 ~ +70°C. Dimension (L x W): 1.85 x 1.5 cm. |
[링크 : https://www.handsontec.com/dataspecs/module/passive%20buzzer.pdf]
| HW-504 이상해.. (0) | 2025.08.02 |
|---|---|
| ads1115 복수 장치 읽기 (0) | 2025.08.02 |
| nRF24L01 복수 장치 통신 (0) | 2025.07.29 |
| 오랫만에 부품지름 (0) | 2025.07.29 |
| 1.8인치 TFT LCD with SDcard (0) | 2024.10.18 |
설치하고 실행하는데 패키지가 부족한지 에러가 발생
그런데 에러가 매번 동일한건 함정.. -_-
콘솔 실행
| /opt/nxp/eIQ_Toolkit_v1.8.0/bin/eiqenv.sh /opt/nxp/eIQ_Toolkit_v1.8.0/eiq-portal |
이런 에러가 나서 두 개 패키지 설치해주고 해결되었다.
ubuntu 22.04.5 LTS 기준

| $ sudo apt-cache search libffi libffi7 - 외부 함수 인터페이스 라이브러리 런타임 |
libssl이 3.0대로 올라가면서 하위호환 문제가 발생한거로 보임
| $ wget https://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.24_amd64.deb $ sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2.24_amd64.deb |
실행 성공!

쓰는법은 이제 봐야함
[링크 : https://docs.nxp.com/bundle/EIQTUG/page/topics/introduction.html]
| openVX, verisilicon(vivante) (0) | 2025.08.14 |
|---|---|
| gstreamer pipeline / appsink (0) | 2025.08.14 |
| nxp g2d_blit (0) | 2025.04.01 |
| sounddevice on arm i.mx8 evk (0) | 2024.05.14 |
| NXP i.mx8mp LF_v6.1.55-2.2.0 테스트 (0) | 2023.12.21 |
아 밑바닥에 깔려있어야 마음의 평화가 온다고 -_-
왜 또 점프시켜서 밑바닥을 안보이게 하냐고?!?!?

| -_- (0) | 2025.08.18 |
|---|---|
| 누가 거짓말을 하고 있는걸까? (0) | 2025.08.07 |
| 오랫만에 해피빈 기부 (0) | 2025.07.22 |
| 블로그 방문자 수 정상화(?) (0) | 2025.07.20 |
| 이틀후 블로그 통계 정상화 (7) | 2025.07.17 |
맨날 리눅스에서만 하다가 노트북 바꾸기 귀찮아서(!!) 윈도우에서도 해보려고 발악중
일단은 visual studio 에서 콘솔앱으로는 안되서
Windows 데스크탑 애플리케이션으로 프로젝트를 생성

프로젝트 설정에 링커 - 입력 - 추가 종속성에

opengl32.lib 와 glu32.lib를 추가해주면 끝

[링크 : https://makingrobot.tistory.com/155]
F5 눌러서 빌드하니 잘 뜬다.

아래는 gemini가 생성해준 소스코드.
#include <windows.h> // Win32 API 헤더
#include <gl/gl.h> // OpenGL 핵심 헤더
#include <gl/glu.h> // GLU 유틸리티 헤더
// OpenGL 렌더링 컨텍스트 핸들
HGLRC g_hRC = NULL;
// 디바이스 컨텍스트 핸들
HDC g_hDC = NULL;
// 윈도우 핸들
HWND g_hWnd = NULL;
// 인스턴스 핸들
HINSTANCE g_hInstance = NULL;
// 창 클래스 이름 (유니코드 문자열)
LPCWSTR szWindowClass = L"OpenGLWindow";
// 창 제목 (유니코드 문자열)
LPCWSTR szTitle = L"Simple OpenGL Triangle (No GLUT)";
// OpenGL 초기화 함수
void InitOpenGL() {
// 배경색을 검정색으로 설정 (RGBA 값)
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
// 현재 매트릭스를 프로젝션 매트릭스로 설정
glMatrixMode(GL_PROJECTION);
// 2D 직교 투영 설정 (좌표계: x=0.0~200.0, y=0.0~200.0)
gluOrtho2D(0.0, 200.0, 0.0, 200.0);
}
// 그리기 함수
void DrawScene() {
// 컬러 버퍼 클리어
glClear(GL_COLOR_BUFFER_BIT);
// 삼각형 그리기 시작
glBegin(GL_TRIANGLES);
// 첫 번째 꼭지점: 빨간색 (위쪽)
glColor3f(1.0f, 0.0f, 0.0f);
glVertex2i(100, 150);
// 두 번째 꼭지점: 녹색 (왼쪽 아래)
glColor3f(0.0f, 1.0f, 0.0f);
glVertex2i(50, 50);
// 세 번째 꼭지점: 파란색 (오른쪽 아래)
glColor3f(0.0f, 0.0f, 1.0f);
glVertex2i(150, 50);
glEnd(); // 삼각형 그리기 끝
// 프론트 버퍼와 백 버퍼 교체 (더블 버퍼링 사용 시)
SwapBuffers(g_hDC);
}
// OpenGL 활성화 함수
// 창 핸들(hWnd), 디바이스 컨텍스트 포인터(hDC), 렌더링 컨텍스트 포인터(hRC)를 인자로 받음
void EnableOpenGL(HWND hWnd, HDC* hDC, HGLRC* hRC) {
PIXELFORMATDESCRIPTOR pfd;
int iFormat;
// 픽셀 형식 기술자 구조체를 0으로 초기화
ZeroMemory(&pfd, sizeof(pfd));
// 픽셀 형식 기술자 구조체의 크기 설정
pfd.nSize = sizeof(pfd);
// 픽셀 형식 기술자 버전 설정
pfd.nVersion = 1;
// 픽셀 형식 플래그 설정: 윈도우에 그리기, OpenGL 지원, 더블 버퍼링 사용
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
// 픽셀 타입 설정: RGBA 색상 모드
pfd.iPixelType = PFD_TYPE_RGBA;
// 색상 비트 깊이 설정: 32비트 색상
pfd.cColorBits = 32;
// 깊이 버퍼 비트 깊이 설정: 16비트 깊이 버퍼
pfd.cDepthBits = 16;
// 레이어 타입 설정: 메인 평면
pfd.iLayerType = PFD_MAIN_PLANE;
// 윈도우의 디바이스 컨텍스트를 얻음
*hDC = GetDC(hWnd);
// 주어진 픽셀 형식 기술자에 가장 적합한 픽셀 형식을 찾음
iFormat = ChoosePixelFormat(*hDC, &pfd);
// 디바이스 컨텍스트에 픽셀 형식을 설정
SetPixelFormat(*hDC, iFormat, &pfd);
// OpenGL 렌더링 컨텍스트 생성
*hRC = wglCreateContext(*hDC);
// 현재 스레드의 디바이스 컨텍스트에 렌더링 컨텍스트를 연결
wglMakeCurrent(*hDC, *hRC);
// OpenGL 초기화 함수 호출
InitOpenGL();
}
// OpenGL 비활성화 함수
// 창 핸들(hWnd), 디바이스 컨텍스트(hDC), 렌더링 컨텍스트(hRC)를 인자로 받음
void DisableOpenGL(HWND hWnd, HDC hDC, HGLRC hRC) {
// 현재 렌더링 컨텍스트를 해제
wglMakeCurrent(NULL, NULL);
// 렌더링 컨텍스트를 삭제
wglDeleteContext(hRC);
// 디바이스 컨텍스트를 해제
ReleaseDC(hWnd, hDC);
}
// 윈도우 프로시저 (메시지 처리 콜백 함수)
// 윈도우 핸들, 메시지 코드, 추가 정보(wParam, lParam)를 인자로 받음
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message) {
// 윈도우 생성 시 발생하는 메시지
case WM_CREATE:
// OpenGL 활성화 함수 호출
EnableOpenGL(hWnd, &g_hDC, &g_hRC);
break;
// 윈도우가 다시 그려져야 할 때 발생하는 메시지
case WM_PAINT:
// 그리기 함수 호출
DrawScene();
// WM_PAINT 메시지를 유효화 (반복적인 WM_PAINT 메시지 방지)
ValidateRect(hWnd, NULL);
break;
// 윈도우 크기 변경 시 발생하는 메시지
case WM_SIZE:
// 뷰포트 크기를 윈도우 크기에 맞게 조정 (선택 사항)
// L_PARAM에서 새 너비와 높이를 추출하여 glViewport 함수에 전달
// glViewport(0, 0, LOWORD(lParam), HIWORD(lParam));
break;
// 윈도우 닫기 버튼 클릭 시 발생하는 메시지
case WM_CLOSE:
// 윈도우 파괴 메시지를 보냄
DestroyWindow(hWnd);
break;
// 윈도우가 파괴될 때 발생하는 메시지
case WM_DESTROY:
// OpenGL 비활성화 함수 호출
DisableOpenGL(hWnd, g_hDC, g_hRC);
// 메시지 루프를 종료하는 메시지를 보냄
PostQuitMessage(0);
break;
// 처리하지 않는 다른 메시지들은 기본 윈도우 프로시저로 전달
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
// WinMain 함수 (Windows 애플리케이션의 진입점)
// 인스턴스 핸들, 이전 인스턴스 핸들, 명령줄 문자열, 표시 상태 플래그를 인자로 받음
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
WNDCLASS wc; // 윈도우 클래스 구조체
MSG msg; // 메시지 구조체
BOOL bDone = FALSE; // 메시지 루프 종료 플래그
g_hInstance = hInstance; // 현재 인스턴스 핸들 저장
// 윈도우 클래스 스타일 설정: 고유한 DC, 수평/수직 리드로우 시 다시 그리기
wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
// 윈도우 프로시저 함수 포인터 설정
wc.lpfnWndProc = WndProc;
// 추가 클래스 메모리 (0)
wc.cbClsExtra = 0;
// 추가 윈도우 메모리 (0)
wc.cbWndExtra = 0;
// 인스턴스 핸들 설정
wc.hInstance = hInstance;
// 아이콘 설정 (기본 애플리케이션 아이콘)
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
// 커서 설정 (기본 화살표 커서)
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
// 배경 브러시 설정 (검정색 솔리드 브러시)
wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
// 메뉴 이름 (없음)
wc.lpszMenuName = NULL;
// 윈도우 클래스 이름 설정 (LPCWSTR)
wc.lpszClassName = szWindowClass;
// 윈도우 클래스 등록 시도
if (!RegisterClass(&wc)) {
// 등록 실패 시 메시지 박스 표시 (유니코드 문자열 사용)
MessageBox(NULL, L"Window Registration Failed!", L"Error", MB_ICONEXCLAMATION | MB_OK);
return 0; // 프로그램 종료
}
// 윈도우 생성 시도
g_hWnd = CreateWindowEx(
WS_EX_APPWINDOW, // 확장된 윈도우 스타일: 작업 표시줄에 앱으로 표시
szWindowClass, // 윈도우 클래스 이름 (LPCWSTR)
szTitle, // 윈도우 제목 (LPCWSTR)
// 윈도우 스타일: 오버랩된 창, 형제 윈도우 영역 클리핑, 자식 윈도우 영역 클리핑
WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
CW_USEDEFAULT, CW_USEDEFAULT, // x, y 위치 (기본값 사용)
400, 400, // 윈도우 너비, 높이
NULL, // 부모 윈도우 핸들 (없음)
NULL, // 메뉴 핸들 (없음)
hInstance, // 인스턴스 핸들
NULL // 추가 생성 데이터 (없음)
);
// 윈도우 생성 실패 시
if (!g_hWnd) {
// 메시지 박스 표시 (유니코드 문자열 사용)
MessageBox(NULL, L"Window Creation Failed!", L"Error", MB_ICONEXCLAMATION | MB_OK);
return 0; // 프로그램 종료
}
// 윈도우를 화면에 표시
ShowWindow(g_hWnd, nCmdShow);
// 윈도우를 업데이트하여 WM_PAINT 메시지 발생
UpdateWindow(g_hWnd);
// 메시지 루프
while (!bDone) {
// 메시지 큐에서 메시지를 확인 (메시지가 없어도 즉시 반환)
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
// 종료 메시지 (WM_QUIT) 수신 시
if (msg.message == WM_QUIT) {
bDone = TRUE; // 루프 종료 플래그 설정
}
else {
// 키보드 메시지를 번역 (예: VK_SHIFT -> WM_KEYDOWN)
TranslateMessage(&msg);
// 메시지를 해당 윈도우의 윈도우 프로시저로 디스패치
DispatchMessage(&msg);
}
}
else {
// 메시지가 없을 때 지속적으로 그리기 (게임 루프와 유사)
DrawScene();
}
}
// 프로그램 종료 코드 반환
return (int)msg.wParam;
}
| openGL VAO ABO (0) | 2025.08.20 |
|---|---|
| openGL display list, deprecated (0) | 2025.08.20 |
| openGL light (0) | 2025.07.30 |
| openGL shade (0) | 2025.07.30 |
| openGL 은선제거 (0) | 2025.07.29 |
양면을 모두 조명처리하도록 설정하려면 아래의 명령을 쓰면 된다고 한다.
폴리곤을 줄이기 위해서 두께가 없는 면으로 구성된 녀석을 광원을 주려면 이렇게 해야만 culling 에서 문제가 안되려나?
| glLightModeli(GL_LIGHT_MODEL_TWO_SIDED, GL_TRUE); |
[링크 : https://wjdgh283.tistory.com/m/entry/OpenGL로-배우는-컴퓨터-그래픽스-Chapter-03-그래픽-컬러처리-1]
광원을 켜면 glColor로 설정한 건 무시된다고.
그래서 glMaterialfv()로 값을 설정해야 한다고 하는데, 광원의 종류를 객체별로 지정해주는 건가?
| glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, materialAmbient ); glMaterialfv( GL_FORNT, GL_SPECULAR, materialSpecular ); glMaterialf( GL_FRONT, GL_SHININESS, 60.0f ); |
[링크 : https://sungcheol-kim.gitbook.io/opengl-tutorial/chapter10]
| openGL display list, deprecated (0) | 2025.08.20 |
|---|---|
| visual studio 2002 에서 openGL 예제 실행 (0) | 2025.07.30 |
| openGL shade (0) | 2025.07.30 |
| openGL 은선제거 (0) | 2025.07.29 |
| openGL 스터디용 gemini 생성 코드 (0) | 2025.07.16 |
opengl에서 지원하는 쉐이드(면 색상 칠하기)는 flat과 gouraud 뿐이라는데
한 20년 전에 퐁은 어떻게 한거였지?
| I digged around a bit. You can use the fixed function pipeline and set glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 1); GL will then light backfaces with your back material and reversed normals. |
[링크 : https://gamedev.stackexchange.com/questions/9228/double-sides-face-with-two-normals]
| flat / Gouraud |
[링크 : https://gofo-coding.tistory.com/entry/OpenGL-Lighting-Shading]
phong은 쉐이더 써야한다고
[링크 : https://dev-sbee.tistory.com/35]
| visual studio 2002 에서 openGL 예제 실행 (0) | 2025.07.30 |
|---|---|
| openGL light (0) | 2025.07.30 |
| openGL 은선제거 (0) | 2025.07.29 |
| openGL 스터디용 gemini 생성 코드 (0) | 2025.07.16 |
| opengl texture (0) | 2025.05.30 |
숨겨진 선이나 면을 제거하는 건데
폴리곤의 방향에 따라서 해당 면을 앞면으로 판단해 렌더하냐 안하냐를 설정해 주어야 한다.
그런데 폴리곤의 normal vector를 이용해 cpu로 처리하는거 보다 이렇게 gpu에서 처리하도록 구현되어 있...겠지?
| glEnable(GL_CULL_FACE); glFrontFace(GL_CW); glCullFace(GL_BACK); glEnable(GL_DEPTH_TEST); |
[링크 : https://blog.naver.com/thooy/10097790648]
| Name glCullFace — specify whether front- or back-facing polygons can be culled C Specification void glCullFace( GLenum mode); Parameters mode Specifies whether front- or back-facing polygons are candidates for culling. Symbolic constants GL_FRONT, GL_BACK, and GL_FRONT_AND_BACK are accepted. The initial value is GL_BACK. |
[링크 : https://registry.khronos.org/OpenGL-Refpages/es2.0/xhtml/glCullFace.xml]
| 은선 제거 기법에는 다음과 같은 기법들이 있다. . 최대 최소법에 의한 은선 처리 . 법선 벡터법에 의한 은선 처리 . 능선 탐색법에 의한 은선 처리 . 공간 접근 . 객체 공간 알고리즘 . 리스트 순위 알고리즘 . 이미지 공간 알고리즘 . 워노크 알고리즘 . 프랭크린 알고리즘 . 웨일러-아델톤 알고리즘 |
[링크 : https://blog.naver.com/hwa7132/100096580196]
[링크 : https://learnopengl.com/Advanced-OpenGL/Face-culling]
[링크 : https://funnypr.tistory.com/m/entry/OpenGL-Normal-Vector]
[링크 : https://usingsystem.tistory.com/m/487]
[링크 : https://www.gamedev.net/forums/topic/620304-opengl-frustum-culling-with-glrotatef/]
| openGL light (0) | 2025.07.30 |
|---|---|
| openGL shade (0) | 2025.07.30 |
| openGL 스터디용 gemini 생성 코드 (0) | 2025.07.16 |
| opengl texture (0) | 2025.05.30 |
| blender in openGL (0) | 2025.04.28 |
X-CUBE-EEPROM 이 stm32f103 프로젝트에서 안보여서 찾아보는데
어...라... 왜 F만 빠져있냐 =_=
[링크 : https://www.st.com/resource/en/application_note/an4894-how-to-use-eeprom-emulation-on-stm32-mcus-stmicroelectronics.pdf]
[링크 : https://www.st.com/en/embedded-software/x-cube-eeprom.html]
[링크 : https://m.blog.naver.com/chcbaram/223153496808] << STM32G
| STM32C0 series, STM32G0 series, STM32G4 series, STM32H5 series, STM32L4 series, STM32L4+ series, STM32L5 series, STM32U0 series, STM32U3 series, STM32U5 series, STM32WB series, STM32WL series Reference documents EEPROM emulation solutions and application notes are available for other STM32 series as listed below. [1] Application note STM32F0 series EEPROM emulation in STM32F0xx microcontrollers (AN4061) [2] Application note STM32F1 series EEPROM emulation in STM32F10x microcontrollers (AN2594) [3] Application note STM32F2 series EEPROM emulation in STM32F2xx microcontrollers (AN3390) [4] Application note STM32F3 series EEPROM emulation in STM32F30x/STM32F31x STM32F37x/STM32F38x microcontrollers (AN4056) [5] Application note STM32F4 series EEPROM emulation in STM32F40x/STM32F41x microcontrollers (AN3969) [6] Application note Building wireless applications with STM32WB series microcontrollers (AN5289) [7] Reference manual STM32H563/H573 and STM32H562 Arm®-based 32-bit MCUs (RM0481) ![]() ● eeprom.c: it contains C code for the following project routines: EE_Init() EE_Format() EE_FindValidPage() EE_VerifyPageFullWriteVariable() EE_ReadVariable() EE_PageTransfer() EE_WriteVariable() ● eeprom.h: it contains the routine prototypes and some declarations |
가입 후 아래 링크에서 다운로드 받아야 사용할 수 있나 보다.
대충 봐서는 2개의 섹터를 오가면서 write 하는 듯. wear leveling 등은 구현이 안되어 있을 것 같네

[링크 : https://www.st.com/en/embedded-software/stsw-stm32010.html]
| EEPROM emulation for stm32 (0) | 2025.10.16 |
|---|---|
| stm32 cpp (0) | 2025.08.08 |
| stm32f103ret flash program / erase 테스트 (0) | 2025.07.28 |
| HAL_FLASH_Program (0) | 2025.07.21 |
| stm32cubeide build analyzer (0) | 2025.07.21 |
RDMA 한번 써보고 싶다고 눈돌아 가는 중
MCX354A-FCBT
ConnectX®-3 VPI Single and Dual QSFP+ Port Adapter Card
ethernet / infiniband 지원

그나저나 이걸 지원하는 트랜시버 드럽게 비싸네!
MC2210411-SR4
| 지름...신? (0) | 2025.08.06 |
|---|---|
| 줍줍 (0) | 2025.08.04 |
| ultarnav fn 키와 access ibm (0) | 2025.07.28 |
| 어라 갑자기 크롬 잘 된다? (0) | 2025.07.23 |
| lenovo E15 fan 부품 검색 (0) | 2025.06.27 |