Página 1 de 1
comando, keil, não se meta.

Enviado:
10 Dez 2009 20:54
por fabim
Alguem lembra, ou ja usou um comando.
Para que determinada variavel, quando eu inicializar o keil e colocar os valores nestas.
o kiel não se meta, e as utilize para outras coisas ?
Seria "Static ?"

Enviado:
10 Dez 2009 21:57
por barboza
Como é?
Cuma?
Você quer preservar uma variavel na inicialização?
Ou manter o valor de uma variavel local mesmo depois de sair da função? Neste caso é a static.

Enviado:
10 Dez 2009 22:44
por Djalma Toledo Rodrigues
Oi Fabim
Seria Const ?
DJ

Enviado:
10 Dez 2009 22:59
por barboza
Djalma Toledo Rodrigues escreveu:Oi Fabim
Static é gravada na ROM (Flash) juntamente com o Programa Objeto,
mais estática que isso impossível . rs
DJ
PS.: Podi inté fartar lus .

DJ, acho que sua afirmação não é tão estatica assim.
http://www.answers.com/topic/static-variable
Se é gravado em ROM não é variavel......

Enviado:
10 Dez 2009 23:00
por MarcusPonce
Se você definir uma variável dentro de uma função com "static" então o valor dela não se perde se você sair da função. Quando entrar novamente na função vai ver que o valor dela continua o último que foi colocado lá.
Se você definir uma variável com "const" aí pode ser que fique na memória flash, mas depende do compilador. Mas mesmo que fique na RAM, o compilador vai reclamar se o programa tentar alterar, desde que explicitamente, via ponteiro não reclama.
OBS: "volatile const" também existe: o compilador não pode alterar, mas ela pode mudar sozinha.

Enviado:
10 Dez 2009 23:15
por Djalma Toledo Rodrigues
Retificação
A Const é que pode ficar gravada na ROM (flash)
Já foi Editado e Corrigido
Desculpem
Obrigado, Barboza e Marcos Ponce
DJ

Enviado:
11 Dez 2009 07:28
por fabim
Seria isto mesmo.
tenho uma include.H, que eu chamo no main.
A include.h, chama a processos .C.
Dentro da processos.C, existem 6 variaveis, sendo duas uint8, e duas uint16.
Ao inicializar o uC, eu leio uma eeprom e aloco os valores nestas variaveis.
Estas variaveis estão definidas como globais par o processosa.c;;;;
O que ocorre, é que na inicialização em debug vai tudo lindo, os valores são alocados e tudo mais.
O problema é que alguma das rotinas, o compilador deixou essas variaveis serem usadas no processo dessa maldita rotina!!
Bom obrigado, vou definir como static e ver que bixo dá!!
Obrigado guy´s!!
Fabim

Enviado:
11 Dez 2009 07:33
por barboza
Estava quase entendo, quando meu raciocínio se perdeu. Poderia explicar melhor?
Se a variável é global, é global, não faz sentido o static.

Enviado:
11 Dez 2009 07:36
por fabim
discuta isto com o keil!!!kkkkkkkkkkk
poisé tu acredita ?
o keil de alguma forma, achou que essas variaveis são usadas só de vez em quando, e pegou o endereço delas pra outras coisas, pra poder economizar.
coloquei static., pronto. resolveu!!!kkkkkkkkkkkkk
Abraços velho !!!

Enviado:
11 Dez 2009 07:56
por barboza
static em variável global. só vc fabim.

Enviado:
11 Dez 2009 08:12
por fabim
só o keil !!!
deve ter sido por causa da forma que eu criei o projeto !!
usando lógica mikroCezica...rsrs
Abraços e obrigado

Enviado:
11 Dez 2009 09:43
por tcpipchip
nice

Enviado:
11 Dez 2009 12:14
por MarcusPonce
Sugestão:
Se o projeto foi construído de uma forma que o Keil se enganou na alocação de memória e você teve que resolver colocando "static", quem garante que o Keil não alocou a memória de forma que quando uma interrupção acontecer vai sobreescrever uma outra variável ? Daí pode ser um bug difícil de achar pois dependerá do ponto do programa em que acontecer a interrupção...
Não seria melhor reorganizar o projeto de maneira que o Keil utilize a memória corretamente sozinho para evitar dores de cabeça futura ?
Se eu entendi a descrição, você deu um #include "xx.h" e dentro do xx.h existe um #include "yy.c". É isso ? E você colocou o yy.c no source group ? Se colocou então aparece naquela janela pequena que costuma ficar na esquerda e que contém todos os arquivos do projeto organizados.
Mas assim poderia aproveitar e não colocar o #include "yy.c"
Inserir um #include dentro de outro #include pode levar a problemas...

Enviado:
11 Dez 2009 22:44
por fabim
MarcusPonce escreveu:Sugestão:
Se o projeto foi construído de uma forma que o Keil se enganou na alocação de memória e você teve que resolver colocando "static", quem garante que o Keil não alocou a memória de forma que quando uma interrupção acontecer vai sobreescrever uma outra variável ? Daí pode ser um bug difícil de achar pois dependerá do ponto do programa em que acontecer a interrupção...
Não seria melhor reorganizar o projeto de maneira que o Keil utilize a memória corretamente sozinho para evitar dores de cabeça futura ?
Se eu entendi a descrição, você deu um #include "xx.h" e dentro do xx.h existe um #include "yy.c". É isso ? E você colocou o yy.c no source group ? Se colocou então aparece naquela janela pequena que costuma ficar na esquerda e que contém todos os arquivos do projeto organizados.
Mas assim poderia aproveitar e não colocar o #include "yy.c"
Inserir um #include dentro de outro #include pode levar a problemas...
hehe, acabei de responder uma gracinha de um forista, e li aqui.
Tava com um bugzinho o qual eu achei que era a adaptação que fiz na biblioteca de lcd do RodrigoPA, fiz o q disse, e adivinha só ?
Cabou o problema...rsrsrs
Brigadão!!

Enviado:
12 Dez 2009 09:54
por Viktor
Static dentro da funcao preserva as variaveis com este atributo. Static para uma variavel declarada global torna a variavel global apenas para o modulo onde esta foi definida, ou seja, nao eh visivel externamente ao modulo