-
- 8051 - особенный зверь, там и Си не совсем Си, куча нюансов и
засад. - SciFi(11.09.2023 11:04)
- Хотелось бы ознакомиться со списком засад. - Yurasvs(11.09.2023 12:36)
- 1) К периферии невозможно обращаться по указателю - только прямым обращением. Это довольно неприятно, если есть несколько одинаковых периферийных узлов. LightElf(45 знак., 11.09.2023 19:26)
- в кейле под 51 был уникальный тип данных bit. - Nikolay801_(11.09.2023 17:45)
- У IAR тоже. Tyмблep(105 знак., 11.09.2023 18:09)
- Именно типа бит у IAR нет, за ненадобностью, всё это прекрасно описывается
средствами С, как битовые поля. Но про биты периферии и битовые
переменные в памяти он знает и машинные команды для работы с битами
когда это возможно генерирует. - ЫЫyкпy(11.09.2023 19:53)
- Вот, я только что специально проверил Tyмблep(1132 знак., 12.09.2023 15:22)
- Хотя это было не обязательно. Вот описание: Tyмблep(1 знак., 12.09.2023 15:39, ссылка)
- Как интересно, оказывается в древних версиях IAR тип бит всё-таки
был. Мне приходилось иметь дело только с версиями 7, 8 и 9. В них
никаких упоминаний об этом уже не осталось. - ЫЫyкпy(13.09.2023 05:33)
- Да, там сейчас bool и спецификатор __bit - LightElf(13.09.2023 11:31)
- Кодировка документа OEM 866 - carlosh(12.09.2023 19:18)
- Как интересно, оказывается в древних версиях IAR тип бит всё-таки
был. Мне приходилось иметь дело только с версиями 7, 8 и 9. В них
никаких упоминаний об этом уже не осталось. - ЫЫyкпy(13.09.2023 05:33)
- Хотя это было не обязательно. Вот описание: Tyмблep(1 знак., 12.09.2023 15:39, ссылка)
- Описывается-то прекрасно. Но это битовое поле - часть структуры, а
не самостоятельная переменная, синтаксис недобен. И накладные там
ого-го. Потенция (возможность) использования типа bit крайне
полезна для столь дохленьких процов... POV(385 знак., 12.09.2023 15:01)
- Откройте для себя :) анонимные структуры и объединения. - ЫЫyкпy(13.09.2023 05:53)
- покажи мне мне для 51го это - POV(13.09.2023 09:02)
- Собственно про анонимные структуры и объединения в стандарте С,
называется ISO-IEC 9899-2011(E), он же известен как С11. Конкретно
для 8051 в "IAR C/C++ Compiler User Guide for 8051" вместе с
описанием расширений (Extensions for embedded systems programming)
и послаблений (Relaxations to Standard C). - ЫЫyкпy(13.09.2023 11:05)
- Я выше с99 не использую. Ну нафиг. - POV(13.09.2023 11:08)
- А что там такого страшного? Это в C++ страшно, а в тёплом ламповом
Си сплошные удобства. - Nikolay_Po(14.09.2023 08:01)
- Ну как бы а вдруг код надо будет перенести туда, где компилятор эти
штуки не умеет? - SciFi(14.09.2023 08:20)
- Какой компилятор не умеет анонимные структуры и объединения? - AlexBi(14.09.2023 09:49)
- Чем анонимная структура поможет в обсуждаемом вопросе?
Синтаксические всё равно остаётся доступ к полю структуры и со
всеми вытекающими накладными. Нахер такое счастье. - POV(14.09.2023 10:11)
- С какими такими накладными? У вас компилятор 2005г? - Nikolay_Po(14.09.2023 18:58)
- Как я понял, тут уже обсуждается наличие/отсутствие анонимных структур в разных компиляторах. Вот и стало интересно где такого нет. Для х51 такое, разумеется, будет не так эффективно как работа с переменной типа bit. - AlexBi(14.09.2023 10:22)
- Чем анонимная структура поможет в обсуждаемом вопросе?
Синтаксические всё равно остаётся доступ к полю структуры и со
всеми вытекающими накладными. Нахер такое счастье. - POV(14.09.2023 10:11)
- Какой компилятор не умеет анонимные структуры и объединения? - AlexBi(14.09.2023 09:49)
- Ну как бы а вдруг код надо будет перенести туда, где компилятор эти
штуки не умеет? - SciFi(14.09.2023 08:20)
- А что там такого страшного? Это в C++ страшно, а в тёплом ламповом
Си сплошные удобства. - Nikolay_Po(14.09.2023 08:01)
- Я выше с99 не использую. Ну нафиг. - POV(13.09.2023 11:08)
- Собственно про анонимные структуры и объединения в стандарте С,
называется ISO-IEC 9899-2011(E), он же известен как С11. Конкретно
для 8051 в "IAR C/C++ Compiler User Guide for 8051" вместе с
описанием расширений (Extensions for embedded systems programming)
и послаблений (Relaxations to Standard C). - ЫЫyкпy(13.09.2023 11:05)
- покажи мне мне для 51го это - POV(13.09.2023 09:02)
- У меня осталось впечатление, что попытки удружить дохленьким процам
и переносимость слабо совместимы. Ибо адаптация под дохликов может
убить всю гармонию, такое переносить не захочется. Если приходится
выжимать последние соки из дохлика, то лучше это делать без оглядки
на качков. - SciFi(12.09.2023 15:05)
- Ну я вот ряд небольших проектов под арм переводил.. как минимум
этот bool выглядит красиво и уместно. Я люблю строгую типизацию,
чтобы было понятно что возвращается. - POV(12.09.2023 15:06)
- Колхоз, имитация типа bdata - битовых переменных архитектуры MCS-51
через bitband на Cortex-M3 для "Кайла" (в gcc напрямую не прокатит) Chum_A(1325 знак., 13.09.2023 09:02)
- Это никому не нужно. Накладные высокие. Пусть компилятор сам решит
как ему bool сделать, хоть по 32 бита на переменную. - POV(13.09.2023 09:25)
- Нужно, если есть потребность быстро перенести исходники от MCS с
минимальными изменениями. Ещё момент, на MCS bdata хранится в
uint8_t, который можно переписать и за одну операцию изменить все
(его) bit, что часто встречалось с целью оптимизации
кода/быстродействия. И да, bitband нужен для обеспечения
атомарности доступа к bdata, как в оригинальном MCS. - Chum_A(13.09.2023 10:22)
- Я выше писал не об этом. Да и перенос с арм на 51 я думаю встречается в природе никогда. - POV(13.09.2023 10:25)
- Нужно, если есть потребность быстро перенести исходники от MCS с
минимальными изменениями. Ещё момент, на MCS bdata хранится в
uint8_t, который можно переписать и за одну операцию изменить все
(его) bit, что часто встречалось с целью оптимизации
кода/быстродействия. И да, bitband нужен для обеспечения
атомарности доступа к bdata, как в оригинальном MCS. - Chum_A(13.09.2023 10:22)
- Это никому не нужно. Накладные высокие. Пусть компилятор сам решит
как ему bool сделать, хоть по 32 бита на переменную. - POV(13.09.2023 09:25)
- Ну, bit не всё умеет из того, что умеет bool. Например bool array[]
или bool *ptr. Но если это не проблема, тогда почему бы и нет? - SciFi(12.09.2023 15:10)
- Ну да, указатели и массивы не для него.. Но как раз переносимость с 51го на арм будет полная. - POV(12.09.2023 15:12)
- Колхоз, имитация типа bdata - битовых переменных архитектуры MCS-51
через bitband на Cortex-M3 для "Кайла" (в gcc напрямую не прокатит) Chum_A(1325 знак., 13.09.2023 09:02)
- Ну я вот ряд небольших проектов под арм переводил.. как минимум
этот bool выглядит красиво и уместно. Я люблю строгую типизацию,
чтобы было понятно что возвращается. - POV(12.09.2023 15:06)
- Откройте для себя :) анонимные структуры и объединения. - ЫЫyкпy(13.09.2023 05:53)
- Вот, я только что специально проверил Tyмблep(1132 знак., 12.09.2023 15:22)
- Именно типа бит у IAR нет, за ненадобностью, всё это прекрасно описывается
средствами С, как битовые поля. Но про биты периферии и битовые
переменные в памяти он знает и машинные команды для работы с битами
когда это возможно генерирует. - ЫЫyкпy(11.09.2023 19:53)
- У IAR тоже. Tyмблep(105 знак., 11.09.2023 18:09)
- Работа с 16-битными регистрами имеет особенность - важен порядок записи младшего и старшего байта, например, при конфигурации таймеров. Но это всё в документации есть. - Costic(11.09.2023 17:14)
- Памяти мало, даже очень мало и она сегментирована. Основная память (idata) и её адреса (256 байт, 0x00-0xFF) очень плотно всем забиты. Для стека места мало. Поэтому (вложенные) вызовы функций и передача аргументов делается компилятором с выкрутасами. В этом же куске памяти находятся 4 банка для прерываний, но обычно только 1 банк используется. Доступ быстрый, если у вас байты, а если int16_t или int32_t, то становится печально и приходится байты считать. Или размещать это всё Costic(299 знак., 11.09.2023 17:11)
- Хотелось бы ознакомиться со списком засад. - Yurasvs(11.09.2023 12:36)
- unsigned char code array[] = {0,1,2,3,4,5,6,7}; - POV(11.09.2023 11:03)
- Спасибо, помогло. Теперь есть где развернуться. - Yurasvs(11.09.2023 12:30)
- 8051 - особенный зверь, там и Си не совсем Си, куча нюансов и
засад. - SciFi(11.09.2023 11:04)