MATRIZ

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

MATRIZ

Mensagempor rebelk » 03 Dez 2007 10:51

estou programando em c ccs e me deparei com um problama .

fiz uma matriz com mais de 255 elementos , só que da um erro

alguem sabe porque acontece esso , e qual o meio de con tornar isso?

const byte VALOR_RESET [300]={
50,
50, // VALORES DE RESET DAS VARIAVEIS
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
.
.
.
} ;
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor LeandroPIC » 03 Dez 2007 11:25

É por que o CCS usa a memoria RAM para fazer essas constantes....!!!!


VC vai ter que usar um PIC que tenha mais de 300 bytes de RAM.....!!!!

Ou mudar de compilador....!!!

A segunda opção é menor, porque dependendo do seu programa vai ser priciso muita memoria RAM.


Hi-tech -> este compiador faz suas tabelas ma memoria FLASH, o que para sua aplicação seria o correto...!!!!!
Avatar do usuário
LeandroPIC
Byte
 
Mensagens: 163
Registrado em: 06 Jul 2007 12:19

Mensagempor rebelk » 03 Dez 2007 12:35

eu não estou ultilizando a ram para esta matriz , é uma matriz de dados constantes .
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Re: MATRIZ

Mensagempor Rodrigo_P_A » 03 Dez 2007 13:46

e se vc fizer:

#rom char address = {list}

como diz no manual do CCS ?
---
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2237
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Mensagempor rebelk » 03 Dez 2007 14:11

mas assim não é uma matriz , como eu vou poder fazer

for( V=0;V<300; v++ )
{
dado=matriz[V];
}
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor Rodrigo_P_A » 03 Dez 2007 14:24

xiii, num é isso não, eu já vi essa discussão aqui no forum, acho que tem a ver com limitação do compilador ou do pic mesmo, no manual do CCS diz que ele coloca as constantes na ROM sim, agora tem que ver porque ele num deixa passar de 256....

eu testei aqui, qdo vc tenta colocar uma matriz maior que 256 no PIC16f648 por exemplo, dá pau, ele diz que a matriz é muito longa
---
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2237
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Mensagempor rebelk » 03 Dez 2007 15:12

é sisso mesmo!!!!!!!!!
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor ze » 03 Dez 2007 15:16

Hitech C +=1 !
Nele pode colocar matriz > 256. O compilador se vira!
como sugestão mande ele gerar um .asm (matriz<=256) e avalie o cód.
se quiser compilo, no Hitech e posto o .asm para comparar.
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor rebelk » 03 Dez 2007 15:59

lellis obrigado , mas o meu asm para pic é muito fraco e não vai adiantar , so gostaria de saber se existe este possibilidade de criar uma MAT > que 256 posçoes em C no CCS , mas obrigado pela ajuda !
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor fabim » 03 Dez 2007 16:33

bom pascal é no maximo 255..

Eu faço o seguinte.
Array 1 256.
array 2 213.

If (ref<= 255) then
begin
case ref of
begin //array 1
x
x
x
x
x
x
x
x
x
x
x
end;
end
else if ref>= 255 then
begin
case ref of
begin // array 2
x
x
x
x
x
x
end;
end;
existem outras formas de fazer isto, tendo o valor de ref para buscar outro valor em uma matriz, é so montar uma maquina de estados para escolher qual tabela vai ser retirado o valor..

no programa final a diferença de tempo de execução vai ser muito pouca..

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 rebelk » 03 Dez 2007 17:15

boa fabim , vai ser assim mesmo!
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor LeandroPIC » 05 Dez 2007 11:58

rebelk escreveu:eu não estou ultilizando a ram para esta matriz , é uma matriz de dados constantes .


VC não mais o compilador tá....

abra o arquivo .lst e comprove vc mesmo, já fiz o teste.....


não inporta se e constante ou variavel, o CCS sempre usa a ram para matrizes, ponteiros, variaveis normais,estrutura,unioes....

CCS é uma BOMBA....!!!!!
Avatar do usuário
LeandroPIC
Byte
 
Mensagens: 163
Registrado em: 06 Jul 2007 12:19

Mensagempor rebelk » 07 Dez 2007 14:41

interessante , pois constant não é criado na rom , ou não ?
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor Maurício » 07 Dez 2007 16:20

Não é que os compiladores sejam ruins, não. Eu acredito que eles usem a RAM interna, porque o acesso nessa área é mais rápido.
Não sei com relação ao PIC, mas, no 8051, o endereçamento na flash é de 16 bits, e na RAM é de 8 bits.

[]'s
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor Sergio38br » 10 Dez 2007 07:02

Bom dia, pelo que experimentei nos compiladores hitech, MikroC vai depender muito do tipo de PIC utilizado, se for da linha 16F fora os truque internos ao compilador, vai ser gerado uma instrução "retlw", se for utilizado os da linha 18F vai ser utilizado o tablat. isto para matrizes fixas. retlw até 256 e tablat mais que 256, não infelizmente medi o limite superior.

Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Próximo

Voltar para PIC

Quem está online

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

cron

x