Há algumas coisas que não entendo no processo de inicialização do microcontrolador STM32F4.
Meu entendimento é o seguinte:
- As inicializações do ARM Cortex-M4 esperam que o valor de inicialização do ponteiro da pilha e os vetores de interrupção sejam ativados
0x00000000 + SCB->VTOR
, ao passo queSCB->VTOR
são limpos na redefinição. - Não há memória nesse local. A memória flash começa em
0x08000000
, SRAM em0x20000000
. - Para possibilitar a inicialização, o µC pode mapear o intervalo de memória flash ou SRAM para
0x00000000
. O intervalo de memória a ser mapeado é definido pelo estado dos pinos de inicialização.
Minhas perguntas:
Por que o manual de referência do STM32F4 está dizendo na página 69 que
Quando o dispositivo inicializa da SRAM, no código de inicialização do aplicativo, é necessário realocar a tabela de vetores na SRAM usando a tabela de exceção NVIC e o registro de deslocamento.
? No meu ponto de vista, isso não é necessário, pois toda a região da memória é alias. Curiosamente, isso não parece ser necessário quando a região do flash é remapeada para o
0x0
espaço.O único uso para inicializar a partir da SRAM, posso pensar se é para reduzir os ciclos de gravação no flash durante o desenvolvimento. Antes de liberar o µC da redefinição, grave o programa na SRAM usando o depurador e, em seguida, inicialize a partir daí. No entanto, como você tem acesso ao depurador, não haveria restrições de onde inicializar de qualquer maneira. Então, por que ter esse recurso?
O fato de a posição de inicialização ser derivada de pinos indica (pelo menos na minha opinião) que esse recurso deve ser usado não durante o desenvolvimento, mas na operação final. E na operação final, a SRAM é clara no momento da inicialização. Portanto, não faz sentido inicializar a partir da SRAM.