Сергей Борщ 143 14 июня, 2010 Опубликовано 14 июня, 2010 · Жалоба но тут то это не 8бит, а 16 :) в этом вся "фишка"Да простят меня ReAl и dxp:Одно время для многих "программируемый микроконтроллер" и "MCS51" были тождественными понятиями, хотя как-то другие были. Сейчас для подавляющего большинства "персональная ЭВМ"==="клон IBM PC" Так и с байтом. Многие забыли, что он не есть синонимом "8-битный огрызок". Я сам уже склонен считать, что "байт==8бит" имеет степень достоверности порядка той же, что "short==16бит" (может даже выше) но ещё не стал бы считать, что иное невозможно в принципе (как невозможно "октет==9бит", и там где 8 бит *важно* - применяют это термин). И пока ещё достаточно следов того, что не все считают "байт==8бит" абсолютной истиной. © Philips Semiconductors, 1995 The I2C-bus and how to use it (including specifications) 6.0 TRANSFERRING DATA 6.1 Byte format Every byte put on the SDA line must be 8-bits long. "must be 8-bits" означает, как минимум, что в других местах не исключено и другое. HZ> сказать, что байт - это, в общем случае, непонятно какое количество бит. "сем-восемь, максимум девять, ну никак не больше десяти" :-) HZ> Про HZ> него известно только то, что это величина для измерения информации и Величина для измерения - бит, а не байт. А байт - он как ярд. Есть yd = 0.9144м(точно). А есть несколько более короткий UK и несколько более длинный US. HZ> состоит из HZ> некоторого произвольного количества бит. Только в этом случае полезность HZ> такого HZ> понятия обратно пропорциональна определенности количества бит в нем. "осмысленный по длине огрызок (bite :-) машинного слова, с которым можно работать отдельно". Толкового словаря нет под рукой? А то у меня только украинского языка, а это для многих не просто не аргумент, а аргумент в противоположную сторону :-) "байт - частина машинного слова, що складаеться звичайно з 8 бiт ..." ЗВИЧАЙНО, а не ОБОВ'ЯЗКОВО. Поскольку сейчас типично иметь машинное слово из числа бит, являющегося степенью двойки - то и байт типично 8 бит. Маловероятно, что в ближайшем будущем байт перестанет иметь степень_двойки бит. Вероятность того, что он станет 16-битным -- тоже мизерна, но уже выше (перейдут все на unicode - кому нужна будет единица памяти, которая хранит какие-то зачуханные пол-символа? :-) Или вообще - станет длиной в три трита :-) wbr, -- /* Oleksandr Redchuk, Brovary, Ukraine */ /* real '\x40' real '\x2E' kiev '\x2E' ua */ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 14 июня, 2010 Опубликовано 14 июня, 2010 · Жалоба Ну не может он обеспечить 8бит никак!Я бы смог (правда с выравниванием по границе слова или даже скорее с упаковкой двух (u)int8_t в слово, что усложнит компилятору индексацию массивов и работу с указателями). И они бы могли обеспечить математику для (u)int8_t с ограничением в 8 бит (с доп расходами естественно). Но не стали заморачиваться из-за отсутствия жизненной необходимости в этом. Выход всегда можно найти - вопрос затратности... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 14 июня, 2010 Опубликовано 14 июня, 2010 · Жалоба Я бы смогА как быть с *((volatile *)adddress)? Оно неизбежно будет "задевать" соседний байт, который вероятнее всего тоже volatile и несанкционированное чтение которого может привести к недопустимым с точки зрения компилятора последствиям. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 14 июня, 2010 Опубликовано 14 июня, 2010 · Жалоба Ну не может он обеспечить 8бит никак! Можно только побайтово перебрать массив с помощью intrinsic т.е. он там грузит в AL 16бит, а потом можно обратиться к старшему и младшему байту как к двум 8ми битным регистрам. На этом 8ми битность заканчивается :) Вообще-то в семействе С2000 есть парные инструкции типа MOVB AX.LSB,LOC16, позволяющие работать с байтами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 14 июня, 2010 Опубликовано 14 июня, 2010 · Жалоба А как быть с *((volatile *)adddress)?Как обычно - критическая секция. Да я и говорю, что слишком много геморроя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 14 июня, 2010 Опубликовано 14 июня, 2010 · Жалоба ггг. Геморрой не стоит свеч и если это volatile - там никакие критические секции вроде как не помогут. Вы всё равно считаете не нужный байт. Или я чего-то не понимаю.... В общем как тут не извращайся, а полноценного ТИПА ДАННЫХ не получить. Побайтовый доступ через MOVB AX.LSB,LOC16 - нет проблем. даже интринсик есть. Кажется __byte(int *ptr, int byte); или как-то так. Лень смотреть точно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 14 июня, 2010 Опубликовано 14 июня, 2010 · Жалоба и если это volatile - там никакие критические секции вроде как не помогут.Помогут, помогут. Вы всё равно считаете не нужный байт. Или я чего-то не понимаю.... Ну и считаю я лишний байт и что? Я же не из SFR области это по большей части делаю, где ещё могут быть варианты да и то очень маловероятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 14 июня, 2010 Опубликовано 14 июня, 2010 · Жалоба Но не стали заморачиваться из-за отсутствия жизненной необходимости в этом."Жизненная необходимость" обычно возникает в байт-ориентированных протоколах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 15 июня, 2010 Опубликовано 15 июня, 2010 · Жалоба Помогут, помогут.Сказав "А" говорите "Б". Мне тоже непонятно, чем они могут помочь. Опишите механизм. Ну и считаю я лишний байт и что?А автор такого компилятора, значит, где-то в описании должен написать "ну и не будет программа работать правильно, ну и что?" Я же не из SFR области это по большей части делаю...А компилятор об этом знает? Для него есть стандарт: "чтение volatile может вызвать изменение состояния абстрактной машины". Все. Точка. Даже если это не SFR. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 15 июня, 2010 Опубликовано 15 июня, 2010 · Жалоба Вот цитата из словаря. byte (Computer En) [techspeak] n. A unit of memory or data equal to the amount used to represent one character; on modern architectures this is usually 8 bits, but may be 9 on 36-bit machines. Some older architectures used 'byte' for quantities of 6 or 7 bits, and the PDP-10 supported 'bytes' that were actually bitfields of 1 to 36 bits! These usages are now obsolete, and even 9-bit bytes have become rare in the general trend toward power-of-2 word sizes. Historical note: The term originated in 1956 during the early design phase for the IBM Stretch computer; originally it was described as 1 to 6 bits (typical I/O equipment of the period used 6-bit chunks of information). The move to an 8-bit byte happened in late 1956, and this size was later adopted and promulgated as a standard by the System/360 . The term 'byte' was coined by mutating the word 'bite' so it would not be accidentally misspelled as bit. See also nybble. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 15 июня, 2010 Опубликовано 15 июня, 2010 · Жалоба Сказав "А" говорите "Б". Мне тоже непонятно, чем они могут помочь. Опишите еханизм.Что значит чем? - Обеспечат атомарность доступа к "спаренной" ячейке памяти. А автор такого компилятора, значит, где-то в описании должен написать "ну и не будет программа работать правильно, ну и что?" А компилятор об этом знает? Для него есть стандарт: "чтение volatile может вызвать изменение состояния абстрактной машины". Все. Точка. Даже если это не SFR. Покажите мне пожалуйтса на пальцах как это "изменение состояния абстрактной машины" возможно для внутреннего ОЗУ из не SFR области!!! А к SFR нефиг обращаться побайтно - так и написал бы в документации. Всё - никаких проблем. Спор на самом деле бесполезен. То что сделать 100% отвечающую стандарту реализацию "для всех случаев жизни" невозможно - я это понимаю, но для 99% основных применений всё же возможно! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться