Eu acho que é uma extensão do compilador colocar a variável em um endereço específico.
Eugene Sh.
2
a pergunta pode beneficiar a tag #mplab, pois é específico do Mplab.
Sylvainulg 22/05/19
Apenas para entender: isso está no tópico deste site? Eu acho que isso pertence ao SO. Ou pode pedir aqui a programação do microcontrolador. Isso tornaria um pouco claro onde essas perguntas deveriam estar.
Adeus SE
6
@KamiKaze Que tópicos posso perguntar aqui? lista "a gravação do firmware para aplicativos bare-metal ou RTOS", como no tópico, e "Software de programação para um PC", como fora do tópico. Como isso parece ser sobre a programação de sistemas embarcados, parece que estamos de olho no tópico. O fato de ele também estar no tópico Stack Overflow não o torna por si só aqui.
um CVn
@KamiKaze obrigado por perguntar, eu tinha questões semelhantes (eu não sou um usuário regular desta SE)
GPPK
Respostas:
20
Isso é para especificar um endereço absoluto para colocar a variável.
Na página 27 do manual do compilador XC8 , seção 2.5.2 Endereçamento Absoluto :
Variáveis e funções podem ser colocadas em um endereço absoluto usando a __at()construção
...... 2.5.2.2 DIFERENÇAS
Os compiladores de 8 bits usaram um símbolo @ para especificar um endereço absoluto
@é uma extensão não padrão comum para a linguagem C que permite declarar uma variável em um endereço específico. Ele pode ser usado para registros de hardware mapeados na memória etc. Nesse caso, a variável também deve ser declarada volatile, para que seu exemplo esteja incorreto.
Outros compiladores usam algo como __attribute__(section...ou #pragma ..., todos eles não-padrão C.
A única razão racional (se houver) pela qual as cadeias de ferramentas fazem isso é habilitar a depuração de registro em depuradores de baixa qualidade. A sintaxe não padrão garantirá que o registro se torne parte das informações de saída e depuração do vinculador. O que, por sua vez, permite que você assista o registro no depurador de baixa qualidade, assim como em qualquer outra variável.
Se você tiver um bom depurador, ele terá suporte e conhecimento do seu MCU específico. Então você não precisa de nada fora do padrão no código C, mas pode escrever C padrão puro e portátil:
Embora os compiladores sejam obrigados a aceitar o último formulário, as implementações podem mapear números para endereços da maneira que entenderem. Além disso, a maioria dos compiladores que vi usam @plataformas de destino de notação com vários espaços de memória ou outros problemas, para que a maioria das coisas declaradas usando @notação se comportasse de maneira diferente de qualquer coisa que pudesse ser feita sem extensões.
Supercat
1
Uma pequena extensão:
Isso não está mais funcionando desde o xc8 2.0 e superior. Agora você tinha que escrever:
unsignedchar serv_ctr __at(0x0002);
colocar uma variável ( serv_ctr) em um endereço absoluto ( 0x0002).
Com o XC8 2.0, é possível compilar seu código antigo usando a @sintaxe se você definir as configurações do compilador para usar o formato "C90". A configuração se parece com isso, está em "XC8 Global Options" e é chamada "C standard".
Respostas:
Isso é para especificar um endereço absoluto para colocar a variável.
Na página 27 do manual do compilador XC8 , seção 2.5.2 Endereçamento Absoluto :
fonte
@
é uma extensão não padrão comum para a linguagem C que permite declarar uma variável em um endereço específico. Ele pode ser usado para registros de hardware mapeados na memória etc. Nesse caso, a variável também deve ser declaradavolatile
, para que seu exemplo esteja incorreto.Outros compiladores usam algo como
__attribute__(section...
ou#pragma ...
, todos eles não-padrão C.A única razão racional (se houver) pela qual as cadeias de ferramentas fazem isso é habilitar a depuração de registro em depuradores de baixa qualidade. A sintaxe não padrão garantirá que o registro se torne parte das informações de saída e depuração do vinculador. O que, por sua vez, permite que você assista o registro no depurador de baixa qualidade, assim como em qualquer outra variável.
Se você tiver um bom depurador, ele terá suporte e conhecimento do seu MCU específico. Então você não precisa de nada fora do padrão no código C, mas pode escrever C padrão puro e portátil:
fonte
@
plataformas de destino de notação com vários espaços de memória ou outros problemas, para que a maioria das coisas declaradas usando@
notação se comportasse de maneira diferente de qualquer coisa que pudesse ser feita sem extensões.Uma pequena extensão:
Isso não está mais funcionando desde o xc8 2.0 e superior. Agora você tinha que escrever:
colocar uma variável (
serv_ctr
) em um endereço absoluto (0x0002
).Com o XC8 2.0, é possível compilar seu código antigo usando a
@
sintaxe se você definir as configurações do compilador para usar o formato "C90". A configuração se parece com isso, está em "XC8 Global Options" e é chamada "C standard".fonte
@
sintaxe, não apenas o Mplab.