O que é 'char não assinado próximo'?


12

Eu li uma folha de dados e achei variável definida como unsigned char near Sample_X. O que é isso e como isso difere unsigned char Sample_X?


3
talvez permita que o compilador use pequenas compensações relativas?
— Neil_UK

6
Com base na experiência da parte com x86 no DOS, eu esperaria isso com algum tipo de ponteiro e em um ambiente de 16 bits. No entanto, o que o OP citado não parece um ponteiro e o link da folha de dados implicaria algum MCU. Procure a palavra-chave "near" nos dois links a seguir: microchip.com/forums/m549709.aspx barrgroup.com/Embedded-Systems/How-To/Efficient-C-Code
— frr

3
Deve notar-se que este é um extensões do compilador, não padrão C
— PlasmaHH

Pode ser sobre o CCM. Considerando que o código é direcionado principalmente para um MCU, pode ser uma sugestão indireta ao vinculador pelo suporte do compilador para colocá-lo no CCM (memória acoplada de núcleo), se disponível.
— Ayhan

1
FYI, a palavra-chave,, nearé um exemplo de um especificador de classe de armazenamento . Diz ao compilador algo sobre como ou onde o armazenamento da variável deve ser alocado. (Veja a resposta do filo, abaixo, para mais informações near).
— Solomon Slow

Respostas:


20

O MCU especificado aqui é uma série Freescale MC9C08 , que usa uma versão ligeiramente aprimorada de sua arquitetura HC08. Este é um núcleo de 8 bits, que (como muitos outros) tem instruções mais curtas e acesso mais rápido a endereços de "página zero" do que outros. Os endereços de página zero têm apenas 8 bits em vez de 16 bits; portanto, as instruções referentes a eles podem ter 2 bytes em vez de 3 e levar 1 ciclo a menos para serem executadas como resultado.

A palavra-chave "near" instrui o compilador a colocar a variável em "zero page", se possível, para obter melhor desempenho. Os compiladores escritos especificamente para o desenvolvimento incorporado, como este , geralmente implementam essas extensões no idioma (aqui descrito como "Suporte C para zero página").


Eu gosto desta resposta, mas você tem uma fonte para suas informações?
— Clonkex

1
Editei a resposta para fornecer mais detalhes e referências. De fato, é da arquitetura HCS08 mais recente da Freescale, mas isso é compatível com o código das arquiteturas HC08 e HC05 mais antigas. As arquiteturas (agora positivamente antigas) 6800 e 6502 também estão intimamente relacionadas.
— precisa

Bom, muito melhor!
— Clonkex

Portanto, seu uso é muito semelhante à registerpalavra - chave (nos casos em que você realmente tem certeza de que é aqui que precisa de otimização), mas um pouco menos extremo?
— Vsz 17/04

Mais ou menos. A diferença se deve principalmente ao fato de que as CPUs de 8 bits normalmente não têm um banco de registros em si, apenas um único acumulador e alguns registros de índice. Mas também é análogo ao uso de ponteiros "near" vs. "far" no x86, pois há uma diferença no tamanho do endereço e quanto tempo leva para concluir um acesso.
— precisa

15

Dependendo da arquitetura da CPU, pode haver instruções diferentes para acessar dados em endereços diferentes. Aqui está um exemplo do Keil para um de seus compiladores.

O acesso próximo possui um certo limite de memória; portanto, você pode dar dicas ao compilador para colocar algumas variáveis ​​freqüentemente usadas em uma área acessível por instruções mais curtas (obviamente, descrever o acesso a um espaço de endereço de 32 bits é maior que o endereço de 16 bits. espaço). Isso pode ser traduzido para um código menor / mais rápido.



5
@AndrewMorton: Essa pergunta se relaciona fare aponta para neara arquitetura 8086 amplamente obsoleta. As mesmas palavras-chave são usadas de maneira relacionada, mas diferente, em microcontroladores de 8 bits.
— Supercat

@supercat A pergunta é feita geralmente, embora as respostas se concentrem na arquitetura antiga. Alguém experiente deve escrever uma resposta explicando como eles são usados ​​para microcontroladores de 8 bits.
— precisa saber é o seguinte

@curiousdannii: O código em questão foi escrito para um micro de 8 bits.
— supercat
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.