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

0803 NVIC, BUS Interfaces

- 밑 3버스가 sram과 연결됨 int tmp = *(int *)0x22000000; -> 2200만 번지에서 네바이트를 읽어서 tmp에 대입 위 구문 실행하면 data address bus 실행됨. 이 값이 bus matrix로 들어감. bus matrix 거쳐서 주소가 system bus로 들어감. 8비트에서 1비트만 뽑아내서 data icode P.27 *** Atomic *** rSFR의 끝 두비트는 11로 변경 -> 3 하지만, 인터럽트 발생시점에 따라서 3이 되지 않을 수도 있음 INTERRUPT는 해당 명령어(ORR) 끝나고 실행됨. 하지만 ISR 이 무시됨 따라서 결과는 10 INTERRUPT MASKING DISABLE 이므로 중간에 ISR발생해도 이동하지 않음 실행이 완료된 후 INT..

[C] 유용한 함수작성

- 문자열 길이 구하는 함수 작성하기 int GetStringLength(char data[]) { int count = 0; /* 0이 나올 때까지 문자의 개수를 더한다 */ while (data[count]) count++; /* while(data[count] != 0) count++; 과 동일 */ /* 문자열의 길이를 반환한다 */ return count; } #include /* temp 변수를 이용하여 a와 b의 값을 서로 바꿈 */ void Swap(int *pa, int *pb) { int temp = *pa; /* *pa(start) = 96, *pb(end) = 5 */ *pa = *pb; /* *pa(start) = 5, *pb(end) = 5 */ *pb = temp; /* *pa..

0728 C프로그래밍 기초 15~16강

15강 - 배열과 포인터 char data[4]; char *p = &data[0]; // 배열 표기법을 포인터 표기법으로 변경 따라서, 배열의 이름은 배열의 시작주소다. # 배열과 포인터의 합체 char *p1부터 *p100까지 사용하고 싶은 경우 작성방법 char *p[N]; // -> *p[0] ~ *p[N-1] 16강 - 메모리/프로세스 # 프로그램과 프로세스 # 메모리 할당 데이터를 저장할 공간을 적정하게 나눈는 할당 작업 # 정적 메모리 할당 - 컴파일러가 소스 코드를 기계어로 번역하는 시점에 변수 크기에 맞게 메모리를 할당하는 것 - 수정이 필요하면 소스코드를 수정하고 다시 컴파일 해야함 - 프로그램이 실행될 때 메모리의 위치가 결정됨 - 전역 변수 # 변수가 메모리에서 유지되는 시간 전역변..

0727 C프로그래밍 기초 14강

# 표준 입력 함수 입력 버퍼는 특정 키를 누를 때가지 사용자 입력을 임시로 저장. 따라서 남아있던 글자가 나옴으로써 원하지 않는 결과가 나올 수 있음 # rewind rewind 함수를 이용해 버퍼를 청소할 수 있다 # getchar 키보드로부터 문자 하나를 입력받는 표준 입력 함수 문자 한 개를 입력 받더라도 enter키를 눌러야만 작업이 완료됨 # 해결 방법1 엔터키를 한 번 더 호출해 enter키 값을 제거 # 해결 방법2 rewind 함수를 사용해 버퍼내에 남아있는 문자 제거 #include void main() { int input_data; input_data = getchar(); printf("input : %c \n", input_data); // 첫글자만 출력됨 rewind(stdin..