Página 1 de 1

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

MensagemEnviado: 28 Fev 2008 11:37
por HC908
Bom dia amigo algum compilador C no mercado aceita função recursivas?

MensagemEnviado: 28 Fev 2008 14:27
por xultz
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.

MensagemEnviado: 28 Fev 2008 14:29
por fabim
F18 tem um stack maior alguns bem maiores.

Fabim

MensagemEnviado: 28 Fev 2008 15:19
por tcpipchip
Mesmo em C, ele vai usar a PILHA do PIC ? Sera que nao administra a recursao ?

MensagemEnviado: 28 Fev 2008 16:24
por HC908
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.

MensagemEnviado: 28 Fev 2008 17:18
por Fábio Pereira
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+

MensagemEnviado: 28 Fev 2008 17:24
por fabim
o mikropascal cria 16 STACK na RAM.

FAbim

MensagemEnviado: 28 Fev 2008 19:22
por Fábio Pereira
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+

MensagemEnviado: 28 Fev 2008 22:06
por HC908
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.

MensagemEnviado: 28 Fev 2008 22:17
por HC908
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.

MensagemEnviado: 01 Mar 2008 08:29
por tcpipchip
Voce quer implementar a funcao FATORIAL classica com RECURSAO ?