Tabelas na flash

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Tabelas na flash

Mensagempor lafourcade » 03 Jan 2008 08:19

Alguém sabe como eu faço para determinar o end. de algum dado que eu escrevo na flash usando o hitech?
por exemplo:
unsigned char const teste[4] = {0,1,2,3}; Como eu determino que estes valores vão ser escritos no end. 0x1FFA?
Eu tinha pensado em algo assim:
unsigned char const teste[4] @0x1FFA = {0,1,2,3};
mas o hitech não aceita.
Alguém pode me ajudar?
lafourcade
Byte
 
Mensagens: 123
Registrado em: 20 Out 2006 06:40

Mensagempor Maia » 03 Jan 2008 08:37

Há algum tempo eu fiz coisa parecida assim:

Código: Selecionar todos
unsigned char DADOS @ 0x66;   // Endereço inicial da RAM onde fica armazenada palavra
unsigned char *PP;

// Transf. dados para ram
   PP = &DADOS;
   for (I = 0; I < 0x0a; I++)   // 10 caracteres
   {
     *PP = MENS1[I];
     PP++;
   }


Não sei se é a forma correta de se fazer, mas funcionou.
Abraços,
Maia
Avatar do usuário
Maia
Byte
 
Mensagens: 348
Registrado em: 15 Out 2006 16:25
Localização: Rio de Janeiro

Mensagempor fabim » 03 Jan 2008 09:11

maia. amproveitando o topico, e como nunca precisei usar..

Como e pra que serve ponteiros????

em pascal.
var myvar : ^word;


myvar^ := 5;

tem como você me ispinicar isso? tentei usar pra entender como funciona mais nun entendi.

abraços
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 andre_luis » 03 Jan 2008 10:31

São especialmente úteis quando se trabalha com variáveis de tamnho variável.
Ou quando se deseja executar rotinas, usando o endereço das mesmas como argumento.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor lafourcade » 03 Jan 2008 12:07

e ae, Maia!
Obrigado pela atenção!

Desta forma eu consigo fazer:
unsigned char const DADOS[4] @ 0x1FFA;

O problema é que eu não consigo atribuir valores na criação.
Tipo: unsigned char const DADOS[4] @ 0x1FFA = {0,1,2,3};

para usar como uma tabela, entendeu?
lafourcade
Byte
 
Mensagens: 123
Registrado em: 20 Out 2006 06:40

Mensagempor Maia » 03 Jan 2008 12:07

Dá uma estuda nesse documento:

http://home.netcom.com/~tjensen/ptr/pointers.pdf

Ele é bem explicativo, mas se não ajudar muito fala.
Abraços,
Maia
Avatar do usuário
Maia
Byte
 
Mensagens: 348
Registrado em: 15 Out 2006 16:25
Localização: Rio de Janeiro

Mensagempor fabim » 03 Jan 2008 12:30

vamu ve se eu entendi bem..
Mais em pascal rs.
var b : array[0..9] of byte
j : ^byte;

begin
j := @b(1);
(*o endereço j é o mesmo do meu_array(1), @ é passado como sufixo de endereço e não valor alocado, isso em pascal*)

b[0] := j^;
este procedimento é o memo que eu dizer que
b[0] := b[1];
end;




é isso ?

se for cara, sei não mais só ocupa memória e não presta pra nada.
prefiro
array[0..9] of array[0..9] of byte.
matriz de 100 bytes X é o primeiro sufixo Y e o segundo sufixo.

só essa merdinha de comando aí em cima com ponteiro aumentou em 38bytes o fonte.. cruis credo.. mais bom se for isso mesmo, pelo menos eu aprendi.

abraços
e obrigado pela atenção
fabim
Editado pela última vez por fabim em 03 Jan 2008 12:56, em um total de 1 vez.
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 lafourcade » 03 Jan 2008 12:53

Será que é possivel criar uma tabela na flash com um end conhecido, desta forma?
Tem alguma outra maneira?
lafourcade
Byte
 
Mensagens: 123
Registrado em: 20 Out 2006 06:40

Mensagempor fabim » 03 Jan 2008 13:08

bom tem sim.. inda mais se for pic que le e grava a flash tipo um 16f877 ou a maioria dos 18F.

explique melhor o que voce quer fazer, as vezes a solução é muitissimo mais simples do que voce imagina.

por exemplo em pascal.
const
polinomial : byte[10][2]=((127,118),(261,192).........até a décima casa de 2 bytes.

operação simples pra eu pegar os dois bytes em negrito e colocar em uma var word chamada de TEMP>!
temp := polinomial[2][1];
temp := temp shr(polinomial[2][2])8;

temp agora igual á
MSB 261
LSB 192

tem outras formas tipo usar as funções de read flash e write flsh se precisar de ser rapidinho

fabim

abraços
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 lafourcade » 03 Jan 2008 14:22

Opa!

Na verdade oque eu quero é exatamente isso:
Quando eu trabalhava com o CCS e queria inicializar a eeprom eu escrevia no end 2100h e na compilação inicializava os end da eeprom que eu estava utilizando. Ex:

// set_point senha histerese atuação
#rom 0x2100={ 10,00, 01,02,03,04, 2, 0, 0, 20 }
// end 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

como no hitech a diretiva #rom não existe. Eu pensei em fazer desta maneira:

unsigned char const init_eeprom[4] @ 0x2100 = {1,2,3,4};
porém:

unsigned char const init_eeprom[4] = {1,2,3,4};
isso funciona.
unsigned char const init_eeprom[4] @ 0x2100;
e isso tb.

mas colocar valores nestes end na compilação, desta forma:

unsigned char const init_eeprom[4] @ 0x2100 = {1,2,3,4};
não funciona.

Deve ter alguma maneira de inicializar a eeprom.

Bom, de qualquer forma, outra questão, é como criar uma tabela na flash com um end conhecido.
lafourcade
Byte
 
Mensagens: 123
Registrado em: 20 Out 2006 06:40

Mensagempor fabim » 03 Jan 2008 14:34

no C e pascal da mikroeletronica.
const
bytes_constante : array[0..3] of byte = (20,35,45,55); absolute org $FFF1;

só isso o primeiro byte fica no $FFF1, o segundo no $FFF2.....


procura no qhelp, deve ter alguma coisa em constantes.. como org ou coisa do tipo..

Mais antes de mais nada num sei se esse compilador seu é uma IDE nova, se for a maioria delas tem no tool´s um eeprom mananger ou coida do tipo..

abraços

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 Maia » 04 Jan 2008 08:45

Para colocar dados na EEPROM durante a gravação do PIC veja isso tirado do manual do compilador.

3.2.4.1 EEPROM Access
For those PIC devices that support external programming of their EEPROM data area, the __EEP-
ROM_DATA() macro can be used to place the inital EEPROM data values into the HEX file ready
for programming. The macro is used as follows.
#include <htc.h>
__EEPROM_DATA(0, 1, 2, 3, 4, 5, 6, 7);
The macro accepts eight parameters, being eight data values. Each value should be a byte in size.
Unused values should be specified as a parameter of zero. The macro may be called multiple times
to define the required amount of EEPROM data. It is recommended that the macro be placed outside
any function definitions.
The macro defines, and places the data within, a psect called eeprom_data. This psect is posi-
tioned by a linker option in the usual way.
This macro is not used to write to EEPROM locations during run-time. The macros EEP-
ROM_READ() and EEPROM_WRITE(), and the function versions of these macros, can be called to
read from, and write to, the EEPROM during program execution. For example, to write a byte-size
value to an address in EEPROM memory using the macro version of EEPROM write:


Abraços,
Maia
Avatar do usuário
Maia
Byte
 
Mensagens: 348
Registrado em: 15 Out 2006 16:25
Localização: Rio de Janeiro

Mensagempor andre_luis » 04 Jan 2008 09:26

Só uma dica :

Não é uma boa prática competir com o linker na atribuição de endereços para alocacao de variaveis e/ou constantes.

O melhor a se fazer, é deixar o compilador fazer isso automaticamente ( é mais seguro ) e depois captar o endereço destas variaveis/constantes com o operador ´&´para determinar o endereço a ser apontado .


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ


Voltar para PIC

Quem está online

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

x