• ,
  • вход на сайт

    Имя пользователя :
    Пароль :

    Восстановление пароля Регистрация
    О типах данных в AVR-GCC и ARM-GCC

    О типах данных в AVR-GCC и ARM-GCC

      Хотел поговорить о типах данных на различных платформах, так как столкнулся с проблемой совместимости размеров типов при переносе кода с AVR на STM32 + Cubieboard.

      Если вы программируете на С/С++, то наверняка работаете с такими типами данных как char, unsigned char, int, unsigned int, long int, long long int и так далее. При написании программы, размер типа данных может отличатся от платформы к платформе. Например, в 8-битном компиляторе AVR-GCC Int занимает 16 бит (4 байта), а в то время как тип Int в ARM-GCC занимает 32 бита. Размер типа данных зависит от платформы, компилятора и библиотек. При портированный кода на другие контроллеры, платформы, можно долго искать причины багов и проблем.

      Чтобы проверить размерность данных можно использовать функцию SizeOf(), которая возвращает значение в байтах. Но что нужно делать когда, нужно код сделать портируемым? Некоторые большие библиотеки могут работать на любой системе, включая 8-бит, 16-бит, 32-бит или 64-бит. Чтобы устранить эту проблему, в стандарте С99 были введены портативные типы данных, которые определены в файле заголовка stdint.h стандартной библиотеки C.

      Портативные типы данных, позволяют создавать переменные целочисленного типа данных нужной размерности. Типы записываются в формате [u]intN_t, где u - модификатор "unsigned" и N - размер в байтах.

    Примеры:

    Integer type Signed Unsigned
    8-bit int8_t uint8_t
    16-bit int16_t uint16_t
    32-bit int32_t uint32_t
    64-bit int64_t uint64_t

      Кроме этого, можно переопределять минимальное и максимальное значение. Например, наименьшим значением для типа int32_t является INT32_MIN.

    
    #define INT16_MIN -32768
    #define INT16_MAX 32767
    #define UINT16_MAX 65535
    

    Более подробно о типах данных, которые не зависят от платформы можно почитать здесь: https://ru.wikipedia.org/wiki/Stdint.h

     

     


    Теги:
    • 0
    Новость опубликована 2-10-2015, 22:45, её прочитали 1426 раз(а).
    Понравилась тема? Посмотрите эти:
    Информация
    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.