Página 1 de 1

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

MensagemEnviado: 30 Ago 2011 12:03
por a.rairan
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.

MensagemEnviado: 01 Set 2011 13:16
por proex
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?

.

MensagemEnviado: 05 Set 2011 11:15
por a.rairan
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.

MensagemEnviado: 05 Set 2011 18:51
por pbernardi
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?

MensagemEnviado: 05 Set 2011 21:51
por a.rairan
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

MensagemEnviado: 05 Set 2011 21:55
por a.rairan
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

MensagemEnviado: 11 Set 2011 20:52
por fanl
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.