collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: STM32 - startup code e ld script  (Lida 8560 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
STM32 - startup code e ld script
« em: 25 de Fevereiro de 2014, 11:52 »
Olá,
Para não dizerem que só se falta em Arduinos ;)

Uma das principais razões pelas quais ainda não mudei definitivamente para stm32 e continuo com os AVR mega e agora xmega é o facto de me darem mais confiança relativamente a um ponto, não tenho que criar startup code e ld script. O que quero dizer com isto é que ainda não consegui perceber bem como criar o startup code e o ld script partindo do datasheet do componente, tenho sempre medo que haja algo que não esteja bem configurado e que venha a dar problemas.

A minha questão é, isto é algo relativo à ARM ou aos STM32 em particular? Têm alguma boa referencia que explique o processo de criar estes dois ficheiros?


StarRider

  • Visitante
Re: STM32 - startup code e ld script
« Responder #1 em: 25 de Fevereiro de 2014, 12:13 »
Boas metro,

Aleluia !!! :)

Qual é a toolchain que estás a usar ?

Tens basicamente 2 operações a ter em conta:
- Inicializar os clocks (ST dependente, mas a evoluir para CMSIS)
- Reservar espaço para o stack e o heap (ARM/Toolchain dependente)

Eu uso o Keil e os ficheiros de inicialização são automaticamente incluídos quando crias um projecto, depois
podes alterar os parâmetros (clocks, espaço do stack e do heap, etc) de uma forma "visual" sem ser necessário
escrever uma única linha de código.

Alias, a ultima verão do Keil permite configurar os STM32 totalmente somente com "cliques" do rato, podes mesmo
incluir funcionalidade USB, Sistema de ficheiros, rede (WEB server, FTP, etc), I2C, UART, etc, etc, sem uma única
linha de código ... muito bom mesmo, aconselho vivamente!!

Para quem usa outras toolchains, a ST disponibilza uma folha Excel onde podes configurar os clocks e a mesma
vai gerar o código num ficheiro, só tens que incluir esse ficheiro no teu projecto:


Procura por "STM32 clock configuration tool" no site ds ST, existe uma versão para cada core dos STM32.

Diz-me qual é a tua toolchain.

Abraços,
PA
« Última modificação: 25 de Fevereiro de 2014, 12:27 por StarRider »

Online KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.481
Re: STM32 - startup code e ld script
« Responder #2 em: 25 de Fevereiro de 2014, 12:32 »
"não tenho que criar startup code e ld script."

Creio que a maioria dos compiladores/linkers tem de suportar estas funcionalidades. De uma ou outra maneira os do AVR tambem tem de ter, de outro modo nao seria possivel por exemplo desenvolver bootloaders.

Estas opcoes dependem muito de plataforma.

Outras funcionalidades sao por exemplo escolher o modelo (de memoria) a usar, escolher as bibliotecas C a usar, inicializar funcionalidades do C (inicializacao de variaveis p.e. .. alocacao de stack/heap, etc.)

Normalmente os frameworks ou IDEs, tem ou criam esses ficheiros quando escolhes o target MCU, havendo necessidade depois de alterar so em situacoes "avancadas". (Por exemplo ao desenvolver uma aplicacao para trabalhar juntamente com um bootloader, é necessario dizer o endereco de memoria que o programa inicia)

Quantoa configuracoes de MCUs, nao sei como andam as coisas... nos MCUs mais actuais.. penso que existem muito poucas configuracoes a este nivel, pois os MCUs permitem depois configurar / alterar muita coisa por software.
Por exemplo, normalmente vem com "configuracao por software enable", deixando depois o codigo configurar.
Normalmente tambem todos iniciam com o oscilador interno, podem depois configurar para outro.


"como criar o startup code e o ld script partindo do datasheet do componente"
O mais importante neste caso é mesmo o "datasheet" do compilador / linker / bibliotecas de C / framework!
Porque é definido qual o formato desses ficheiros. Mas nao é suposto teres dos criar, pois sao criados automaticamente pelo IDE ou ja existem "default / templates".

Dica: Se estas a iniciar e te estas a preocupar com estes aspectos, é porque nao estas a seguir o caminho correcto. Segue a estrada principal! :)


Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: STM32 - startup code e ld script
« Responder #3 em: 25 de Fevereiro de 2014, 12:49 »
Qual é a toolchain que estás a usar ?
...
Diz-me qual é a tua toolchain.

Eu uso arm-gcc, mas já agora, a versão limitada do keil da para uso comercial?

Tens basicamente 2 operações a ter em conta:
- Inicializar os clocks (ST dependente, mas a evoluir para CMSIS)
- Reservar espaço para o stack e o heap (ARM/Toolchain dependente)

Para quem usa outras toolchains, a ST disponibilza uma folha Excel onde podes configurar os clocks e a mesma
vai gerar o código num ficheiro, só tens que incluir esse ficheiro no teu projecto:


Procura por "STM32 clock configuration tool" no site ds ST, existe uma versão para cada core dos STM32.

Vou ver isto :) A minha principal dificuldade tem sido perceber o que realmente necesito para funcionar.

"não tenho que criar startup code e ld script."

Creio que a maioria dos compiladores/linkers tem de suportar estas funcionalidades. De uma ou outra maneira os do AVR tambem tem de ter, de outro modo nao seria possivel por exemplo desenvolver bootloaders.

Mas por exemplo, usando o avr-gcc isto é transparente para mim, não é necessario estes ficheiros, embora acredite que internamente algo seja feito.

"como criar o startup code e o ld script partindo do datasheet do componente"
O mais importante neste caso é mesmo o "datasheet" do compilador / linker / bibliotecas de C / framework!
Porque é definido qual o formato desses ficheiros. Mas nao é suposto teres dos criar, pois sao criados automaticamente pelo IDE ou ja existem "default / templates".

Dica: Se estas a iniciar e te estas a preocupar com estes aspectos, é porque nao estas a seguir o caminho correcto. Segue a estrada principal! :)
A ST disponibiliza uns templates para vários IDE's e um deles que usa o arm-gcc é o template que tenho seguido. Embora tenha estado a usar os templates disponibilizados gostava de perceber melhor esta parte.

StarRider

  • Visitante
Re: STM32 - startup code e ld script
« Responder #4 em: 25 de Fevereiro de 2014, 12:53 »
Boas caro KammutierSpule,

Não existe essa noção de "bootloader" nos ARM (e em muitos outros cores por ai acima), a programação da flash
está a cargo do próprio MCU ... se bem que podemos considerar esta funcionalidade como um "bootaloader
residente" mas não se usa essa terminologia, pelo que não existem os condicionalismos de remapear o
"start-address" como acontece nos AVR.

Num ST é possível ao programa que está a ser executado programar partes da sua própria flash ... dá para fazer
uma coisas interessantes, desde emular uma eeprom até criar programas dinâmicos (longe de um FPGA mas na
mesma filosofia).

Da mesma forma, não existe a noção de "fuses" como nos AVRs para configurações da MCU, pelo que mesmo os
clocks podem ser alterados durante a execução de um programa, somente o stack e a heap são hardcoded.
Tudo o resto é somente a inicialização dos periféricos e DMA, um pouco como em qualquer outro MCU.

Abraços,
PA

Online KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.481
Re: STM32 - startup code e ld script
« Responder #5 em: 25 de Fevereiro de 2014, 13:08 »
Não existe essa noção de "bootloader" nos ARM (e em muitos outros cores por ai acima), a programação da flash
está a cargo do próprio MCU ...

Yaps, o que pretendia dizer era desenvolver (para usar) bootloaders, a aplicacao portanto, pois é necessario configurar outros start address e interrupt vectors address.

Citar
Da mesma forma, não existe a noção de "fuses" como nos AVRs para configurações da MCU, pelo que mesmo os
clocks podem ser alterados durante a execução de um programa, somente o stack e a heap são hardcoded.
Tudo o resto é somente a inicialização dos periféricos e DMA, um pouco como em qualquer outro MCU.

