프로그래밍 언어 76

어셈블리어란?

안녕하세요. 오늘은 어셈블리어에 대해 알아보겠습니다 어셈블리어란 기계어랑 1:1 매칭이 가능한 언어입니다. 기계어란 CPU가 직접 사용하는 언어이고 1000 0000 1000 0000이런 식으로 숫자로 되어있습니다. 그래서 코딩을 하다가 예상한 대로 동작을 안 할 때, 어셈블리어를 보면 CPU가 동작을 어떻게 하는지 정확히 알 수 있습니다. 어셈블리언어에는 표기하는 방법이 크게 두 가지가 있습니다. INTEL과 AT&T표기법입니다. INTEL표기법은 윈도우OS에서 많이 사용되고 AT&T표기법은 리눅스에서 많이 사용합니다. 일단 기본적으로 어셈블리언어는 아래의 포맷을 따릅니다 opcode operand1 operand2 opcode(연산코드): CPU가 수행할 동작을 나타내는 코드 operand(피연산자)..

C언어 예시를 통해서 함수포인터 알아보기

안녕하세요. 오늘은 C언어 함수포인터를 알아보겠습니다 함수포인터란 포인터를 만들어서 함수에게 사용하는것 입니다 예시1) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include char func(int i, int j , char c) { return i+j+c; } int main() { char (*p)(int,int,char); // 반환형 (*변수명)[전달인자]; p = func; printf("%d \n",func(1,2,3)); printf("%d \n",p(1,2,3)); } Colored by Color Scripter cs 결과값 6 6 ─────────────────────────────────────────────────────────────────────..

예시로 알아보는 volatile 한정자

안녕하세요. 오늘은 C언어를 사용하여 volatile 한정자를 알아보겠습니다. volatile를 알아보기 전에 최적화를 알아야 합니다. 컴파일을 할 때 최적화(Optimization)이라는 기능이 있습니다. 최적화 기능을 사용하면 의미 없는 코드를 기계어로 변환할 때 코드를 무시해버리기도 해서 속도 향상이나 크기 줄이기가 가능합니다. 이런 식으로 컴파일러마다 최적화 옵션이 다 있습니다. 예를 들어서 최적화 기능을 켜고 아래의 코드를 글로 컴파일 해보겠습니다. 1 2 3 4 5 int i = 0; i=1; i=2; i=3; i=4; cs 2~4번 무시하고 i=4만 실행한다고 생각하면 됩니다 (만약 뒤의 코드에서 i를 사용하지 않으면 아무것도 안합니다) volatile는 변수 앞에 쓰고 최적화를 하지 말라는..

C언어 Storage Class, Auto, Register, Extern, Static이란?

안녕하세요 오늘은 C언어 Storage Class, Auto, Register, Extern, Static에 대해 알아보겠습니다. Storage Class : 기억 영역을 분류하기 위해서 사용되는 용어입니다. 이때 Class는 객체의 Class랑은 상관이 없고 그냥 Class입니다 Auto : 지역변수에서 저장되는 공간입니다. 일반적으로 지역변수들은 Auto를 생략한거라고 봐도 됩니다. Auto의 범위는 특정 블럭입니다. 1 2 3 4 5 6 int calc(void) { int a=1; auto int b=2; return a+b; } cs a와 b의 선언은 같습니다. 또한 a,b의 생명은 2~6줄에만 있습니다. Register : 변수를 빠르게 접근하기 위해 RAM 대신에 CPU 레지스터에 로컬 변수..

C언어로 지수구하기

안녕하세요 오늘은 지수를 구하는 코드를 작성해보겠습니다 . 거듭제곱: 같은 수를 여러 번 곱한 것 밑 : 거듭제곱에서 곱한 수 (a) 지수 : 거듭제곱에서 밑이 곱해진 횟수 (n) aⁿ 작성할 코드는 아래와 같은 형태인 자연수의 지수를 구할 수 있는 코드입니다 9 -> 3의 2승 16 -> 2의 4승 빨강색의 값이 구할 값 입니다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #include unsigned char get_index(unsigned char num,unsigned char under) { char i=0; while(1) { if(num==1) return i; i++; i..

C# 시리얼통신 데이터 잘려서 읽히는 경우

안녕하세요. C# SerialPort 클래스를 이용해요 DataReceived 이벤트에 데이터를 읽을 때, 데이터 수신을 한 번에 못하는 경우가 있습니다. 예를 들어 MCU와 C#으로 UART 통신을 하는 경우, MCU에서 C#으로 12bytes를 보냅니다. 그러면 DataReceived에서 12bytes를 한 번에 수신하는 경우가 있고, 여러번에 나눠서 수신하는 경우가 있습니다. 이러한 이유는 RX에 신호가들어오면 Receive 이벤트가 발생합니다. 이벤트가 발생하고 처리를할때 수신버퍼에 데이터가 있는만큼 처리를 합니다.(BytesToRead()가 수신버퍼에 있는 바이트수를 보는 함수입니다) 그렇기 때문에 코드는 같더라도 BaudRate에 따라서 이벤트가발생했을때 12bytes가 모두 수신되는 경우도 ..

C# 예외처리 try,catch,finally

안녕하세요 오늘은 C# 예외처리에 대해 알아보겠습니다 예외처리란 프로그램을 작성한사람이 의도치않은 오류가 발생할때, 오류가 생기면 해결을 해주는 기능을 얘기합니다 예를들어 모든수는 0으로 나눌 수 없습니다. 1 2 3 4 5 6 7 static void Main() { int a = 0; Console.WriteLine(100/a); } cs 예외 발생: 'System.DivideByZeroException'(practice.exe) 처리되지 않은 'System.DivideByZeroException' 형식의 예외가 practice.exe에서 발생했습니다. 0으로 나누려 했습니다. 100을 0으로 나누려고 했기때문에 "System.DivideByZeroException"에러가 발생합니다. 저 메세지는 C..

C# this키워드

안녕하세요. 오늘은 C# this에 대해 알아보겠습니다 this는 객체 자기 자신을 지칭할 때 사용합니다. 객체 내부에서 자신의 필드나 메소드에 접근할때 사용합니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 namespace practice { class person { public string name; public person(string name) { this.name = name; } } static class Program { static void Main() { person ps = new person("nana"); Console.WriteLine(ps.name); } } } Colored by Color Scripter cs 5번..

C# 생성자

안녕하세요. 오늘은 C# 생성자에 대해 알아보겠습니다. 생성자란 객체를 만들 때, 객체안에 있는 변수의 값을 초기화 해주는것 입니다. 객체를 만들때 값을 초기화해주므로 편합니다. 생성자는 메소드 오버로딩 기능이 있어서 다양하게 생성이 가능합니다 만드는 규칙은 한정자와 클래스이름과 매개변수를 적어주면 됩니다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 class person { public string name; public string job; public int age; public person() { Console.WriteLine("생성자의 매개변수가 없습니다"); } public person(string _name, int _age) { n..

C# Format 메소드 사용하기

안녕하세요. 오늘은 C# Format메소드에 대해 알아보겠습니다. Format 메소드는 문자열 서식을 맞추는 메소드입니다. 문자열의 일정한 틀과 모양을 갖추는 것을 의미합니다. *왼쪽/오른쪽 맞춤 - 기본 1 2 string result = string.Format("A{0}D", "BC"); Console.WriteLine(result); cs 결과값 ABCD {0}에 BC를 넣고 문자열을 저장합니다. - 공간을 만들고 앞쪽부터 문자열을 채우고 삽입합니다 1 2 result = string.Format("A{0,-5}D", "BC"); Console.WriteLine(result); cs 결과값 ABC D -공간을 만들고 뒷쪽부터 문자열을 채우고 삽입합니다 1 2 result = string.Forma..