__________

Designing the Future with Circuits

반도체 회로설계 취준기

하만(Harman) 세미콘 반도체 설계 과정/임베디드 시스템을 위한 SW 구조설계

하만(Harman) 세미콘 아카데미 2일차 - SW 구조설계(printf / scanf )

semicon_circuitdesigner 2024. 3. 9. 18:28

[2024.03.08.금] 인천인력개발원 하만 세미콘 아카데미


임베디드 시스템을 위한 SW 구조설계


  1. 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언어
  2. ARM Processors : RISC 구조를 가지는 32비트 프로세서
  3. 장비 제어 프로그래밍(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 실습


  1. 파일 생성
    언어: C++/ 운영체제: Windows/ 프로젝트: 콘솔
  2. editor 실행
    왼쪽 : edit 부분, 오른쪽 : 솔루션 탐색기
  3. 코드 입력
    #include <stdio.h>
    
    main()
    {
    	printf("안녕하세요?");
    }​


  4. 로컬 Windows 디버거 실행
    컴파일&amp;amp;link -&gt; exe파일 생성(디버깅 정보 포함) -&gt; debug console에서 실행
  5. 디버그 콘솔 창 확인
  6. Debug / Release 모드, x64 / x86
    x64: 64bit CPU (windows 10, 11 에서는 이 설정 유지)/ x86: 32bit CPU
  7. 코드 입력
    #include <stdio.h>
    
    main()
    {
    	printf("\n\n\n\n\n안녕하세요?\n\n\n\n\n");
    }​​
  8.  정수, 실수, 긴 정수, 긴 실수 출력 테스트
    실수, 긴 실수 : 데이터 표기 형식이 달라 0.000000으로 출력
  9. 실수와 긴 실수 출력 테스트의 데이터를 ”10.”으로 표기하여 정상 출력 확인
    유효숫자가 소수점 아래 6자리까지 표시
  10. 소수점 아래 n자릿수까지  표시하기 위해 %와 변환문자열 사이에 a.b 형태로 입력 (a는 소수점 포함 자릿수, .b는 소수점 이하 b번째까지 표시)
    •  nibble: 1111과 같이 이진수를 4개씩 끊어서 표시하는 단위
    • 16진수 표기법 : 0~9+A~F
  11. %와 변환문자열 사이에 숫자 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을 저장
      • 변수 선언 시 주의사항
        - 변수 이름은 알파벳, 숫자, 언더바로 구성
        - 변수 이름은 숫자로 시작 불가, 키워드 사용 불가
        - 공백 포함 불가
        - 대소문자 구분
  1. 변수 선언 및 변수 연산, 출력 테스트
    변수 선언은 사용 전에 선언해야 정상적으로 컴파일 실행
  2. 변수의 선언 및 초기화
    초기화 없이 실행 시 &amp;amp;ldquo;빌드 오류&amp;amp;rdquo;
  3.  변수 앞에 &을 붙여 printf 사용 시 변수에 할당된 메모리 주소 표기 가능
    변수에 할당된 메모리 주소 표기
  4. scanf 입력 형태 정의: 데이터를 입력받는 형태 지정 가능(ex. %d, %o, %x)
    [example]
    int main(void)
    {
    	int val;
    	scanf(“%d”, &val);  
    }​
    :10진수 정수형으로 입력받아서 변수 val에 저장
    위 코드 실행 시 scanf 오류 발생(This function or variable may be unsafe)
  5. scanf 오류 해결 방법
    프로젝트 - test01속성
    구성 속성 - C/C++ - SDL 검사 : 아니요 - 적용 - 확인
  6. scanf를 이용하여 vchar, vint, vlong, vfloat 변수에 값 입력
입력한 값이 printf를 통해 정상 출력