Página 1 de 2
MATRIZ

Enviado:
03 Dez 2007 10:51
por rebelk
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,
.
.
.
} ;

Enviado:
03 Dez 2007 11:25
por LeandroPIC
É 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...!!!!!

Enviado:
03 Dez 2007 12:35
por rebelk
eu não estou ultilizando a ram para esta matriz , é uma matriz de dados constantes .
Re: MATRIZ

Enviado:
03 Dez 2007 13:46
por Rodrigo_P_A
e se vc fizer:
#rom char address = {list}
como diz no manual do CCS ?

Enviado:
03 Dez 2007 14:11
por rebelk
mas assim não é uma matriz , como eu vou poder fazer
for( V=0;V<300; v++ )
{
dado=matriz[V];
}

Enviado:
03 Dez 2007 14:24
por Rodrigo_P_A
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

Enviado:
03 Dez 2007 15:12
por rebelk
é sisso mesmo!!!!!!!!!

Enviado:
03 Dez 2007 15:16
por ze
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.

Enviado:
03 Dez 2007 15:59
por rebelk
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 !

Enviado:
03 Dez 2007 16:33
por fabim
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

Enviado:
03 Dez 2007 17:15
por rebelk
boa fabim , vai ser assim mesmo!

Enviado:
05 Dez 2007 11:58
por LeandroPIC
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....!!!!!

Enviado:
07 Dez 2007 14:41
por rebelk
interessante , pois constant não é criado na rom , ou não ?

Enviado:
07 Dez 2007 16:20
por Maurício
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

Enviado:
10 Dez 2007 07:02
por Sergio38br
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