OKs esclarecido. Pois eu nunca tinha visto "fuses" em ARMs nos ficheiros de configurar.
Há "fuses" mas so podem ser configurados pelo debugger (exemplo: lock addresses, disable debug, disable read.. BOR?.. ) depende do MCU..

Offline jmiguelff

  • Mini Robot
  • *
  • Mensagens: 204
Re: STM32 - startup code e ld script
« Responder #6 em: 25 de Fevereiro de 2014, 17:24 »
É possível fazer um bootloader que permite o upload de código por porta série ou ethernet para um ARM?

StarRider

  • Visitante
Re: STM32 - startup code e ld script
« Responder #7 em: 25 de Fevereiro de 2014, 18:23 »
É possível fazer um bootloader que permite o upload de código por porta série ou ethernet para um ARM?

Boas,

Nos ARMs da ST (serie STM32 que temos falado neste tópico) existem várias formas de programar a flash
que podem ser divididas em 2 grupos:

-ICP (in-circuit programming)
Recorrendo ao JTAG ou SWD,  um pouco como o ISP dos AVR.
Recorrendo ao Controlador interno de programação da Flash (FPEC) que pode carregar a flash a partir de
qualquer umas das interfaces serie (USART, CAN, USB, I2C, SPI, etc.) ... o tal "bootloader" interno e que
é transparente.

-IAP (in-application programming)
É executado de dentro do próprio programa e pode carregar a Flash a partir de qualquer interface de
comunicação, como por exemplo: I/Os, USB, CAN, UART, I2C, SPI, Ethernet , SDcard, etc).

Na opção IAP o programa já deve estar a correr e ter uma opção para carregar a Flash como é óbvio sendo
que no caso da programação falhar o MCU vai possivelmente necessitar de ser programado pelo método ICP.

As opções ICP variam de serie para serie, ou seja, os STM32 sem USB não podem usar a mesma como é óbvio.

Abraços,
PA
« Última modificação: 26 de Fevereiro de 2014, 00:11 por StarRider »

Offline andElectrons

  • Mini Robot
  • *
  • Mensagens: 257
Re: STM32 - startup code e ld script
« Responder #8 em: 27 de Fevereiro de 2014, 16:15 »

Nos NXP - gosto especialmente deste pq têm alguns em formato DIP - também é possivel programar por UART. Em windows: http://www.flashmagictool.com/ em Linux procurem por lpcisp.


A alguem que se esteja a iniciar nos STM32 e que esteja habituado ao Eclipse aconselho a dar uma olhado no Attollic TrueStudio. A versão free está limitada a alguns KBs mas para os primeiros projectos isso não será problema.

Para os NXP vejam o lpcxpresso.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: STM32 - startup code e ld script
« Responder #9 em: 27 de Fevereiro de 2014, 17:29 »
Em windows para brincar com ARM's para mim nada melhor que o CoCoox, free, sem limites, suporta montes de arm's diferentes, e ainda tem exemplos, e é só instalar que funciona
Avr fanboy

StarRider

  • Visitante
Re: STM32 - startup code e ld script
« Responder #10 em: 27 de Fevereiro de 2014, 23:26 »
Boas,

Gosto particularmente dos Timers dos LPC18xx e LPC43xx ... quanto a mim muito mais versáteis que os dos STM32, outra
característica MUITO interessante dos LPC43xx e LPC18xx é o facto de terem as libs (ok, bibliotecas ;) ) dos periféricos em
ROM ... o que evita gastar Flash com o código das mesmas. Outro plus é terem PHY interno de USB HS e FS, poupa nos
complementes externos

Mas penso que os STM32 ganham nos restantes periféricos, mas é uma questão que acaba por ser pessoal.

Tenho vindo a usar os STM32, mas estou muito tentado em usar um LPC43xx num projecto que estou a trabalhar e que
era para usar um LEON.

Abraços,
PA