Voltei... IAR, C++ e Cortex-M0

Software e Hardware para linha ARM

Moderadores: 51, guest2003, Renie, gpenga

Voltei... IAR, C++ e Cortex-M0

Mensagempor a.rairan » 30 Ago 2011 12:03

Salve senhores!

Quem é da antiga me conhece... sou o André Rairan, usuário assíduo em 2006, na outra versão do fórum.

Seguinte, eu cresci e agora to nos ARMs, graças a deus to me livrando dos PICs... (os fanáticos, como eu já fui um dia, caem pra tras agora hahaha)

Fiz um curso de Cortex-M3, fiz outro de C++ (que linguagem fantástica!), já dei uma boa estudada na arquitetura e etc...
Consegui converser meu diretor que os Cortex-M são infinitamente melhores que os PICs 12F a 24F que utilizamos aqui e com os Cortex-M0 não tem nem mais o argumento de preço pra usar os Microsh*ts, temos todas as ferramentas aqui e é hora de começar.

C++ é um tesão! Quem gosta mesmo do que faz e não é fanático por C ou Assembly sabe do que to falando, bom demais, desenvolvimento muito mais rápido e seguro... então vamos de C++.


Ai vem meu problema, é novidade.
Estou fazendo uns testes simulando interrupções de UART no IAR.
Em C funcionou legal, bem completo o simulador por sinal.

Ai dei uma pesquisada pra ver como fazer em C++ e estou tomando isso como referencia:
http://www.eetimes.com/design/embedded/ ... upts-in-C-

Esse artigo fala de ARM7, os Cortex-M são vetorizados... E apesar de um pouco complexo para mim que não estou habituado com C++, entendi o conceito.

Criei minha classe uart, com a função membro statica "UART0_IRQHandler" (como vem no CMSIS) e no cstartup_M.s está igual, tentei com o cstartup_M.c e também nada.
Em C os dois startups funcionam, então o problema não é ai...

Criei outra função estática "testFunc" na classe uart e percebi que ela não é compilada se não for chamada em lugar nenhum do programa.
A interrupção não é chamada em lugar nenhum e sim pelo NVIC, então acho que o problema é por ai...


Ai depois dessa história toda pra mostrar que eu não quero nada pronto, que pesquisei e to tentando (porque eu simplesmente ignoro pessoas que não se esforçam), vêm as perguntas:


Alguém já programa ou programou em C++ usando os Cortex-M e IAR?
Alguém já tratou interrupções em C++ mesmo, sem "extern "C" ou algo do tipo?
As funções estáticas não deveriam ser compiladas mesmo sem serem chamadas? (as otimizações estão desligadas)
Como linkar uma função mesmo estática com o vetor de interrupção nesse caso?


Desculpa por escrever um monte... Mas estou de volta, com um pouco mais de conhecimento, vou tentar responder mais do que perguntar hahaha

Abraço a todos.
André "Away" Rairan
a.rairan
Byte
 
Mensagens: 192
Registrado em: 11 Out 2006 18:53
Localização: São Caetano do Sul - SP - Brasil

Mensagempor proex » 01 Set 2011 13:16

Já que ninguém respondeu......

A maioria do pessoal aqui usa Keil. Por isso vão ser raras as respostas sobre IAR.

Respondendo suas perguntas:

1-Alguém já programa ou programou em C++ usando os Cortex-M e IAR?

Eu programo em C, para Cortex mas eu uso Keil para isso.


2-Alguém já tratou interrupções em C++ mesmo, sem "extern "C" ou algo do tipo?

Eu nunca uso extern C.

3-As funções estáticas não deveriam ser compiladas mesmo sem serem chamadas? (as otimizações estão desligadas)

Que eu saiba, somente funçoes usadas são compiladas.

Conhece a função "sprintf" ?
Ela fica numa biblioteca onde existem centenas de outras funçoes.

Quando vc inclui essa biblioteca e só usa a funçao sprintf, somente ela será compilada.

Senão for assim, todas as outras funcoes presentes nessa biblioteca tambem seriam compiladas , ocupando memoria a toa.

3-Como linkar uma função mesmo estática com o vetor de interrupção nesse caso?

Vc declarou essa função para que todo o programa a reconheça?

Perguntinha tosca: Pra que vc ta usando funçao estatica?

.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor a.rairan » 05 Set 2011 11:15

Valeu pela resposta proex.

Quanto a compilar só as funções em uso eu entendo, só tinha dúvida sobre as funções estáticas, mas também só são compiladas se forem utilizadas.

Quanto a usar funções estáticas, é o único tipo de função que posso usar em C++, pois elas têm um endereço fixo na memória, não dependendo da instancia do objeto.

Consegui resolver o "problema" com ajuda do support da IAR, bem simples por sinal... Eu que não estou familiarizado com C++ e to apanhando aqui rs.


Resolução:
Para linkar só usando "extern C" ou definindo os vetores num arquivo .cpp e definindo usando o operador de resolução de escopo ( :: ).


Tem alguém no fórum que programa em C++, mesmo se usando o Keil?
Comecei a estudar C++ agora e queria trocar idéias...

Abraço.
André "Away" Rairan
a.rairan
Byte
 
Mensagens: 192
Registrado em: 11 Out 2006 18:53
Localização: São Caetano do Sul - SP - Brasil

Mensagempor pbernardi » 05 Set 2011 18:51

Alá André,

Tempo hein? Ressucitou? :D

Bom, C++ é um tanto quanto raro em se achar em uC/uP, pois geralmente consome mais memória e stack em relação ao C. E, por ser mais abstrata, muitos não gostam de não saber *exatamente* o que está acontecedo no seu uC/uP.

Para achar respostas de C++, acho que o melhor é procurar em fórums mais dedicados a programação de alto nível, mas então você vai achar poucas informações sobre sua aplicação em sistemas embarcados... difícil, não?
But to us there is but one God, plus or minus one - Corinthians 8:6±2. (xkcd.com)
pbernardi
Word
 
Mensagens: 707
Registrado em: 12 Out 2006 19:01
Localização: Curitiba-PR

Mensagempor a.rairan » 05 Set 2011 21:51

Pois é, pintam as dúvidas eu recorro aos gurus! hahaha

Então, essa questão de C gastar mais de C++ e etc, é beeeem relativa...
Eu era um dos que defendia isso. Morei na Austrália por 6 meses, voce procura emprego em embarcados:
70% = C++
20% = DSP
10% = resto, vi duas vagas para controladores 8/16 bits em C/Assembly.

Depois disso comecei a pesquisar, lá fora geral usa C++... e não tem porque não usar! C++ é muito mais "divertido" de programar, e não gera overhead com um bom compilador e não usando os recursos caros do C++. Mas ai já abre outra discussão do tipo: Assembly melhor que C!?

Quando programávamos com 4K de flash, 256 B de RAM, paginado e bla bla bla era uma discussão válida, hoje um chip de 64K custa quanto? 50 cents a mais do que um de 32K? E o time to market? E o tempo reduzido de debugar?

Realmente não vejo motivo para não usar C++ a não ser a quebra de paradigma. Voltar a estudar. Não conseguir fazer tarefas simples como um interrupt handler e etc... Mas já passamos por isso quando aprendemos Assembly (para os mais antigos) e depois mudamos para o C e assim tem que ser, do jeito que evolui, a gente morre se não correr.

E não sei voce, mas eu gosto de estudar coisa nova, gosto disso!
E graças a deus, adeus PIC! hahaha

Abraço ai
André "Away" Rairan
a.rairan
Byte
 
Mensagens: 192
Registrado em: 11 Out 2006 18:53
Localização: São Caetano do Sul - SP - Brasil

Mensagempor a.rairan » 05 Set 2011 21:55

Falei demais e equeci de comentar.

Arquitetando bem o software, voce não fica com mais controle do que está acontecendo sabendo que somente aquela classe faz aquilo e deriva da outra que faz aquilo outro...
Não fica aquele monte de variável global pra tudo que é lado e todo mundo podendo alterar.

Eu estudei pouco ainda, mas achei fantástico!

Vamos trocando idéias...

Abraço
André "Away" Rairan
a.rairan
Byte
 
Mensagens: 192
Registrado em: 11 Out 2006 18:53
Localização: São Caetano do Sul - SP - Brasil

Mensagempor fanl » 11 Set 2011 20:52

Parbéns pela sua migração, PICS são um saco mesmo.

A minha dica, a respeito de cortex, é: Use as bibliotecas da CooCox.
http://selivre.wordpress.com/2011/08/20 ... mbarcados/

Boa sorte.
Att.
fanl
Bit
 
Mensagens: 46
Registrado em: 02 Out 2009 00:26


Voltar para ARM

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x