Página 1 de 1

Definir uma constante com valor de variável

MensagemEnviado: 18 Out 2019 13:53
por vtrx
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.

Re: Definir uma constante com valor de variável

MensagemEnviado: 18 Out 2019 15:08
por xultz
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.

Re: Definir uma constante com valor de variável

MensagemEnviado: 18 Out 2019 15:11
por vtrx
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

Re: Definir uma constante com valor de variável

MensagemEnviado: 18 Out 2019 16:03
por xultz
Tenta descobrir quando esta variável é lida, coloca um (const) como type casting nela, geralmente resolve...

Re: Definir uma constante com valor de variável

MensagemEnviado: 18 Out 2019 20:29
por andre_luis
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.

Re: Definir uma constante com valor de variável

MensagemEnviado: 18 Out 2019 20:42
por pamv
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?

Re: Definir uma constante com valor de variável

MensagemEnviado: 18 Out 2019 21:48
por vtrx
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.

Re: Definir uma constante com valor de variável

MensagemEnviado: 18 Out 2019 22:48
por andre_luis
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.