본문 바로가기

분류 전체보기

(225)
[오제이 튜브의 임베디드 실전 강의] 9강 회로도 딱 필요한 만큼만 배우자! 필요한 만큼 회로도 공부 : 임베디드 소프트웨어 개발자가 최소한으로 알아야 할 만큼 참고 서적 : 전자공학 만능 레시피, 짜릿짜릿 전자회로 DIY 전자공학 분야는 프로그래밍과는 달리 새로운 기능들이 자주 나오지 않는다 - 회로도 : 약속된 기호로 그려진 전기회로. 실제로 보이는 모양과는 차이가 있다 ex) 화장실에서 남녀 그림 -> 언어의 장벽을 뛰어넘어 국적 상관없이 모두가 이해할 수 있음 - 임베디드 소프트웨어 개발자는 회로도를 어느정도로 알아야 하는가 회로도를 보고 내가 제어할 부품이 무엇인지, 어떻게 제어해야 하는지 (어떤게 올바른 동작인지) 알아야 함 회로도 상의 부품을 실제 보드에서 찾을 수 있어야 함 전원 (Vcc)와 GND의 위치를 찾을 수 있어야 함 하드웨어 debugging시 어디에 멀..
[홍정모의 따라하며 배우는 C언어] 8.4 사용자 인터페이스는 친절하게 ~ 8.5 숫자와 문자를 섞어서 입력받기 8.4 사용자 인터페이스는 친절하게 문자를 계속 입력받으며 횟수를 세고 n을 입력하면 종료하는 프로그램 #include #pragma warning (disable:4996) main() { int count = 0; while (1) { printf("Current count is %d. Continue? (y/n)\n", count); if (getchar() == 'n') break; while (getchar() != '\n')// 버퍼에서 첫번째 입력한 문자만 남김 continue; count++; } } Output : Current count is 0. Continue? (y/n) (a 입력) Current count is 1. Continue? (y/n) (b 입력) Current coun..
[오제이 튜브의 임베디드 실전 강의] 8강 지금까지 배운 것을 큰 그림에 저장하기 - GPIO 제어 과정 Power On -> Startup Code -> main() 예전에는 Stack Pointer를 코드로 (어셈블리만 이용가능했었음) 설정해줬어야 했으나 요즘에는 하드웨어에서 자동으로 설정해줌 (바로 C코드로 접근 가능) SP, PC 설정 후 전원 공급 -> Startup Code로 이동 Stack Pointer : 현재 연산에 필요한 stack 영역에 저장되어있는 memory의 주소 저장. 저장시 자동으로 memory address가 바뀜 Program Counter : 다음에 실행될 program code의 memory의 address 저장 1) Power On 보드의 동작 전원은 3.3V 가정에 AC로 들어오는 220V를 3.3V로 전환해줌 2) Startup Code mai..
[오제이 튜브의 임베디드 실전 강의] 7강 GPIO제어 고아 먹기 - GPIO 수동 제어 2 지난 시간에 공부했던 MX_GPIO_Init( ) 중 static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIO_LED_GPIO_Port, GPIO_LED_Pin, GPIO_PIN_SET); /*Configure GPIO pin : GPIO_LED_Pin */// 이부분 공부 GPIO_InitStruct.Pin = GPIO_LED_Pin; GP..
[홍정모의 따라하며 배우는 C언어] 8.1 입출력 버퍼 ~ 8.3 입출력 방향 재지정 8.1 입출력 버퍼 - 버퍼란? 버퍼란 위의 사진처럼 입력받은 값들을 임시로 모아놓는 공간 - 버퍼를 사용하는 이유 프로그래밍시 가장 느린 작업은 입출력 작업이고 그 다음은 메모리 할당 과정 느린 입출력 작업 속도의 개선을 위해 버퍼 방식을 사용 입력을 받을때마다 하나씩 바로바로 출력하면 속도가 느리다 위의 방식을 대신해서 입력을 버퍼에 모았다가 2가지 경우가 되면 출력 버퍼가 다 찼을 때 엔터를 쳤을 때 ('\n' 이 들어올 때). 콘솔 입출력, 즉 지금까지 우리가 봐온 경우는 전부 이 방식 버퍼의 크기는 시스템 마다 다르나 보통 효율성을 가장 높일 수 있는 구조로 설계됨 크기 조절 가능 비싼 GPU는 메모리가 커서 버퍼의 크기가 더 넓음 1) 표준 입출력 함수 #define _CRT_SECURE_NO..
[오제이 튜브의 임베디드 실전 강의] 6강 GPIO제어 뿌셔 먹기 0. Cube IDE의 IOC 화면에서 각 GPIO 설정값들의 의미 1) GPIO output level (High / Low) 최초 동작시의 GPIO Output값 설정High 설정 시 Low 설정 시 GPIO_PIN_RESET = 0GPIO_PIN_SET = 1 2) GPIO mode (Output Push Pull / Output Open Drain) 회로의 방식을 설정Push Pull : MCU에서 제공하는 3.3V를 통해 장치를 제어함 Open Drain : 단순히 Ground를 열고 닫음 A. Push - PullPush - Pull 방식의 기본적인 회로도 sw1이 연결되면 3.3V가 연결되며 Output에 High가 출력 sw2가 연결되면 Ground(0V)가 연결되어 Low가 출력 (어떠한..
[홍정모의 따라하며 배우는 C언어] 7.11 최대, 최소, 평균 구하기 예제 ~ 7.13 goto를 피하는 방법 7.11 최대, 최소, 평균 구하기 예제 입력받은 수들의 최댓값, 최솟값, 평균값을 구하는 프로그램 0 미만, 100 초과인 입력값들은 무시 #define _CRT_SECURE_NO_WARNINGS #include #include // FLT_MAX 사용 위해 include int main() { float max = -FLT_MAX; float min = FLT_MAX; float sum = 0.0f; float input; int count = 0; while (scanf("%f", &input) == 1) { if (input > 100.0f || input max) ? input : max; min = (input < min) ? inpu..
[홍정모의 따라하며 배우는 C언어] 7.8 단어 세기 예제 ~ 7.10 루프 도우미 continue와 break 7.8 단어 세기 예제 문장을 입력받으면 문장의 글자 수, 단어 수, 그리고 줄 수를 출력하는 프로그램을 작성하라. ' . '(마침표)로 입력의 끝을 표시한다 #define _CRT_SECURE_NO_WARNINGS #include #include int main() { char ch; int cha = 0, word = 0, line = 0; bool word_flag = false; // false : 새로운 단어가 시작하지 않았다 bool line_flag = false; // false : 새로운 줄이 시작하지 않았다 printf("Enter text : "); while ((ch = getchar()) != '.') { if (!isspace(ch)) { cha++; if (!word_flag)..