맘스터치보단파파이스 2024. 4. 23. 14:09

INPUT Frequency --> HSE --> /4 *100 /2 (*PLL)  -->peripherial

핀 번호 설정을 통해 생긴 함수

 

RCC Default 값 : 내부 CLOCK

 

rm p.38
rm p.102
rm p.117
rm p.157

 

rm p.157
기본값이 0 이라서 굳이 안해줘도 된다.

 

rm p.158

DEFAULT = 0 이라서 0 설정을 쓰려는 애들은 건들이지 않아도 된다.

 

rm p.157

INPUT의 MODER도 INPUT MODE는 00 이라서 건들이지 않아도 된다.

 

rm p.159

GPIO_ READ

0번 핀 일 떈 되는데 10번 핀 일 떈 ?

if 문 안의 마스킹 안의 방식은 반드시 0을 체크할 수 밖에 없다.

 

이해하기

DEBUG

컴파일, 링크가 하는 일이 뭘까?

부팅 절차

반도체 SOC  쪽이나 펌웨어쪽은 이 부을 이해해야 한다.

 

Flash Memory에 어떻게 들어갈지 보는곳.

.isr_vector 부터 차근차근 다 들어간다.

>FLASH로 가라

rodata (read only data) >flash로 가라

HEAP, STACK

제일 꼭대기 : stack의 시작주소 --> 위에서부터 아래로

0번지

Entry Point : 0번지. = start up 코드

0번지

.text : 실행코드 ==> FLASH

변수, 전역변수 - data (초기화 o), (bss 초기화 x) ==> RAM

실행코드가 다 다운로드가 됐다면 --> 먼저 실행하는거 : start up code // 어셈블리어로 되어있다.

제일 먼저 시작되는 언어.

스크립터에 다 선언되어 있다.

startup~~~~_s
stm32~~~flash.ld
system_stm32f4xx.c 위치

 

startup.c

==> DATA : FLASH --> SRAM

 

startup.c

==>BSS : 세팅된 값이 없으니 0으로 초기화

그러고 나서 bl main : main을 call 한다.

main 이 끝나면 bx lr : return 한다는 말

 

vector table 정의

startup 코드 : 1. FPU, EXRAM(외부메모리), Vector 초기화 2. .data section Flash -> Ram copy 3. .bss section 영역을 0으로 초기화. 4. main 함수 call

br

anch로 뛰어서 start code --> 실행코드 실행

모든 C언어는 이렇게 동작한다.

스타트업 코드, 부트로더 코드 작성 가능.

부트로더 

 

아두이노 : 시리얼 통신으로 데이터를 부트로더를 받는다. 

 

Startup 과 LinkerScripter를 같이 봐야한다.

링커 스크립터 : 어느 부분에 어느 코드를 넣을까 ? 실행코드가 RAM, Flash 어디로 갈까? 

.text, .data .bss 이라는 세션은 C,  ARM  등등 공통으로 쓰인다.

 

*(.text) 이런애들은 다 FLASH 로 가라.

READ ONLY는 FLASH로 가라.

 

제조사들마다 다 다르다.

 

.data 초기화 값이 있는 전역변수. --> FLASH,-> RAM

.bss 초기화 되어있지 않은 전역변수 --> RAM 으로 들어가라.

 

.bss 영역이 0으로 초기화 

인터럽트 벡터 테이블

-------------------------------------LowLevel------------------------------------