Mover a programação incorporada do Keil para o Linux

9

Atualmente, estou usando o Keil para desenvolver uma placa de descoberta STM32. Meu projeto está quase concluído e eu gostaria de mudar para um ambiente de construção baseado em Linux. Eu tenho usado a ferramenta de piscamento pré-configurada e os drivers STLink do Windows para exibir a placa e obtive a exportação de um arquivo bin, que consegui exibir na minha máquina Linux usando o qSTLink2 . Por enquanto, tudo bem.

Agora, estou preso em mudar o processo de construção de todo o projeto. Especificamente:

Como portar meu .uvproj para um makefile, levando em consideração coisas como o arquivo de inicialização 'startup_stm32l1xx_md.s'?

Lg102
fonte
Não usei um STM32 em particular em um ambiente de construção Linux GCC, mas você provavelmente encontrará que o GCC precisa de um arquivo de inicialização diferente. Talvez seja melhor encontrar um projeto simples que já esteja funcionando e adicionar seu código a ele.
precisa saber é o seguinte
Da maneira mais difícil, sem dúvida.
Ignacio Vazquez-Abrams
Posso usar o arquivo .o atual que o Keil gerou usando o MDK-ARM, ignorar a compilação desse arquivo por enquanto e vinculá-lo estaticamente?
Lg102
Como PeterJ já escreveu. Ele usará um arquivo de inicialização diferente com rótulos diferentes e semânticas diferentes. Não deve haver maneira de manter o arquivo Keil startup_stm32l1xx_md.o. Você não tem a fonte startup_stm32l1xx_md.s?
harper
Sim, mas parece orientado no MDK-ARM (ou seja, o que o cabeçalho afirma). Eu o substituí por outro . Não sei ao certo o que a distinção entre média e alta densidade implica.
Lg102

Respostas:

11

Entendi. Pensei em compartilhar meus resultados para que outros possam usá-lo. Agradeço a todos pelo seu tempo.


Usei essa cadeia de ferramentas do ARM para criar meu projeto e a biblioteca texane / stlink , que acompanha a ./st-flashferramenta, para exibir o binário no meu STM32L1. Enquanto o texane / stlink vem com o GDB, eu descobri que poderia fazer o processo de construção + piscar sem ele.

Meu Makefile acabou assim. Não é muito bonito ou abstrato, mas faz o trabalho.

all:
    arm-none-eabi-gcc -T stm32l1xx.ld -mthumb -mcpu=cortex-m3 -D STM32L1XX_MD -D USE_STDPERIPH_DRIVER startup_stm32l1xx_md.s system_stm32l1xx.c main.c [ sources ] -lm --specs=nosys.specs -o Project.elf

No qual:

  • arm-none-eabi-gcc
    A cadeia de ferramentas ARM
  • -T stm32l1xx.ld
    O documento vinculador
  • -mthumb -mcpu=cortex-m3
    Diga ao GCC que é para um M3
  • -D STM32L1XX_MD -D USE_STDPERIPH_DRIVER
    Define para o driver periférico padrão
  • startup_stm32l1xx_md.s
    Documento de inicialização orientado ao GCC.
  • system_stm32l1xx.c main.c [ sources ]
    Lista dos meus arquivos de origem
  • -lm
    Para Math.h( L ib M ath)
  • --specs=nosys.specs
    Não use chamadas de sistemas como _exit.
  • -o Project.elf
    Nome da saída
Lg102
fonte
1
De onde vem o stm32l1xx.ldarquivo?
rage
3

Existe uma cadeia de ferramentas Gnu ARM (arm-none-eabi), e supostamente o openOCD funciona com o gdb (embora eu não tenha sido capaz de fazer isso acontecer no Win7 - o openOCD se conecta a uma placa STM32F4disco OK, mas o gdb tem problemas para se conectar ao openOCD )

Faça algumas escavações por aqui e você encontrará links para a cadeia de ferramentas, o openOCD e os exemplos de projetos que incluem a fonte de inicialização.

Markt
fonte