Похоже, только защиту от ошибок присвоения логическому типу данных результата арифметической операции. Но кому такое может понадобиться на практике?! Ну и стандартизация логического типа данных - будь название типа в стиле Си, можно было бы использовать в качестве аргумента/результата функции. Но запись _Bool func( int, float, _Bool); выглядит ужасно.
Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
Добавлено: Пт дек 16, 2016 06:52:29
Собутыльник Кота
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2708 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
По поводу экономии памяти для флагов. Во многих AVR есть три штуки (а может в каких и больше ) регистров ввода/вывода общего назначения. Там можно держать 24 флага. А так как данная область памяти поддерживает дополнительные команды (типа out и sbi), то можно сэкономить и ОЗУ И ФЛЭШ. И при использовании данных регистров оптимизатор подберет нужные минимальные команды, так же с другими регистрами в/в.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
вы так и не привели пример кода, написанного БЕЗ _Bool (как следует из моих тезисов), который бы при компиляции в С99 давал бы ошибку именно по причине отсутствия или наоборот, наличия, этого самого логического типа. Как кто вы извиваетесь, я не знаю.
То есть ваш тезис о том, что мои "советы" могут привести к проблемам у начинающих или любителей, вы так и не доказали. не доказанное утверждение как называется? если мягко, то гипотезой, если грубо, то брехнёй ложью.
Что вы пытаетесь до всех донести? Что в Си добавили лишнюю фичу, назвав ее стандартной, которая сделала все еще сложнее и страннее? Да, это так. Я предлагаю добровольно отказаться от нее - и даже, о чудо! - вы именно так и поступаете сами! Но тем не менее продолжаете нести чушь о том, что это порочный принцип.
В Си полно чудес, одно void и void* чего стоит! Но раз уж этим чудесам в обед сто лет, то деваться уже некуда... а КОСТЫЛЬ (именно костыль, даже нормального ключевого слова не нашлось - пришлось подчеркивание добавлять!) _Bool останется костылем, не смотря на то, что это стандартный костыль.
нет ничего абсолютно в Си, чего нельзя было бы реализовать понятно, кратко и переносимо без _Bool. нет ничего такого с _Bool, чего невозможно было бы лучше, красивее, логичнее и понятнее реализовать БЕЗ ОНОГО.
Добавлено after 5 minutes 48 seconds:
WiseLord писал(а):
Вот на пальцах хотелось бы услышать пояснение, что делает bool j = (a > b) + (b < c);
что делает? доказывает, что появился еще один способ выстрелить себе в ногу! мало ли в Си способов навредить программе? вот еще один!
НЕЦЕЛОЧИСЛЕННЫЕ ЛОГИЧЕСКИЕ РЕЗУЛЬТАТЫ отлично АРИФМЕТИЧЕСКИ складываются, давая в итоге ЦЕЛОЧИСЛЕННЫЙ результат, успешно превращаемый В НЕЦЕЛОЧИСЛЕННЫЙ. круто, да? хотя стандарта я не читал - может быть, результат a>b так и остался ЦЕЛОЧИСЛЕННЫМ, и вовсе не является _Bool-ом? вся магия _Bool проявляется только в результате ЯВНОГО или НЕЯВНОГО приведения типов?!
вот именно этого в стандарте всем и не хватало!
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
ptr128, какие преимущества даст использование _Bool?
Выше все описано же!
COKPOWEHEU писал(а):
название типа в стиле Си
Оно и есть в стиле C:
Код:
#include <stdbool.h> ... bool j = (a > b) + (b < c); bool k = i;
Z_h_e писал(а):
Во многих AVR есть три штуки (а может в каких и больше ) регистров ввода/вывода общего назначения. Там можно держать 24 флага.
А зачем Вам МК и чем он будет заниматься, если все его GPIO Вы собрались использовать в качестве RAM?
ARV писал(а):
бы при компиляции в С99 давал бы ошибку
Пранойя?
ptr128 писал(а):
Это ARV ошибки мерещатся. Я ни слова про ошибки не писал.
_________________ Не ошибается только то, кто ничего не делает. Тот, кто признает свои ошибки, на них учится. Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Согласен, но какие-то не очевидные преимущества. И потом, как-то не вышло экономии RAM лично у меня при замене четырёх uint8_t на _Bool. Как мне 4 битовых флага в один байт компилятором уместить с использованием _Bool?
_________________ Не ошибается только то, кто ничего не делает. Тот, кто признает свои ошибки, на них учится. Глупец же, упорствуя в своих заблуждениях, остается глупцом.
наверное тот, кто выдергивает цитаты из контекста...
ARV писал(а):
ptr128 писал(а):
В том то и дело, что в C99 есть - _Bool
педантичный вы наш, цитируйте корректно:
ARV писал(а):
не пользоваться "не родными" (по происхождению) типами. нет в Си "логического" типа данных
неужели не понятно, что изначально в Си даже не предполагалось такого типа, а _Bool в С99 - это либо костыль (подчеркивание в начале как бы намекает), либо дань моде (С++)...
ну и подчеркиваю: это моё личное мнение. я не претендую на славу Кернигана и Ричи, и даже Страуструпа
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Как мне 4 битовых флага в один байт компилятором уместить с использованием _Bool?
#define BOOL_TYPE_SIZE 1
Но на размер прошивки это может повлиять только в большую сторону, так как прошивка это ROM, а не RAM
Добавлено after 4 minutes 49 seconds:
Z_h_e писал(а):
ptr128 писал(а):
А зачем Вам МК и чем он будет заниматься, если все его GPIO Вы собрались использовать в качестве RAM?
Я такого не писал, не придумывайте. Слава богу "все ходы записаны".
Z_h_e писал(а):
По поводу экономии памяти для флагов. Во многих AVR есть три штуки (а может в каких и больше ) регистров ввода/вывода общего назначения. Там можно держать 24 флага.
Если вы регистрами ввода/вывода общего назначения называете не General Purpose In-Out = GPIO, то я даже не знаю, как с Вами дискутировать. Почитайте, например, даташит для начала, чтобы мы могли воспользоваться единой терминологией.
Добавлено after 2 minutes 15 seconds:
ARV писал(а):
ptr128 писал(а):
И кто тут брешет?
ARV писал(а):
нет в Си "логического" типа данных
Соболезную... Искренне. Вроде ведь не глупый человек, но если не учиться на собственных ошибках...
_________________ Не ошибается только то, кто ничего не делает. Тот, кто признает свои ошибки, на них учится. Глупец же, упорствуя в своих заблуждениях, остается глупцом.
как следует назвать человека, который зацепился за выдранную из контекста фразу и тычет ею постоянно, не вникая в смысл сказанного? наверное, процитированные слова неприменимы в этом случае... поэтому в очередной раз поясняю: "нет в Си" - лично для меня означает, что Крниган с Ричи этого не задумывали, и много лет не было, и миллионы программистов преотлично обходились без этого. однополых браков тоже не было, но я не собираюсь их признавать не смотря на то, что они уже есть...
я сторонник настоящих ценностей
ptr128 писал(а):
Почитайте, например, даташит для начала
вот-вот, почитайте, вам это просто необходимо. даю наводку: ключевые слова GPIOR0...GPIOR3 AVR.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
Добавлено: Пт дек 16, 2016 07:43:34
Собутыльник Кота
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2708 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
ptr128 писал(а):
Если вы регистрами ввода/вывода общего назначения называете не General Purpose In-Out = GPIO, то я даже не знаю, как с Вами дискутировать. Почитайте, например, даташит для начала, чтобы мы могли воспользоваться единой терминологией.
Да, под регистрами в/в общего назначения, я понимаю регистры в/в общего назначения. Например в Atmege xx8 их три штуки, их мнемоника GPIORn.
Цитата:
The ATmega48A/PA/88A/PA/168A/PA/328/P contains three General Purpose I/O Registers. These registers can be used for storing any information, and they are particularly useful for storing global variables and Status Flags. General Purpose I/O Registers within the address range 0x00 - 0x1F are directly bit-accessible using the SBI, CBI, SBIS, and SBIC instructions.
Вы будете смеятся, но это я как раз в ДШ читал. А дискуссию с Вами действительно трудно вести, потому что Вы ее и не ведете, целью которой найти "истину", а пытается доказывать свою неоспоримую правоту.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Последний раз редактировалось Z_h_e Пт дек 16, 2016 07:46:04, всего редактировалось 2 раз(а).
Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
Добавлено: Пт дек 16, 2016 07:48:46
Модератор
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4575 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Три страницы боёв, из-за какого-то добавленного типа в стандарт Ну добавили и добавили, хочешь - пользуйся, не хочешь - не пользуйся... Я, например, тип bool юзаю. Если компилятор его поддерживается и мне нужен именно логический тип. И никто мне это не запретит делать.
я сделал тест своей идеи на счет структуры... так вот, _Bool не уменьшает размер ОЗУ, необходимого под хранение структуры с тремя полями типа _Bool... как было 3 байта, так и осталось. для экономии ОЗУ так и осталось необходимым писать
Код:
struct{ _Bool a : 1; _Bool b : 1; _Bool с : 1; } var;
тестировал в WinAVR с опцией -std=gnu99
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Да, под регистрами в/в общего назначения, я понимаю регистры в/в общего назначения. Например в Atmege xx8 их три штуки, их мнемоника GPIORn.
Извиняюсь, я не понял что речь шла о них. Почему то переклинило на регистры портов GPIO (PORTn/PINn/DDRn).
_________________ Не ошибается только то, кто ничего не делает. Тот, кто признает свои ошибки, на них учится. Глупец же, упорствуя в своих заблуждениях, остается глупцом.
я сделал тест своей идеи на счет структуры... так вот, _Bool не уменьшает размер ОЗУ, необходимого под хранение структуры с тремя полями типа _Bool... как было 3 байта, так и осталось.
И как увеличивает код программы использование такой структуры?
а никто и не запрещает. речь о следовании догмам...
prinv писал(а):
Для Atmel Studio 7 _Bool кажется является синонимом uint8_t Кто может объяснить сей выкрутас?
я могу объяснить костыль - он и есть костыль, главное - соответствие стандарту. а стандарт сказал "должен быть, но все равно какой" - вот он и есть. кушайте на здоровье.
ptr128 писал(а):
Почему то переклинило на регистры портов
ничего, бывает... то на стандартах переклинит, то на портах...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Так ARV запрещает Упорно ведь утверждает, что если по его личному мнению логического типа данных в C нет, то значит так оно и есть
_________________ Не ошибается только то, кто ничего не делает. Тот, кто признает свои ошибки, на них учится. Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения