Definir uma constante com valor de variável

Programação C em geral

Moderadores: 51, guest2003

Definir uma constante com valor de variável

Mensagempor vtrx » 18 Out 2019 13:53

Estava precisando muito de otimizar um código,e preciso saber se é possível,no trecho citado,usar uma variável dentro do código:
Código: Selecionar todos
   const char USB_DEVICE_DESC[] = {
         USB_DESC_DEVICE_LEN,
         0x01,
         0x10,0x01,
         0x00,
         0x00,
         0x00,
         USB_MAX_EP0_PACKET_LENGTH,
         0xD8,0x04,
         0x22,0x00,
         0x00,0x01,
         0x01,
         0x02,
         0x00,
         USB_NUM_CONFIGURATIONS 
   };

Existe uma maneira de um dos valores acima ser definido por uma variável?
Exemplo;iniciando o código iria ler um valor da Eeprom e USB_MAX_EP0_PACKET_LENGTH,iria ter este valor.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: Definir uma constante com valor de variável

Mensagempor xultz » 18 Out 2019 15:08

Quando você declara a variável como const, ela fica armazenada somente na flash e consequentemente, não tem como ser modificada.
Para você poder modificá-la, precisa declarar como não-const (ou seja, tirar o modificador const dela), assim essa variável é copiada para RAM e você pode modificar o que quiser quando quiser.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Re: Definir uma constante com valor de variável

Mensagempor vtrx » 18 Out 2019 15:11

Ja tinha tirado a definição de const,mas o compilador da erro dizendo que tenho que ter constante na estrutura.
Código: Selecionar todos
*** Error 27 " Line 547(13,14): Expression must evaluate to a constant
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: Definir uma constante com valor de variável

Mensagempor xultz » 18 Out 2019 16:03

Tenta descobrir quando esta variável é lida, coloca um (const) como type casting nela, geralmente resolve...
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Re: Definir uma constante com valor de variável

Mensagempor andre_luis » 18 Out 2019 20:29

Via de regra, como o xultz falou, o compilador aloca os valores declarados como const em memoria de programa, mas há casos em que esses valores são colocados em memória volátil de acesso leitura somente, e certamente esse comportamento deve ser configurável; dá uma olhada na documentação do compilador. Se for esse o caso, talvez uma brecha fosse voce mudar o valor dessa 'constante' (alocada em RAM) via ponteiro; é uma gambiarra, deve haver melhor maneira de fazer isso, mas é o que veio á mente.
"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

Re: Definir uma constante com valor de variável

Mensagempor pamv » 18 Out 2019 20:42

vtrx escreveu:Ja tinha tirado a definição de const,mas o compilador da erro dizendo que tenho que ter constante na estrutura.
Código: Selecionar todos
*** Error 27 " Line 547(13,14): Expression must evaluate to a constant


A linha 547 é a que você mostrou acima?
pamv
Word
 
Mensagens: 842
Registrado em: 20 Jun 2016 21:47

Re: Definir uma constante com valor de variável

Mensagempor vtrx » 18 Out 2019 21:48

pamv escreveu:
vtrx escreveu:Ja tinha tirado a definição de const,mas o compilador da erro dizendo que tenho que ter constante na estrutura.
Código: Selecionar todos
*** Error 27 " Line 547(13,14): Expression must evaluate to a constant


A linha 547 é a que você mostrou acima?

Sim.
A 'gambiarra' que estou fazendo,limita muito o tamanho do código e desempenho.
Estou fazendo duas alternativas com duas tabelas,se X=0->const char USB_DEVICE_DESC[] = {... else const char USB_DEVICE_DESC_02[] = {...
Isso por causa de um valor a alterar,se puder usar uma variável,teria várias configurações...
PS:Para ajudar,o compilador é o CCS.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: Definir uma constante com valor de variável

Mensagempor andre_luis » 18 Out 2019 22:48

vtrx escreveu:se puder usar uma variável,teria várias configurações...
PS:Para ajudar,o compilador é o CCS.


De acordo com o manual do CCS (página 101), é possivel instruir o compilador á alocar em RAM os valores da variável definida como const pela diretiva #DEVICE CONST=READ_ONLY. Como o default do CCS é alocação em Flash, sem fazer isso, a dica do ponteiro acima não iria funcionar.
Você não está autorizado a ver ou baixar esse anexo.
"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 Visual C++/C/C++/C#

Quem está online

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

x