[2024.03.08.금] 인천인력개발원 하만 세미콘 아카데미
임베디드 시스템을 위한 SW 구조설계
- ARM 프로그래밍
- Arm cortex -> cpu : ARM 제작
- Cortex-M 계열 : Microcontrollers
- Cortex-A 계열 : Application Processor
- ARM: Advanced RISC Maschines (RISC: Reduced Instruction Set CPU <-> CISC : Complex ~~)
- RISC VS. CISC : 발열 차이가 가장 큼(CISC의 소모 전류가 큼. 왜냐하면 CISC에 TR이 많음)
- 사용 언어: C언어
- ARM Processors : RISC 구조를 가지는 32비트 프로세서
- 장비 제어 프로그래밍(C언어)
- 구동을 위한 하드웨어 스펙 검색(I/O 형성)
- Input을 통해 function을 하여 Output을 만드는 것
C프로그래밍 개요
- 컴파일: 프로그래밍 언어를 컴퓨터가 이해할 수 있도록 번역하는 과정
- 컴파일러: 번역기 / 대부분의 언어에서 사용하는 방식
- Edit -> Compile -> Link
- 대표적으로 Visual Studio (통합 컴파일러 : 위 세 단계를 모두 진행하여 .exe파일을 만드는 프로그램)
- 인터프리터: 동시통역 / ex) 파이썬 / 장점 : 즉시응답
- C언어
- 장점: 좋은 이식성 / 좋은 효율성 / 배우기 쉬움
- 단점: 프로그래밍에 주의 필요 / 완전한 고급 언어보다 고난도
- C언어 코딩 기본요소
include <stdio.h> int main(void){ ~~; ~~; }
- 함수( f(x) ) : 입력 -> 출력 / C언어의 기본 단위
- 함수 호출과 인자 전달
- 인자 전달: 입력 x를 전달하는 행위
- 함수 호출: 인자 전달 및 함수의 실행을 요구
- C언어 함수 특성
- 입력/출력 존재
- 순차적 실행
- 함수 기능을 정의하는 몸체 존재
- 함수 분석 int main (void) { 함수 몸체 }
- int : 출력 형태
- main: 함수 이름
- void: 입력 형태
- { }: 몸체 시작, 종료
- ; (세미콜론)이 필요한 문장: 연산 수행 문장(시간 흐름에 따라 명령하는 문장)
- 표준 라이브러리(입출력 라이브러리): 이미 표준화하여 만들어둔 함수들의 집합 / 헤더 파일 포함
- 헤더파일: stdio.h / 헤더 파일(xxx.h)의 포함 선언(#include <xxx.h>)은 가장 먼저
- return
- 함수 종료 / 함수를 호출한 영역으로 값 반환
- return은 함수 내에 없어도 되고(결과값이 필요 없는 함수), 둘 이상 존재도 가능
- 주석 - 필수!!
- 메모 기능
- 프로그램의 가독성 증가
- 사용 방법
/* 한줄짜리 주석 */
/*
여러 줄에
걸친 주석
*/
//단일 행 주석
- printf 함수
- ex) prinft(“Hello Everybody \n);
- %: 변환기호(실수, 10진수, 15진수, 문자열, ...)
- 특수문자: 식별은 불가능하나 존재하는 문자 (강노01 p.29 참고)
- 윈도우에서 줄바꿈 시 \r\n 사용(모니터에 출력할 땐 \n만 사용해도 작동)
- \r: carriage return, 줄의 앞으로 돌아가는 동작
- 서식 문자 %~: 출력 대상의 출력 형태 지정문자 (강노01 p.32 참고)
- printf(%d \n”, 1234); -> 1234 \n 출력
- Data 단위
- 1 Byte(= 1 char= 1문자)
- C언어 Data 단위 : 1~4Byte
- 1Byte = 1char
- 2Byte = short(int)
- 4Byte = int, long, float
- 8Byte = double
실습: Microsoft Visual Studio 2022
- IDE tool -> **Debuging이 중요
- C vs C++: C++에는 class library(객체 라이브러리) 사용
printf 실습
- 파일 생성
언어: C++/ 운영체제: Windows/ 프로젝트: 콘솔 - editor 실행
왼쪽 : edit 부분, 오른쪽 : 솔루션 탐색기 - 코드 입력
#include <stdio.h> main() { printf("안녕하세요?"); }
- 로컬 Windows 디버거 실행
컴파일&amp;link -> exe파일 생성(디버깅 정보 포함) -> debug console에서 실행 - 디버그 콘솔 창 확인
- Debug / Release 모드, x64 / x86
x64: 64bit CPU (windows 10, 11 에서는 이 설정 유지)/ x86: 32bit CPU - 코드 입력
#include <stdio.h> main() { printf("\n\n\n\n\n안녕하세요?\n\n\n\n\n"); }
- 정수, 실수, 긴 정수, 긴 실수 출력 테스트
실수, 긴 실수 : 데이터 표기 형식이 달라 0.000000으로 출력 - 실수와 긴 실수 출력 테스트의 데이터를 ”10.”으로 표기하여 정상 출력 확인
유효숫자가 소수점 아래 6자리까지 표시 - 소수점 아래 n자릿수까지 표시하기 위해 %와 변환문자열 사이에 a.b 형태로 입력 (a는 소수점 포함 자릿수, .b는 소수점 이하 b번째까지 표시)
- nibble: 1111과 같이 이진수를 4개씩 끊어서 표시하는 단위
- 16진수 표기법 : 0~9+A~F
- %와 변환문자열 사이에 숫자 n 입력 시 n개의 칸을 사용하여 출력(강의노트01강 p.35)
%12d입력 시 정수 출력 부분에서 12칸 사용. 빈 자리는 공란으로 표시
- 8진수는 3bit씩 끊어 출력, 각 digit에 0~7 값 사용
scanf 실습
- 다양한 형태의 변수
- 변수 : 메모리 공간에 이름을 붙인 것
- 정수형: char(1byte 정수), int, long
- char은 정수형 => a+1 = b - 실수형: float, double
- 대입 연산자(=): 값을 대입하기 위한 연산자
- int val; //int형 변수 val 선언(선언은 변수 사용 전에)
- val = 20; //변수 val에 20을 저장 - 변수 선언 시 주의사항
- 변수 이름은 알파벳, 숫자, 언더바로 구성
- 변수 이름은 숫자로 시작 불가, 키워드 사용 불가
- 공백 포함 불가
- 대소문자 구분
- 변수 : 메모리 공간에 이름을 붙인 것
- 변수 선언 및 변수 연산, 출력 테스트
변수 선언은 사용 전에 선언해야 정상적으로 컴파일 실행 - 변수의 선언 및 초기화
초기화 없이 실행 시 &amp;ldquo;빌드 오류&amp;rdquo; - 변수 앞에 &을 붙여 printf 사용 시 변수에 할당된 메모리 주소 표기 가능
변수에 할당된 메모리 주소 표기 - scanf 입력 형태 정의: 데이터를 입력받는 형태 지정 가능(ex. %d, %o, %x)
[example]
:10진수 정수형으로 입력받아서 변수 val에 저장int main(void) { int val; scanf(“%d”, &val); }
위 코드 실행 시 scanf 오류 발생(This function or variable may be unsafe) - scanf 오류 해결 방법
프로젝트 - test01속성 구성 속성 - C/C++ - SDL 검사 : 아니요 - 적용 - 확인 - scanf를 이용하여 vchar, vint, vlong, vfloat 변수에 값 입력

'하만(Harman) 세미콘 반도체 설계 과정 > 임베디드 시스템을 위한 SW 구조설계' 카테고리의 다른 글
하만(Harman) 세미콘 아카데미 6일차 - SW 구조설계(문자와 문자열 처리 / 사용자 정의 함수 구현 ) (56) | 2024.03.14 |
---|---|
하만(Harman) 세미콘 아카데미 5일차 - SW 구조설계(포인터 / 함수 포인터 / 자료형 / 구조체 / 공용체) (64) | 2024.03.13 |
하만(Harman) 세미콘 아카데미 4일차 - SW 구조설계(함수 / 다차원 열 / 포인터) (65) | 2024.03.12 |
하만(Harman) 세미콘 아카데미 3일차 - SW 구조설계(반복문 / 조건문 / 배열) (66) | 2024.03.11 |