Saturday 8 July 2017

0x9b Binary Options


As informações (muitas vezes chamadas de dados) dentro de um computador, assim como na placa usada neste tutorial, são trocadas entre os vários componentes por meio de condutores metálicos chamados linhas de dados. Um grupo de linhas de dados é chamado de barramento de dados. Cada linha de dados carrega uma unidade de dados chamada bit. Um pouco pode ser ligado ou desligado. Normalmente é considerado como 5 volts. E desligado é considerado como 0 volts. Embora os sistemas modernos usem frequentemente baixas em tensões para diminuir o consumo de energia. Os dados podem ser representados no papel como uma série de uns e zeros. Um significa que um bit está ligado, e um zero significa que ele está desligado. Um grupo de 8 bits é chamado de byte. Um byte com um valor de 0 seria representado como 00000000. Bytes diferentes de zero podem ser qualquer combinação de 1s e 0s. 01100010 será usado como um exemplo aqui. Na linguagem C, um byte é chamado de caractere e abreviado char. Quando os dados são representados como uma série de uns e zeros, é dito ser uma representação binária, ou ter uma base de 2 porque usa 2 dígitos. Nós humanos usamos uma base de 10, provavelmente porque temos 10 dedos. O bit de extremidade esquerda de um número representado em binário é chamado de bit mais significativo. Abreviado msb. E o bit de extremidade direita é chamado de bit menos significativo. Abreviado lsb. Uma pequena revisão pode ser útil para aqueles que estão um pouco enferrujados em levantar um número para um poder. Nenhuma matemática alta aqui - para levantar um número para um poder basta anotá-lo o número expoente de vezes e multiplicar. O expoente é a potência à qual um número é elevado. Uma maneira de reconhecer um expoente é pelo fato de que muitas vezes é levantada quando escrito: 5 2 5 5 25 2 3 2 2 2 8 4 4 4 4 4 4 256 Cada posição de bit tem um peso. Para todos os sistemas de numeração que eu conheço (os matemáticos provavelmente conhecem os outros), a posição certa, menos significativa, é conhecida como o lugar 1s. Lá, o peso é igual à base elevada à potência de 0. Qualquer número elevado à potência de 0 é igual a 1. O expoente é aumentado em 1 com cada movimento para a esquerda. Assim, o segundo lugar da direita tem um peso igual à base elevada à potência de 1. Qualquer número elevado à potência de 1 é igual a si mesmo. Fomos ensinados na escola que o segundo lugar da direita é o lugar 10s. Isso é porque estávamos usando uma base de 10 e nós estávamos levantando-o para o poder de 1. Uma vez que uma base de 2 é usado em binário, o segundo lugar a partir da direita tem um peso de 2 porque é 2 elevado para o poder de 1. O próximo peso é 2 2 2 2 4, então 2 3 2 2 2 8 e assim por diante. Os expoentes são freqüentemente usados ​​para designar um bit em um número binário. O bit 0 está na extremidade direita do byte eo bit 7 está na extremidade esquerda. O bit 0 é o lsb eo bit 7 é o msb. Os bits de dados são freqüentemente abreviados usando a letra D - D0, D1, D2, etc. Uma palavra longa geralmente é considerada como sendo 4 bytes ou 32 bits. Um longo é usado para números muito grandes. Longs também pode ser assinado ou não assinado. Os longos assinados têm uma gama desde -2 147 483 648 a 2 147 483 647. O valor máximo não assinado é 0xFFFFFFFF 4,294,967,295. O valor mínimo não assinado é 0. O seguinte é um auto-teste sobre esta seção. Seria uma boa idéia certificar-se de que você sabe as respostas para todas as perguntas, uma vez que as seções a seguir irão construir sobre este. 1) Os dados dentro dos computadores são trocados entre os diferentes componentes por meio de condutores metálicos chamados 1. Um grupo é chamado de 2. A) Bus de Dados, Peso B) Nibble, HEX C) Binário, Bit D) Linhas de Dados, Bus de Dados 2) Se a voltagem for 5 volts, o bit está ligado. Se o bit estiver desligado, a voltagem é 0 volts. A) Verdadeiro B) Falso 3) Um grupo de 8 bits é um 1 e é chamado de 2 na linguagem de programação C. A) Bus de Dados, Nibble B) Byte, Carácter (ou char) C) Peso, Bit D) Não assinado, Significado 4) Diz-se que um dado é representado com uma base de 2, por causa dos dois dígitos usados. A) Inteiro (ou int) B) Bit mais significativo C) Binário D) HEX 5) O bit de extremidade esquerda também pode ser referido como 1. O 2 é o bit do lado direito. A) Word, Integer (ou int) B) Carácter (ou char), Data Bus C) Linhas de Dados, Palavra Longa D) Bit mais Significativo (ou msb), Bit Menos Significativo (ou lsb) 6) A é igual ao número de base elevado à potência de 0. A) Byte B) Peso C) Palavra longa D) Bus de dados 7) é uma maneira comum de mostrar números em um programa C. Ele usa uma base de 16. A) Linhas de dados B) HEX C) Palavra D) Byte 8) Se você quebra um byte em 2 grupos de 4 bits cada, então cada grupo é a. A) HEX B) Binário C) Nibble D) Volt 9) A 1 é geralmente 16 bits, ou 2 bytes. Algo com 32 bits ou 4 bytes é geralmente chamado de 2. A) Assinada, não assinada B) Byte, Bit C) Palavra, Palavra longa D) HEX, Binário 10) O inteiro 1 pode ser uma palavra positiva ou negativa, eo número inteiro 2 só pode ser uma palavra positiva. A) Nibbles, HEX B) Byte, linhas de dados C) Bit, Integer D) Assinado, Unsigned Na tabela abaixo, preencha os espaços em branco e corrija os erros onde necessário Dicas: Toda a informação que você precisa para descobrir esta tabela está acima Existem 4 erros (HEX pode ser maiúsculas ou minúsculas - não é um erro para usar em minúsculas para HEX). MS Binary Nibble Significa o Binário Binário Mais Significativo. ---- Binário binário de LS Significa Bifurcação Binária Menos Significativa. MS HEX Nibble significa mais significativo Nibble HEX. ---- LS HEX Nibble Significa Menos Significativo HEX Nibble. Lembre-se de 8,4,2,1 para binário. Lembre-se que a base para HEX é 16. O peso para o mais significativo HEX Nibble 16 O peso para o menos significativo HEX Nibble 1. Lembre-se, quando você conta em HEX você usa 0 a 9, então A a F. Se você tiver binário Mas sem HEX, use o binário para descobrir o HEX. Se você tiver HEX, mas não binário, use o HEX para descobrir o binário. Os primeiros 16 números na tabela contam simplesmente de 0 a 15. Recorde o binário e HEX para 0 a 15 e você fêz sobre a metade da tabela. Observe que metade dos números estão no lado esquerdo da tabela, e metade estão no lado direito. 0 está à esquerda, 1 está à direita, 2 está à esquerda, 3 está à direita e assim por diante. Isso é verdade todo o caminho até 15. Novas opções para gerenciar conjuntos de caracteres no compilador Microsoft C / C O compilador Microsoft C / C evoluiu juntamente com DOS, Windows de 16 bits e Windows 32/64-bit. Seu suporte para conjuntos de caracteres diferentes, páginas de código e Unicode também foi alterado durante este tempo. Este post irá explicar como o nosso compilador funcionou no passado e também cobrir alguns novos parâmetros fornecidos pelo compilador C / C no Visual Studio 2015 Update 2 CTP. Especificamente para arquivos BOM-less UTF-8 e controlar conjuntos de caracteres de execução. Faça o download e experimente. Para obter informações sobre outras alterações do compilador na atualização 2, confira esta postagem. Há alguns grandes recursos on-line que descrevem Unicode, DBCS, MBCS, páginas de código e outras coisas em grande detalhe. Eu não vou tentar reproduzir isso aqui e vai cobrir os conceitos básicos rapidamente. O site Unicode Consortium é um ótimo lugar para aprender mais sobre o Unicode. Há dois aspectos principais para entender como nosso compilador lida com diferentes conjuntos de caracteres. O primeiro é como ele interpreta bytes em um arquivo de origem (conjunto de caracteres de origem) eo segundo é o que ele escreve octetos no binário (conjunto de caracteres de execução). É importante compreender como o código fonte em si é codificado e armazenado no disco. Indicação explícita da codificação Unicode Há uma maneira padrão de indicar arquivos Unicode usando uma BOM (marca de ordem de bytes). Esta lista de materiais pode indicar UTF-32, UTF-16 e UTF-8, bem como se é big-endian ou little-endian. Estes são indicados pela sequência de bytes que resulta da codificação do carácter UFEFF em qualquer codificação está a ser utilizado. UTF-8 é codificado como um fluxo de bytes, então não há uma ordem real dos bytes que precisa ser indicado, mas o indicador para UTF-8 ainda é normalmente chamado de 8220BOM8221. Indicação implícita de codificação Nos primeiros dias do Windows (e DOS) antes do Unicode ser suportado, arquivos de texto foram armazenados sem nenhuma indicação de qual codificação o arquivo estava usando. Cabe ao aplicativo como interpretar isso. Em DOS, qualquer caractere fora da faixa ASCII seria saída usando o que foi construído para a placa de vídeo. No Windows, isso ficou conhecido como a página de código OEM (437). Isso inclui alguns caracteres não ingleses, bem como alguns caracteres de desenho de linha úteis para desenhar caixas em torno do texto. O Windows finalmente adicionou suporte para DBCS (conjuntos de caracteres de byte duplo) e MBCS (conjuntos de caracteres de vários bytes). Ainda não havia nenhuma maneira padrão de indicar qual era a codificação de um arquivo de texto e os bytes normalmente seriam interpretados usando qualquer que seja a página de código atual do sistema. Quando 32bit Windows chegou, tinha APIs separadas para UTF-16 e outro conjunto para as chamadas APIs ANSI. Essas APIs levaram caracteres de 8 bits que foram interpretados usando a página de código atual do sistema. Nota: no Windows você não pode definir a página de código para uma página de código Unicode (UTF-16 ou UTF-8), então em muitos casos não há nenhuma maneira fácil de fazer um aplicativo mais antigo entender um arquivo codificado Unicode que não tem um Lista de materiais Também é comum hoje em dia codificar arquivos em UTF-8 sem usar uma lista técnica. Esse é o padrão na maioria dos ambientes Linux. Embora muitas ferramentas do Linux possam manipular uma lista técnica, a maioria das ferramentas não gerará uma. Não ter uma lista técnica realmente torna muitas coisas mais simples, como concatenar arquivos ou anexar a um arquivo sem ter que se preocupar sobre quem vai escrever a lista técnica. Como o compilador Microsoft C / C lê texto de um arquivo Em algum ponto no passado, o compilador Microsoft foi alterado para usar UTF-8 internamente. Assim, como os arquivos são lidos do disco, eles são convertidos em UTF-8 na mosca. Se um arquivo tiver uma BOM, usaremos isso e leremos o arquivo usando qualquer codificação especificada e convertendo-o em UTF-8. Se o arquivo não tiver uma lista técnica, tentamos detectar formas de codificação UTF-16 em little-endian e big-endian observando os primeiros 8 bytes. Se o arquivo se parecer com UTF-16, o trataremos como se houvesse uma lista de materiais UTF-16 no arquivo. Se não houver nenhuma lista de materiais e não se parecer com UTF-16, então usamos a página de código atual (resultado de uma chamada para GetACP) para converter os bytes no disco em UTF-8. Isso pode ou não estar correto dependendo de como o arquivo foi realmente codificado e quais caracteres ele contém. Se o arquivo é realmente codificado como UTF-8, isso nunca será correto como a página de código do sistema não pode ser definida como CPUTF8. Conjunto de caracteres de execução É também importante compreender o conjunto de caracteres de execução. Com base no conjunto de caracteres de execução, o compilador interpretará strings de forma diferente. Vejamos um exemplo simples para começar. Const char 8216h8217 const char u8ch u88217h8217 const wchart wch L8217h8217 const char b 8220h8221 const char u8b u88243h8221 const wchart wb L8221h8221 O código acima será interpretado como se você tivesse digitado isso. Const char ch 0x68 const char u8ch 0x68 const wchart wch 0x68 const char b const char u8b const wchart wb Isso deve fazer todo o sentido e será verdade independentemente da codificação do arquivo ou página de código atual. Agora, vamos dar uma olhada no seguinte código. Const char 82168217 const char u8ch 82168217 const wchart wch L82178217 const char b 82208221 const char u8b u882438221 const wchart wbuffer L82218221 Nota: Eu escolhi este personagem aleatoriamente, mas parece ser o caráter Han que desobedece, o que parece apropriado para o meu propósito . É o caractere Unicode U5C70. Temos vários fatores a considerar neste. Como é o arquivo codificado que contém esse código E qual é a página de código atual do sistema que estamos compilando Em UTF-16 a codificação é 0x5C70, em UTF-8 é a seqüência 0xE5, 0xB1, 0xB0. Na página de código 936, é 0x8C, 0xDB. Ele não é representável na página de código 1252 (Latin-1), que é o que estou atualmente em execução. A página de códigos 1252 é normalmente usada no Windows em inglês e em muitos outros idiomas ocidentais. A Tabela 1 mostra os resultados para várias codificações de arquivos quando executados em um sistema usando a página de códigos 1252. Tabela 1 8211 Exemplo de resultados hoje ao compilar código com várias codificações. 0x0152, 0x00DB, 0 O asterisco () indica que o aviso C4566 foi gerado para estes. Nestes casos, o aviso é um caractere representado pelo nome de caractere universal 8216u5C708217 não pode ser representado na página de código atual (1252) O erro C2015 é demasiados caracteres em constante Estes resultados provavelmente não fazem quase tanto sentido quanto o caso simples do Letra h, mas eu passo através do que está acontecendo em cada caso. Nas colunas um e dois, sabemos qual é a codificação do arquivo e assim a conversão para a representação interna de UTF-8 é corretamente 0xE5, 0xB1, 0xB0. O conjunto de caracteres de execução é a página de código do Windows 1252, no entanto, e quando tentamos converter o carácter Unicode U5C70 para essa página de código, falha e utiliza o carácter de substituição predefinido de 0x3F (que é o ponto de interrogação). Emitemos aviso C4566 mas usar o convertido caractere de 0x3F. Para o literal de caracteres u8, já estamos na forma UTF-8 e não precisamos de conversão, mas não podemos armazenar três bytes em um byte e assim emitir erro C2015. Para literais de largura, o conjunto de caracteres de execução de largura é sempre UTF-16 e, portanto, o caractere largo e seqüência ampla são convertidos corretamente. Para o literal de string u8, já estamos em forma UTF-8 internamente e nenhuma conversão é feita. Na terceira coluna (UTF-8 sem BOM), os caracteres em disco são 0xe5, 0xb1 e 0xb0. Cada caractere é interpretado usando a página de código atual de 1252 e convertido em UTF-8, resultando na seqüência interna de três caracteres UTF-8 de dois bytes: (0xC3, 0xA5), (0xC2, 0xB1) e (0xC2, 0xB0 ). Para a atribuição de caracteres simples, os caracteres são convertidos novamente para a página de códigos 1252, dando 0xE5, 0xB1, 0xB0. Isso resulta em um literal multicharacter e os resultados são os mesmos que quando o compilador encontra abcd. O valor de um literal de múltiplos caracteres é implementação definida e em VC é um int onde cada byte é de um caractere. Ao atribuir a um char, você começa a conversão e apenas ver o byte baixo. Para literais de caracteres u8 geramos o erro C2015 ao usar mais de um byte. Nota: O tratamento de compiladores de literais multicharacter é muito diferente para caracteres estreitos e caracteres largos. Para caracteres largos, tomamos apenas o primeiro caractere do literal multicharacter, que neste caso é 0x00E5. No literal de cadeia estreita, a sequência é convertida de volta utilizando a página de código actual e resulta em quatro bytes: 0xe5, 0xb1, 0xb0, 0. O literal da cadeia u8 utiliza o mesmo conjunto de caracteres da representação interna e é 0xC3, 0xA5, 0xC2 , 0xB1, 0xC2, 0xB0, 0.Para um literal de cadeia larga, usamos UTF-16 como o conjunto de caracteres de execução que resulta em 0x00E5, 0x00B1, 0x00B2, 0. Finalmente, na quarta coluna temos o arquivo salvo usando a página de código 936, onde o caractere é armazenado no disco como 0x8C, 0xDB. Nós convertê-lo usando a página de código atual de 1252 e obter dois caracteres UTF-8 de dois bytes: (0xC5, 0x92), (0xC3, 0x9B). Para o literal estreito char, os caracteres são convertidos de volta para 0x8C, 0xDB eo char obtém o valor de 0xDB. Para o u8 char literal, os caracteres não são convertidos, mas é um erro. Para o literal char largo, os caracteres são convertidos para UTF-16 resultando em 0x0152, 0x00DB. O primeiro valor é usado e 0x0152 é o valor. Para literais de seqüência de caracteres, as conversões semelhantes são feitas. Alterando a página de código do sistema Os resultados para a segunda e terceira colunas também serão diferentes se uma página de código diferente de 1252 estiver sendo usada. Das descrições acima, você deve ser capaz de prever o que vai acontecer nesses casos. Devido a essas diferenças, muitos desenvolvedores só criarão em sistemas que estão definidos para a página de código 1252. Para outras páginas de código, você pode obter resultados diferentes sem avisos ou erros. Diretivas do compilador Há também duas diretivas do compilador que podem afetar esse processo. Estes são pragma setlocale e pragma executioncharacterset. O pragma setlocale é documentado um pouco aqui msdn. microsoft/en-us/library/3e22ty2t. aspx. Este pragma tenta permitir que um usuário altere o conjunto de caracteres de origem para um arquivo como ele está sendo analisado. Parece ter sido adicionado para permitir que literais largos sejam especificados usando arquivos não-Unicode. No entanto, há bugs nesta que efetivamente só permitem que ele seja usado com conjuntos de caracteres de um único byte. Se você tentar adicionar um local de configuração pragma para o exemplo acima como este. Pragma setlocale (8220.9368221) const char buffer 82208221 const wchart wbuffer L82218221 const char ch 82168217 const wchart wch L82178217 Os resultados estão na Tabela 2, com as diferenças destacadas em vermelho. Tudo o que fez foi fazer com que mais casos não conseguissem converter e resultar no caractere 0x3F (). O pragma não muda realmente como o arquivo de origem é lido, em vez disso, é usado somente quando caracteres de largura ou literais de cadeia larga estão sendo usados. Quando um literal de largura é visto, o compilador converte caracteres UTF-8 internos individuais de volta para 1252, tentando desfazer a conversão que aconteceu quando o arquivo foi lido. Em seguida, converte-os a partir do formulário bruto para a página de códigos definida pelo pragma setlocale. No entanto, neste caso particular, a conversão inicial em UTF-8 na coluna 3 e na coluna 4 resulta em 3 ou 2 caracteres UTF-8 respectivamente. Por exemplo, na coluna 4, o carácter UTF-8 interno de (0xC5, 0x92) é convertido novamente para CP1252, resultando no carácter 0x8C. O compilador, em seguida, tenta converter que para CP936. No entanto, 0x8C é apenas um byte de chumbo, não um caractere completo, portanto, a conversão falha ceder 0x3F, o caractere de substituição padrão. A conversão do segundo caractere também falha, resultando em outro 0x3F. Assim, coluna três termina com três caracteres 0x3F para o literal de cadeia larga e coluna 4 tem dois caracteres 0x3F no literal. Para um arquivo Unicode com uma lista técnica, o resultado é o mesmo que antes, o que faz sentido, pois a codificação do arquivo foi fortemente especificada através da BOM. Tabela 2 8211 Exemplo de resultados hoje ao compilar código com várias codificações. Diferenças da Tabela 1 em vermelho. 0x003F, 0x003F, 0 O outro pragma que afeta tudo isso é pragma executioncharacterset. É preciso um conjunto de caracteres de execução de destino, mas apenas um valor é suportado e que é utf-8. Ele foi introduzido para permitir que um usuário especifique um conjunto de caracteres de execução utf-8 e foi implementado após o VS2008 e o VS2010 terem sido enviados. Isso foi feito antes do prefixo literal u8 foi suportado e não é realmente necessário por mais tempo. Neste ponto, nós realmente incentivamos os usuários a usar os novos prefixos em vez de pragma executioncharatureset. Resumo dos problemas atuais Há muitos problemas com pragma setlocale. Não pode ser definido para UTF-8, que é uma limitação importante. Ele só afeta caracteres e literais de caracteres. Ele realmente não funciona corretamente com conjuntos de caracteres DBCS. O pragma executioncharacterset permite codificar seqüências estreitas como UTF-8, mas não suporta qualquer outro conjunto de caracteres. Além disso, a única maneira de definir isso globalmente é usar / FI (incluir força) de um cabeçalho que contém esse pragma. Tentando compilar o código que contém cadeias não ASCII em uma forma de plataforma cruzada é muito difícil de obter direito. Novas Opções na Atualização VS2015 2 Para resolver esses problemas, existem várias novas opções de linha de comando do compilador que permitem especificar o conjunto de caracteres de origem e o conjunto de caracteres de execução. A opção / source-charset: pode ter um nome de conjunto de caracteres IANA ou um identificador de página de código do Windows (prefixo com um ponto). Se um nome IANA é passado, isso é mapeado para uma página de código do Windows usando IMultiLanguage2 :: GetCharsetInfo. A página de código é usada para converter todos os arquivos BOM-less que o compilador encontra para seu formato interno UTF-8. Se UTF-8 é especificado como o conjunto de caracteres de origem, então nenhuma tradução é executada em todos desde que o compilador usa UTF-8 internamente. Se o nome especificado é desconhecido ou algum outro erro ocorre recuperar informações na página de código, em seguida, um erro é emitido. Uma limitação é não ser capaz de usar UTF-7, UTF-16 ou qualquer conjunto de caracteres DBCS que usa mais de dois bytes para codificar um caractere. Além disso, uma página de código que não é um superconjunto de ASCII pode ser aceita pelo compilador, mas provavelmente causará muitos erros sobre caracteres inesperados. A opção / source-charset afeta todos os arquivos na unidade de tradução que não são identificados automaticamente. (Lembre-se de que nós identificamos automaticamente arquivos com um BOM e também arquivos BOM-menos UTF-16.) Portanto, não é possível ter um arquivo codificado UTF-8 e um arquivo DBCS codificado na mesma unidade de tradução. A opção /execution-charset:ltiana-namegt. NNNN usa o mesmo mecanismo de pesquisa que / source-charset para obter uma página de código. Ele controla como caracteres estreitos e literais de seqüência de caracteres são gerados. Há também uma opção / utf-8 que é um sinônimo para setting / source-charset: utf-8 e / execution-charset: utf-8. Observe que se qualquer uma dessas novas opções são usadas, é agora um erro usar pragma setlocale ou pragma execução-character-set. Entre as novas opções eo uso de literais u8 explícitos, não deveria ser mais necessário usar esses pragmas antigos, especialmente dados os bugs. No entanto, os pragmas existentes continuarão a funcionar como antes se as novas opções não forem utilizadas. Finalmente, existe uma nova opção / validate-charset, que é ativada automaticamente com qualquer uma das opções acima. É possível desligar isso com / validate-charset-, embora isso não seja recomendado. Anteriormente, faria alguma validação de alguns charsets ao converter para o formato UTF-8 interno, no entanto, não faria nenhuma verificação de arquivos de origem UTF-8 e apenas lê-los diretamente, o que poderia causar problemas sutis mais tarde. Esse switch habilita a validação de arquivos UTF-8 independentemente de haver ou não uma lista técnica. Exemplo revisitado Ao especificar corretamente o conjunto de caracteres fonte quando necessário, os resultados são agora idênticos, independentemente da codificação do arquivo de origem. Além disso, podemos especificar um conjunto de caracteres de execução específicos independentes do conjunto de caracteres de origem e os resultados devem ser idênticos para um conjunto de caracteres de execução específico. Na Tabela 3, você pode ver que agora obtemos exatamente os mesmos resultados independentemente da codificação do arquivo de origem. Os dados em verde indicam uma alteração a partir do exemplo original na Tabela 1. A Tabela 4 mostra os resultados da utilização de um conjunto de caracteres de execução de UTF-8 e Tabela 5 usa GB2312 como conjunto de caracteres de execução. Tabela 3 8211 Exemplo usando fonte-charset correto para cada arquivo de origem (página de código atual 1252). O Green mostra as diferenças da Tabela 1. Do8217s, Don8217ts e o Futuro No Windows, salve arquivos como Unicode com uma lista técnica quando possível. Isso evitará problemas em muitos casos ea maioria das ferramentas suporta arquivos de leitura com uma lista técnica. Nos casos em que já existam ficheiros UTF-8 sem BOM ou onde a alteração de uma lista de materiais é um problema, utilize a opção / source-charset: utf-8 para ler correctamente estes ficheiros. Não use / fonte-charset com algo diferente de utf-8 a menos que nenhuma outra opção exista. Salvar arquivos como Unicode (mesmo BOM-less UTF8) é melhor do que usando uma codificação DBCS. O uso de / execution-charset ou / utf-8 pode ajudar quando o código de segmentação entre Linux e Windows como Linux normalmente usa arquivos UTF-8 sem BOM e um conjunto de caracteres de execução UTF-8. Não use pragma executioncharacterset. Em vez disso, use literais u8 onde necessário. Não use pragma setlocale. Em vez disso, salve o arquivo como Unicode, use seqüências de bytes explícitas ou use nomes de caracteres universais em vez de usar vários conjuntos de caracteres no mesmo arquivo. Nota: Muitas APIs do Windows e do CRT atualmente não suportam strings codificadas em UTF-8 e nem a página de códigos do Windows nem a localidade do CRT podem ser definidas como UTF-8. Estamos atualmente investigando como melhorar nosso suporte UTF-8 em tempo de execução. No entanto, mesmo com essa limitação muitos aplicativos na plataforma Windows usam UTF-8 codificação internamente e converter para UTF-16 onde necessário no Windows. Em uma futura versão principal do compilador, gostaríamos de alterar o processamento padrão de arquivos sem BOM para assumir UTF-8, mas alterar isso em uma atualização tem o potencial de causar muitas alterações de quebra silenciosa. A validação de arquivos UTF-8 deve pegar quase todos os casos em que é uma suposição incorreta, por isso minha esperança é que ele vai acontecer. USB-ISS Módulo de Comunicações Multifuncionais USB Especificação Técnica Visão Geral O Módulo de Comunicações USB Multifunção USB-ISS fornece uma interface completa entre Seu PC eo barramento I2C, barramento SPI, uma porta serial e entrada analógica de uso geral ou E / S digital. O módulo é alimentado a partir do USB. A tensão de operação é selecionável entre 3.3v e 5v. E pode fornecer até 80mA em 5v para circuitos externos a partir de uma porta padrão 100mA USB. Suporte I2C em 100khz Suporte I2C em 20khz-1000khz Fixo 20,50,100,400 amp1000khz Bootloader Link - Fit link para o modo Bootloader 3.3v ou 5v Adicionar o link para 5v, removê-lo para 3.3v O processador na USB-ISS é igualmente feliz a partir de 3.3v ou a partir de 5v. Com os LEDs ele leva até 20mA então quando 5v é selecionado ligando os pinos de seleção de energia, o módulo USB-ISS pode fornecer até 80mA para dispositivos externos. Quando o link é removido um regulador 3.3v fornece a energia. Este regulador é capaz de 50mA, assim quando funcionar em 3.3v até 30mA está disponível a seus circuitos. Se a sua aplicação requer mais do que isso, ou tem a sua própria fonte, em seguida, deixe o p 3,3 v / 5v desconectado. Não aplique sua própria tensão a este pino. LEDs O LED verde é uma indicação de energia e está ligado o tempo todo o módulo é conectado a uma porta USB alimentado. O LED vermelho piscará sempre que houver um comando I2C ou SPI válido recebido. Pinos de E / S Cada pino de E / S, de 1 a 4, pode ser selecionado individualmente para ser Entrada Analógica ou Entrada Digital ou Saída Digital. As entradas não aceitarão voltagem mais alta do que a fonte, assim quando operando em 3.3v as entradas não são 5v tolerantes. As entradas analógicas variam de 0v ao fornecimento para um intervalo de 0-1023 (conversão A / D de 10 bits). SCL e SDA Estes pinos são as conexões de barramento I2C. Eles devem ser conectados diretamente aos pinos SCL e SDA em seu dispositivo I2C. O módulo USB-ISS é sempre um mestre de barramento e está equipado com resistores de pull-up de 4,7k na PCB. Esses resistores são automaticamente desconectados em outros modos. SDI, SCK, SDO e SD SDI é a entrada SPI para o USB-ISS, ligá-lo a SDO no seu dispositivo. SDO é a saída SPI do USB-ISS, ligue-o a SDI no seu dispositivo. SCK é a saída de relógio SPI da USB-ISS, ligue-a a SCK no seu dispositivo. CE é o sinal ativo baixo da habilidade da microplaqueta, coneta-o a CE em seu dispositivo. Tx e Rx Estes são sinais de nível lógico, não RS232. Não ligue isto a uma porta RS232 sem utilizar um chip de inversor de nível lógico RS232 adequado. 0v Ground O pino 0v Ground deve ser conectado ao 0v (terra) em seu dispositivo. Comandos de configuração O comando USB-ISS (0x5A) é utilizado para operações internas. Existem três subcomandos: I / OCHANGE não é realmente um modo de operação. É usado para alterar o modo de E / S entre Entrada Analógica, Entrada Digital e Saída Digital sem alterar as configurações Serial ou I2C. Os modos I2C terão E / S nos pinos I / O1 e I / O2. O modo Serial terá I / O nos pinos I / O3 e I / O4. I2C e Serial podem ser combinados, por exemplo I2CS100KHZ (0x40) SERIAL (0x01) 0x41. SPI requer todos os quatro pinos de E / S para que não haja outras opções para este modo. O modo de E / S requer um byte IOTYPE adicional para definir o tipo de E / S para cada pino. O byte IOTYPE é constituído por 4 pares de bits, 1 par para cada pino I / O - 4B, 4A, 3B, 3A, 2B, 2A, 1B, 1A O modo serial é compatível com ambos os formatos de bits de parada 1 e 2, É transmite 2 bits de parada e só precisa receber 1. Não há paridade. IOCHANGE Não é realmente um modo de operação. É usado para alterar o modo de E / S entre Entrada Analógica, Entrada Digital e Saída Digital sem alterar as configurações Serial ou I2C. Ele só precisa ser usado quando você está usando modos Serial ou I2C e você deseja alterar os pinos de E / S. O formato é: IOTYPE (ver exemplo acima) Em todos os comandos de configuração de modo, dois bytes são retornados. Consulte Bytes de Resposta abaixo. Modos I2C Existem 7 comandos I2C como detalhado acima. Eles diferem apenas na freqüência SCL e se eles usam um driver de bit bit de software ou o hardware I2C no chip PIC. O comando I2C por si só terá I / O nos pinos I / O1 e I / O2. Este é um comando de configuração de 4 bytes. IOTYPE (veja o modo I / O acima) Este exemplo irá inicializar I2C para 100khz usando o hardware I2C periféricos no chip PIC. Os comandos I2C podem ser combinados com o modo SERIAL. Quando combinado com SERIAL, I / O1 é o pino Rx e I / O2 é o pino Tx. Este é um comando de configuração de 5 bytes. Divisor de taxa de transmissão (byte alto) Divisor de taxa de transmissão (byte baixo) A fórmula para calcular a taxa de transmissão é a mesma que para I / OSerial acima. Em todos os comandos de configuração de modo, dois bytes são retornados. Consulte Bytes de Resposta abaixo. Modo SPI Este modo requer todos os quatro pinos I / O, portanto não pode ser combinado com serial, I2C ou I / O. Consulte o diagrama de conexão acima para pin-outs. O modo SPI é capaz de operar em todas as quatro fases de relógio possíveis. O comando SPIMODE (0x90) pode ser combinado com os bits de seleção de fase. Tx na transição do relógio ativo para ocioso, o estado ocioso para o relógio é de baixo nível Tx na transição de ativo para o relógio de inatividade, o estado ocioso para o relógio é de alto nível Tx na transição de ocioso para o relógio ativo, A transição de Idle para relógio ativo, o estado ocioso para o relógio é de nível alto 0x90 é o modo padrão, use isso com SPI SRAM, EEPROMs, etc. Configurando o modo SPI é um comando de 4 bytes: O divisor SCK define a velocidade do clock SPI. A fórmula é: Divisor (6000000 / SCK) -1 Para um SCK de 3Mhz, divisor (6000000/3000000) -1 1 Para 500khz SCK, divisor (6000000/500000) -1 11 O divisor máximo de 255 dá o SCK mais lento de apenas 23,44khz. Um mínimo de 0x01 deve ser definido para o divisor, se você definir 0x00 será o mesmo que 0x01. Em todos os comandos de configuração de modo, dois bytes são retornados. Consulte Bytes de Resposta abaixo. Bytes de Resposta A resposta para os quadros de definição de modo é sempre dois bytes. O primeiro byte é ACKnowledge (0xFF) ou NotACKnowledge (0x00). Se você receber um ACK, então o segundo byte será apenas 0x00. Se você receber um NACK, então o segundo byte será a razão, da seguinte forma: 0x05 Comando Desconhecido 0x06 Erro Interno 1 0x07 Erro Interno 2 você nunca deve ver estes Em circunstâncias normais a resposta será 0xFF, 0x00 Outras Páginas Técnicas Testando o USB - ISS Temos um pequeno programa de teste que permite testar os diferentes modos de operação do módulo USB-ISS. É escrito na versão do Visual C 2010. Esquerda imagem mostrar teste de Hardware I2C em 400khz com I / O. Ele está escrevendo e lendo um inteiro de quatro bytes (32 bits). A E / S foi ajustada para analógica e os valores medidos são exibidos. Aqui estamos escrevendo e lendo para um SPI RAM.

No comments:

Post a Comment