Compilador C pra pic q aceite funções recursivas, tem?

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Compilador C pra pic q aceite funções recursivas, tem?

Mensagempor HC908 » 28 Fev 2008 11:37

Bom dia amigo algum compilador C no mercado aceita função recursivas?
HC908
Byte
 
Mensagens: 248
Registrado em: 26 Mar 2007 09:55

Mensagempor xultz » 28 Fev 2008 14:27

O problema do PIC (um dos problemas, na verdade) é que ele tem um stack de 8 níveis apenas. E cada call (ou chamada de função em C) enfia um ponteiro no stack. E o datasheet deixa claro que um estouro no stack leva o PIC a perder ponteiros, e o firmware crasha. E que é responsabilidade do programador não estourar o stack. Resultado: funções recursivas são praticamente impossíveis em PIC. Tente outra abordagem.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor fabim » 28 Fev 2008 14:29

F18 tem um stack maior alguns bem maiores.

Fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor tcpipchip » 28 Fev 2008 15:19

Mesmo em C, ele vai usar a PILHA do PIC ? Sera que nao administra a recursao ?
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor HC908 » 28 Fev 2008 16:24

acho q é limitação do compilador mesmo, pois da pra organizar usando a propria memoria ram.Tem outros MCU no mercado com quantidade da pilha baixa e compilador consegue suplir usando a memoria ram. + fazer o q? será q o da hitech acxeita? ou da IAR? vou baixar para testar.
HC908
Byte
 
Mensagens: 248
Registrado em: 26 Mar 2007 09:55

Mensagempor Fábio Pereira » 28 Fev 2008 17:18

Os PICs 18 têm um stack de 31 níveis, mas ainda assim, este não é o único problema.

Na verdade, o grande problema dos PICs é o fato de não permitirem guardar dados na pilha (mesmo porque a pilha é implementada apenas em hardware).

Por definição, C é uma linguagem que utiliza muito a pilha: variáveis locais (assim como alguns parâmetros de função) devem (ou deveriam) ser armazenadas na pilha. Como isso não é possível nos PICs, os compiladores têm de fazer malabarismos.

O CCS costuma utilizar uma área de RAM como memória de rascunho, mas a solução ideal seria utilizar uma pilha. Isto até poderia ser implementado utilizando o modo de endereçamento indireto (claro que não seria tão eficiente quando possuir uma pilha real).

Não sei ao certo se outros compiladores implementam pilhas de software ou outros artifícios que permitam recursão, mas me parece que o IAR o faz.

T+
Fábio Pereira
embeddedsystems.io
Avatar do usuário
Fábio Pereira
Word
 
Mensagens: 674
Registrado em: 16 Out 2006 09:07
Localização: Kitchener, ON

Mensagempor fabim » 28 Fev 2008 17:24

o mikropascal cria 16 STACK na RAM.

FAbim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Fábio Pereira » 28 Fev 2008 19:22

fabim escreveu:o mikropascal cria 16 STACK na RAM.

FAbim


Não conheço este compilador, mas acho difícil trabalhar com 16 pilhas em um PIC16 com no máximo 368 bytes de RAM divididos em quatro bancos não contíguos.

Neste caso, cada pilha estaria limitada a a poucas (bem poucas) dezenas de bytes.

Acho que a questão aqui é outra: será que o autor do tópico (HC908) realmente precisa de recursão? Quem sabe não seja possível implementar o mesmo algoritmo sem recursão ...

T+
Fábio Pereira
embeddedsystems.io
Avatar do usuário
Fábio Pereira
Word
 
Mensagens: 674
Registrado em: 16 Out 2006 09:07
Localização: Kitchener, ON

Mensagempor HC908 » 28 Fev 2008 22:06

alou fabio pereira tud0o bom ? tenho todos os seus livros alias muito bons. o melhor de todos é o PIC programação em C. O meu algoritmo utilizar chamada recursiva( rotina utilizada no arm7 - projeto antigo) + apareceu o PIC18F45J10 com preço bem legal( $2,00) dai converti toda o codigo no ARM7 para o PIC . Consegue converter 90% + não foi possivel devido ele não aceita recursividade. + resolvi de outra forma, ou seja, refiz o programa sem recursividade e agora esta com 100% perfeito. Dai ficou a curiosidade , sacou? estou baixando o IAR pra testar.
HC908
Byte
 
Mensagens: 248
Registrado em: 26 Mar 2007 09:55

Mensagempor HC908 » 28 Fev 2008 22:17

O dsPIC aceita recursividade, testei no compilador MicroC for dsPIC. Ja no compilador CCS não aceita. O IAR ACEITA FUNÇÔES RECURSIVAS NOS PIC DE 8BITS. ISSO MESMO ELE ACEITA FUNÇÕES RECURSIVASSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS. Limitação mesmo do compilador. claro q arquitetura não favorece isto + aceita normal. Coloquei minha função antiga e ele compilou normal e funcionou conforme o esperado.
HC908
Byte
 
Mensagens: 248
Registrado em: 26 Mar 2007 09:55

Mensagempor tcpipchip » 01 Mar 2008 08:29

Voce quer implementar a funcao FATORIAL classica com RECURSAO ?
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!


Voltar para PIC

Quem está online

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

x