Перейти к содержанию
    

Как стандартно в Си узнать размер char-а

До сих пор не понял.

Просто BIOS я не использовал.

 

тут size передаётся в "железных" USB-байтах, а buf - указатель на буфер, из которого будет извлечено 100% бит, то есть если это char[10], то оттуда передастся 20 "железных" USB-байт.

Тады ой - с нечетным количеством данных получаются грабли :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тут size передаётся в "железных" USB-байтах
А Вы говорите "октет", как в сетях принято :-)

Именно потому, что байты - они всякие бывают.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А Вы говорите "октет", как в сетях принято :-)

Да-да, тоже почему-то это слово вспомнилось :) Но ведь сила привычки, от байтов отучиться трудно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А Вы говорите "октет", как в сетях принято :-)

Именно потому, что байты - они всякие бывают.

The popularity of IBM's System/360 architecture starting in the 1960s and the explosion of microcomputers based on 8-bit microprocessors in the 1980s has made eight bits by far the most common size for a byte. The term octet is widely used as a more precise synonym where ambiguity is undesirable (for example, in protocol definitions).

Ну да, исхитрились. Хотя в русской литературе везде байтом считается 8 бит без каких-либо оговорок.

 

Даже в доке от TI

Byte = An 8-bit value. A byte is the smallest unit of data transferred in a DMA channel.
Изменено пользователем GetSmart

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На этом TMS-е есть адресации "low_byte(addr)" и "high_byte(addr)" для команд load/store. Так что байт там как у всех.

А по скорости/накладным они такие же, как и для словной адресации? Или это некое расширение, реализуемое за счет эмуляции (типа, слово считывается целиком, в АЛУ модифицируется нужный байт и потом складываются в память)?

 

Тогда несостыковка получается, т.к. явно указывается, что sizeof(char)=1. То есть если у системы восьмибитный байт, то char тоже обязан быть восьмибитным.

Да, насчет sizeof(char) был неправ (давно было, забывать начал :) ). В плюсах тоже так же: sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А по скорости/накладным они такие же, как и для словной адресации? Или это некое расширение, реализуемое за счет эмуляции (типа, слово считывается целиком, в АЛУ модифицируется нужный байт и потом складываются в память)?

Да, по скорости и накладным тоже самое, но только в том случае, если заранее известно, какой байт нужен - low или high. К АЛУ это отношения не имеет, так как при обращениях оно управляет сигналами "byte enable (BE[1:0])" шины, или DQM-ами, если это SDRAM. Но адрес-то при этом все равно словесный, а выбор байта осуществляется при помощи указания конкретной команды ассемблера. Т.е. если организовывать полностью произвольный доступ к любому байту - то нужно иметь словесный адрес, бит выбора байта и условное выполнение той или другой команды. Плюс ко всему, если слово памяти может быть аргументом любой арифметики и можно сказать любой операции вообще, то байт из памяти только или load, или store.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е. если организовывать полностью произвольный доступ к любому байту - то нужно иметь словесный адрес, бит выбора байта и условное выполнение той или другой команды. Плюс ко всему, если слово памяти может быть аргументом любой арифметики и можно сказать любой операции вообще, то байт из памяти только или load, или store.

Очередное дерьмецо от TI... Годное только для обработки звука.

Непонятно только зачем там USB.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем очередное дерьмецо от TI... Годное только для обработки звука.

Щас SM Вас порвёт :biggrin:

 

На самом деле, раз адресация в проце на 90% только пословная, то TI сделали правильно. Там только DMA имеет байтовый адрес.

 

Асмописатели на TMS наверное очень довольны такой архитектурой, в отличие от сишников. SM как раз один из них.

Изменено пользователем GetSmart

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Щас SM Вас порвёт :biggrin:

Ну от этого Вам будет не легче передать фрейм нечетной длины. :P

 

А TI изделия (без учета приобретений на стороне - BB, Luminary и т.п.) всегда считал и продолжаю считать неадекватными, за редким исключением.

Почти каждый их DSP / MK - это "шедевр" :) полученный в результате больной фантазии индусов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну от этого Вам будет не легче передать фрейм нечетной длины. :P

Да легко. DMA-контроллером без участия проца вообще. Откуда угодно, куда угодно, по любым событиям, включая внешние. Это только С-шникам некоторые трудности, да и то, из-за писателей CSL и DSP/BIOS. Без них напрягов нет никаких.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну от этого Вам будет не легче передать фрейм нечетной длины. :P

Проблема не в невозможности, а в неудобстве/некрасивости сишной реализации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насколько помню, sizeof возвращает размер в минимально адресуемых единицах на данной платформе. И "байтом" обычно эту минимально адресуемую ячейку памяти и называют, другими словами, на этом TMS'е байт как раз 16 бит. Поэтому sizeof выдает правильный результат.

в каком-то из TI'ных мануалов есть фраза что-то вроде "вообще-то байт конечно 8 бит, но если очень хочется, как у нас, то байт будет 16 бит. Именно в этих 16-ти битных байтах и выдает результат sizeof"... я еще над ней посмеялся))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну а в C99 написано:

3.6

1 byte

addressable unit of data storage large enough to hold any member of the basic character

set of the execution environment

2 NOTE 1 It is possible to express the address of each individual byte of an object uniquely.

3 NOTE 2 A byte is composed of a contiguous sequence of bits, the number of which is implementationdefined.

The least significant bit is called the low-order bit; the most significant bit is called the high-order

bit.

Так что техасцы в своем праве.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...