그것이 어떻게 작동하는지 배우려면 위의 어느 것도 사용하지 않으려합니다. st에서 arm cross 컴파일러와 문서를 얻으십시오. 코딩을 시작하십시오. 이러한 칩은 일반적으로 프로그래밍하기가 쉽습니다. 이 문서는 레지스터가 어떤 비트를 수행하는지 알려줍니다.
이러한 라이브러리는 모두 이해 / 부담 / 작업을 제거하고 어플리케이션 프로그래밍 경험과 같은 API를 호출하는 것처럼 느끼도록하기위한 것입니다. 많은 사람들이 원하는 것입니다. 이러한 라이브러리에 대한 모든 소스를 사용하여 이해하는 데 도움이 될 수 있지만, 라이브러리에 익숙해지면 라이브러리에서 구멍과 문제, 때로는 매우 무서운 코드를 발견하게됩니다. 코드가 함께 던져져 일반적으로 작성되고 대략 한 칩에서 다른 칩으로 포팅되어 칩에없는 기능 등을 지원할 수 있습니다. 그리고 모두 오버 헤드가 너무 많습니다. 작업에 너무 많은 코드를 10 ~ 100 배 많이 사용하면 많은 코드가 최적화 될 수 있지만 왜 처음에 존재합니까?
자신이 사용하든 이러한 라이브러리 중 하나를 사용하든, 자신이하는 일에 익숙한 지, 이해가되는지, 칩 문서와 일치하는지 등을 확인하기 위해 사용하는 라이브러리의 소스를 계속 살펴 봐야합니다. 잘못되면 당신은 그 이유를 찾기 위해 당신의 것만 큼 많은 것을 파헤쳐 야 할 것입니다.
칩 문서도 완벽하지 않다는 점에 주목하십시오. 그것은 재미의 일부입니다.
베어 메탈 프로그래밍에 대한 토론에서 어셈블리가 나타나는 이유를 이해하지 못합니다. 아주 적은 조립으로 얻을 수 있습니다. 이러한 cortex-m 칩의 경우 기술적으로 부팅하려면 많은 양의 asm이 필요합니다.
.globl _start
_start:
.word 0x20001000
.word main
당신은 데이터 나 BS에 의존 할 수 없으며 최소한의 asm으로 main에서 돌아올 수 없습니다. 그러나 그것은 당신이 맨손으로 금속을 생산하는 데 필요한 모든 것입니다. 이제 인터럽트를 수행하려면 벡터 테이블에 더 많은 항목이 필요합니다. 더 많은 .word 줄. 더 많은 asm을 권장하지만 10 또는 20 줄 이상을 권장합니다.
이것은 일반적으로 내가 사용하는 모든 asm입니다.
.cpu cortex-m0
.thumb
.thumb_func
.global _start
_start:
stacktop: .word 0x20001000
.word reset
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.thumb_func
reset:
bl notmain
b hang
.thumb_func
hang: b .
.align
.thumb_func
.globl PUT16
PUT16:
strh r1,[r0]
bx lr
.thumb_func
.globl PUT32
PUT32:
str r1,[r0]
bx lr
.thumb_func
.globl GET32
GET32:
ldr r0,[r0]
bx lr
.thumb_func
.globl GET16
GET16:
ldrh r0,[r0]
bx lr
.thumb_func
.globl dummy
dummy:
bx lr
.end
그래, 그것은 cortex-m0이라고 말하지만 이것은 내 m4 코드의 실제 부트 스트랩입니다. 나는 이것을 thumb2가 아닌 thumb으로 선호합니다. 그리고이 코드를 한 cortex-m에서 다른 cortex-m으로 재사용하여 스택 포인터 주소를 필요에 따라 변경하므로 m0, m3 및 m4에서 작동합니다. 나는 아직 m7을 가지고 있지도 않고 많이 연구하지도 않았습니다.
fpu를 활성화하려면 특정 지침이 필요하므로 몇 줄의 asm이 더 필요할 수 있습니다. 그러나 요점은 저수준 프로그래밍과 asm을 혼동하지 않는다는 것입니다. C에는 칩을 구성하고 응용 프로그램을 작성하는 데 필요한 것이 있습니다. 당신이 이야기하는 라이브러리는 asm이 아닌 C로 작성되었으므로 asm을 사용할 필요는 없습니다.
내부 작업을 배우려면 자신의 코드를 작성하십시오. 이러한 라이브러리를 참조 용으로 사용하지 마십시오. 때로는 코드를 읽는 것보다 해킹하는 것이 더 쉬운 경우가 있습니다. (ST뿐만 아니라 모든 공급 업체도 있습니다. 공급 업체 중 하나에 코드 줄이있어서 인터뷰 질문으로 사용합니다. 여기에 게시하지 않을 것입니다).
ST는 확실히하지만 다른 공급 업체도 전력을 절약하고 칩의 섹션에 대해 클럭을 활성화하므로 LED를 깜박이려면 gpio 블록의 활성화 비트를 찾아서 나오는지 확인해야합니다. 리셋이 활성화 된 경우 활성화되지 않은 경우 클럭없이 GPIO 로직과 통신하면 결코 응답하지 않는 로직의 응답을 기다리는 동안 프로세서가 중단됩니다. 그들은 항상 이러한 기능에 대해 말하지 않습니다. 활성화되면 때로는 특정 주변 장치의 초기화 단계를 안내합니다. ST 문서는 꽤 좋습니다. 문서화에있어 상당히 나쁜 등급을받는 마이크로 칩에서 나온다면 문제가 없을 것입니다.
Libraries/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
또는Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
각각에 있습니다.