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


# 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);
}
'FW 심화 과정 > [2] STM32심화실습' 카테고리의 다른 글
0729 C프로그래밍 기초 17~ (0) | 2022.07.29 |
---|---|
0728 C프로그래밍 기초 15~16강 (0) | 2022.07.28 |
0727 C프로그래밍 기초 14강 (0) | 2022.07.27 |
0726 C프로그래밍 기초 1~3강 (0) | 2022.07.26 |
0722 브레드 보드의 스위치, LED를 GPIO로 제어하기 (0) | 2022.07.25 |
0721 외부변수참조 / .h / CPU구조 / reg와argument / 슈도명령어 ~234 (0) | 2022.07.22 |