FW 심화 과정/[2] STM32심화실습

0727 C프로그래밍 기초 10~13강

천숭이 2022. 7. 27. 16:56

10강 - 비트연산

 

#include <stdio.h>

unsigned char RestBit(unsigned char dest_data, unsigned char bit_num)
{
	// 3번째 bit 0으로 결정 
	if(bit_num<8) dest_data = dest_data & ~(0x01 << bit_num);
	return dest_data;
}

unsigned char GetBit(unsigned char dest_data, unsigned char bit_num)
{
	unsigned char bit_state = 0;
	if (bit_num <8){
		bit_state = dest_data & (0x01 << bit_num);
		bit_state = bit_state >> bit_num;
	}
	return bit_state;
 } 

void main()
{
	unsigned char lamp_state = 0x7F;      // 8bit->1byte  0111 1111
	printf("%X -> ", lamp_state);
	lamp_state = RestBit(lamp_state, 3);  // 0111 0111
	printf("%X \n", lamp_state);
	
	// -----------------------------------
	int i;
	unsigned char bit_state;
	printf("%X -> ", lamp_state);
	for (i=0;i<8;i++)
	{
		bit_state = GetBit(lamp_state, 7-i);
		printf("%d", bit_state);
	}
	printf("\n");
}

 

 

 


11강 - 변수 선언

 

# 지역변수와 전역변수의 이름이 같다면 ?

- 전역변수보다 지역변수를 우선해서 처리한다

- 지역 변수와 전역 변수의 이름이 같으면 지역 변수를 먼저 처리

 

# extern

1,3,5 오류 문법

 

# static

- 보통 전역 변수 앞에 사용됨

 

 

 


13강 - 포인터

 

# 운영체제의 메모리 관리 방식

64비트 장점 : 동시 처리 능력이 좋음. RAM사용가능

단점 : 기본적인 메모리 사용량이 많음, 낮은 사양의 컴퓨터에 설치하면 손해임

결론 : 메모리를 비효율적으로 

 

 

# 16진법으로 메모리 형태 표시하기

'd1042 = 12'b0100_0001_0010이다. 

메모리에 8비트씩 저장되므로, 0000_0100(4)와 0001_0010(18)으로 쪼개서 메모리에 저장됨

 

# 포인터

- 일반 변수는 주소를 저장할 수 없어서 주소 접근이 불가능

- 하지만, 포인터형 변수는 주소 접근이 가능

 

# 포인터 선언 방법

자료형 * 변수 이름

 

short *ptr
short : 포인터가 가리키는 대상의 크기
ptr : 가리키는 주소를 담고 있음. 따라서 변수는 4byte로 크기 고정.
*ptr : short형이므로 메모리에서 4byte 차지
short birthday;
short *ptr;
ptr = &birthday;

 

short *ptr = &birthday;   // 포인터 변수를 선언하기 위해 사용하는 키워드
*ptr = 1042;   // 번지 지정 연산자. ptr포인터가 가리키는 대상에 가서 1042값을 대입하겠다

 

 

 

# ptr 와 *ptr의 차이

ptr : 포인터 변수의 값(가리키는 대상의 주소)

*ptr : 포인터가 가리키는 대상의 값이 변경

short *ptr;  // 포인터형으로 선언
ptr = (short *) 0x0000006C;  // 주소값 대입하기 위해서는 캐스팅 연산자로 포인터형으로 변환을 먼저 해야 한다
*ptr = 0x0412;     // 6C번지에 0x0412 값 대입

 

 

 

# 포인터를 사용해 간접 주소 방식으로 값을 대입하는 이유

모든 변수가 같은 함수에 선언되는 것은 아니기 때문

 

 

# const

- const 키워드를 이용해 피호출자에서 호출자로부터 전달받은 주소를 변경하는 실수를 방지

- 변경 불가한 값

 

 

 

 


# 문자열 선언 방법

#include <stdio.h>

void main()
{
    char data[6] = { 'h', 'a', 'p', 'p', 'y', 0 };
    char ment[] = "C programming~";  /* [ ] 에 15를 생략한 표현  */

    printf("%s\n", data);
    printf("%s\n", ment);
}