Página 1 de 1

comando, keil, não se meta.

MensagemEnviado: 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 ?"

MensagemEnviado: 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.

MensagemEnviado: 10 Dez 2009 22:44
por Djalma Toledo Rodrigues
Oi Fabim

Seria Const ?

DJ

MensagemEnviado: 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 . :D


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......

MensagemEnviado: 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.

MensagemEnviado: 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

MensagemEnviado: 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

MensagemEnviado: 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.

MensagemEnviado: 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 !!!

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

MensagemEnviado: 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

MensagemEnviado: 11 Dez 2009 09:43
por tcpipchip
nice

MensagemEnviado: 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...

MensagemEnviado: 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!!

MensagemEnviado: 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