-
- Да пусть в том же хидере, где Вы указали, что #define LED_PORT PORTB и что #define RED_LED_PIN 6, - описать чуть ниже для удобной работы несколько строк вроде: #define RED_LED_ON LED_PORT |= (1 < < RED_LED_PIN). И все. Лучше сразу там описать Юра(897 знак., 14.08.2013 09:10, )
- А что мешает к порту "привязать" еще что-то, например, Bill(246 знак., 14.08.2013 11:17)
- Только разводка)) Ведь реле-1 может быть на одном порту, а реле-2 на другом. А реле-3и4 - сами понимаете, на третьем. И что? В программе писать PORT_RELE_3 |= (1 < < BIT_RELE_4) ? Имена портов, как и операции |= &= не должны (по-моему) светиться Юра(639 знак., 14.08.2013 11:38, )
- того же мнения - Vit(14.08.2013 11:57)
- Только разводка)) Ведь реле-1 может быть на одном порту, а реле-2 на другом. А реле-3и4 - сами понимаете, на третьем. И что? В программе писать PORT_RELE_3 |= (1 < < BIT_RELE_4) ? Имена портов, как и операции |= &= не должны (по-моему) светиться Юра(639 знак., 14.08.2013 11:38, )
- +1. Только косметики чуток добавляю - #define RED_LED_ON() do{ LED_PORT |= (1 < < RED_LED_PIN); }while(0) Vit(168 знак., 14.08.2013 09:21)
- do-while зачем? просто { } не достаточно? - abivan(14.08.2013 12:00)
- это чтобы нужно было точку-с-запятой поставить if(mode)RED_LED_ON(); else GREEN_LED_ON(); - Vit(14.08.2013 12:04)
- ясно. А ведь было уже. Забуду ведь опять, потому как не использую. Лишней писанины много, а когда раз в год ошибка появляется скобки видимо ставлю после if перед else. А кста, какой-то стандарт(MISRA?) тут требовал скобки ставить после if всегда abivan(34 знак., 14.08.2013 12:15)
- Это такая дырочка в синтаксисе Си. Способы борьбы разные. - Vit(14.08.2013 12:22)
- ясно. А ведь было уже. Забуду ведь опять, потому как не использую. Лишней писанины много, а когда раз в год ошибка появляется скобки видимо ставлю после if перед else. А кста, какой-то стандарт(MISRA?) тут требовал скобки ставить после if всегда abivan(34 знак., 14.08.2013 12:15)
- это чтобы нужно было точку-с-запятой поставить if(mode)RED_LED_ON(); else GREEN_LED_ON(); - Vit(14.08.2013 12:04)
- Нет, тогда я делаю функции inline. Не люблю пользоваться препроцессором. - Bill(14.08.2013 11:20)
- почему такая нелюбовь? препроцессор как управдом - друг программиста - Snaky(14.08.2013 11:27)
- Препроцессор в Си как-никак всего лишь надстройка. И его поведение бывает непредсказуемо. Bill(201 знак., 14.08.2013 11:49)
- не связывал факт надстройки с предсказуемостью. Snaky(329 знак., 14.08.2013 12:04)
- Ну, скажем, такой простой пример: Bill(157 знак., 14.08.2013 12:21)
- ; после PORTC лишняя - Leks(14.08.2013 12:43)
- Молодец! А теперь представьте, что определение находится Bill(92 знак., 14.08.2013 12:47)
- как это нет? Просто нужны соответствующие средства. Окно превью показывает объявление для символа под курсором SlickEdit, если что. abivan(14.08.2013 13:14)
- Это не непредсказуемость, а сложности отладки. И они - да, есть. Но после пары раз быстро запоминается как же не нужно делать:) - Vit(14.08.2013 12:52)
- Да ведь и пример-то ну очень простой. - Bill(14.08.2013 12:53)
- Молодец! А теперь представьте, что определение находится Bill(92 знак., 14.08.2013 12:47)
- Вы много хотите от компилятора. - Vladimir Ljaschko(14.08.2013 12:37)
- Как раз немного. Компилятор стандартный. - Bill(14.08.2013 12:39)
- В проекте нет main? Не подключили io*.h? )) - Юра(14.08.2013 12:31, )
- Это тут ни причем. Все на месте. И, тем не менее, ошибка! Попробуйте найти. - Bill(14.08.2013 12:35)
- Вы серьёзно? Или нет? ;) - Vit(14.08.2013 12:37)
- Абсолютно серьезно. Попробуйте и вы найти ошибку. - Bill(14.08.2013 12:38)
- точка-с-запятой (плохо болдится;) - Vit(14.08.2013 12:40)
- А ошибка-то в чем? - Bill(14.08.2013 12:42)
- в точке с запятой после PORTC - обычная криворукость - точки с запятой в макросах не стОит ставить вне блоков, иначе пионэрские ашипки полезут. Никакой непредсказуемости. - Vit(14.08.2013 12:45)
- Само собой - криворукость. Только ошибку-то вы не сразу нашли. А такую ошибку Bill(83 знак., 14.08.2013 12:51)
- Я-то сразу нашёл - просто не поверил, что Вы такое спрашиваете. Тем более тут Юра как раз и писал, что подобный хлам надо окучивать и выносить в отдельное место. По ссылке специально выделил точку-с-запятой жирным (заболдил), но почти Vit(11 знак., 14.08.2013 12:57 - 13:00, ссылка)
- Но, опять же, Юра как-то сразу сдался. А я еще раз повторяю: препроцессор - это прокладка между исходным текстом и компилятором. Он является источником дополнительных ошибок, которые часто бывает трудно обнаружить. Особенно в тех случаях когда Bill(84 знак., 14.08.2013 13:06)
- Обычно в среде можно сохранить текст после препроцессора, тогда легко увидеть ошибки, а если смотреть лень, то скормить это компилятору. - Vladimir Ljaschko(14.08.2013 13:11)
- Конечно можно. Все определяется только затраченными усилиями и временем. - Bill(14.08.2013 13:15)
- Юра просто получил эмоциональный взрыв:))) О сложностях при использовании препроцессора говорить можно долго. Но это не повод его не использовать:) - Vit(14.08.2013 13:11)
- Я не говорю, что его не нужно использовать. Просто нужна мера, во всем. - Bill(14.08.2013 13:13)
- Вот сборничек опасностей:) --> - Vit(14.08.2013 13:26, ссылка, ссылка)
- Особенно обратил внимание на Bill(206 знак., 14.08.2013 13:43)
- Тогда это для Вас будет полезно :) Vladimir Ljaschko(3798 знак., 14.08.2013 13:46)
- Особенно обратил внимание на Bill(206 знак., 14.08.2013 13:43)
- Мера зависит от опыта, и это касается не только препроцессора ;) - Vladimir Ljaschko(14.08.2013 13:23)
- На это трудно что-либо возразить. - Bill(14.08.2013 13:47)
- Для обращения к портам вполне годится. - Vit(14.08.2013 13:22)
- Определения. констант, портов и т.п. Правда, опять же, по возможности, в последнее время для определения констант Bill(45 знак., 14.08.2013 13:34)
- Вот сборничек опасностей:) --> - Vit(14.08.2013 13:26, ссылка, ссылка)
- Я не говорю, что его не нужно использовать. Просто нужна мера, во всем. - Bill(14.08.2013 13:13)
- Юра вообще слабак. Сразу #define Сдаюсь; - Юра(14.08.2013 13:08, )
- Обычно в среде можно сохранить текст после препроцессора, тогда легко увидеть ошибки, а если смотреть лень, то скормить это компилятору. - Vladimir Ljaschko(14.08.2013 13:11)
- Я не сразу, около 80 мс потребовалось. Наверно, питание плохое. - Юра(14.08.2013 13:02, )
- Согласен, соврал:) - пока чашечку с кофе поставил... - Vit(14.08.2013 13:04)
- Может надо было посложнее пример придумать? - Bill(14.08.2013 13:08)
- Надо было. А то этот в аккурат показал, что Юра прав:) - Vit(14.08.2013 13:12)
- Может надо было посложнее пример придумать? - Bill(14.08.2013 13:08)
- Согласен, соврал:) - пока чашечку с кофе поставил... - Vit(14.08.2013 13:04)
- Но, опять же, Юра как-то сразу сдался. А я еще раз повторяю: препроцессор - это прокладка между исходным текстом и компилятором. Он является источником дополнительных ошибок, которые часто бывает трудно обнаружить. Особенно в тех случаях когда Bill(84 знак., 14.08.2013 13:06)
- Я-то сразу нашёл - просто не поверил, что Вы такое спрашиваете. Тем более тут Юра как раз и писал, что подобный хлам надо окучивать и выносить в отдельное место. По ссылке специально выделил точку-с-запятой жирным (заболдил), но почти Vit(11 знак., 14.08.2013 12:57 - 13:00, ссылка)
- Само собой - криворукость. Только ошибку-то вы не сразу нашли. А такую ошибку Bill(83 знак., 14.08.2013 12:51)
- в точке с запятой после PORTC - обычная криворукость - точки с запятой в макросах не стОит ставить вне блоков, иначе пионэрские ашипки полезут. Никакой непредсказуемости. - Vit(14.08.2013 12:45)
- А ошибка-то в чем? - Bill(14.08.2013 12:42)
- точка-с-запятой (плохо болдится;) - Vit(14.08.2013 12:40)
- Абсолютно серьезно. Попробуйте и вы найти ошибку. - Bill(14.08.2013 12:38)
- Сдаюсь; - Юра(14.08.2013 12:36, )
- и я. кста Var;=0 выдает такуюже ошибку. line 1; column 5; expression syntax - abivan(14.08.2013 12:47)
- ;))) - Bill(14.08.2013 12:52)
- и я. кста Var;=0 выдает такуюже ошибку. line 1; column 5; expression syntax - abivan(14.08.2013 12:47)
- Вы серьёзно? Или нет? ;) - Vit(14.08.2013 12:37)
- Это тут ни причем. Все на месте. И, тем не менее, ошибка! Попробуйте найти. - Bill(14.08.2013 12:35)
- ; после PORTC лишняя - Leks(14.08.2013 12:43)
- Ну, скажем, такой простой пример: Bill(157 знак., 14.08.2013 12:21)
- не связывал факт надстройки с предсказуемостью. Snaky(329 знак., 14.08.2013 12:04)
- Препроцессор в Си как-никак всего лишь надстройка. И его поведение бывает непредсказуемо. Bill(201 знак., 14.08.2013 11:49)
- А я наоборот, считаю inline-функции костылями и использую их только если без них не складывается - Vit(14.08.2013 11:26, ссылка)
- так и я так же поступаю. Просто я лучше оформлю манипуляцию с портом в виде inline функции, а не виде макроопределения с параметрами. Впрочем, все люди пишут исходя из своих собственных представлений и своего собственного опыта. А и представления, Bill(31 знак., 14.08.2013 11:57)
- Да, это просто две стороны одной медали. По большому счету неважно, под именем макроса или под именем инлайн-функции Вы скрываете внутренности операций. Удобная и наглядная упаковка (говорящая, но без лишних подробностей) + локальное место для Юра(20 знак., 14.08.2013 12:13, )
- Я Вас не заставляю и не уговариваю. Просто когда пишешь для нескольких архитектур и под разные компиляторы, задалбывает запоминать различия синтаксиса. Но это полбеды, а вот когда Кейлу в зависимости от версии нужно ещё и прагму разную ставить - Vit(175 знак., 14.08.2013 12:12)
- не использовал инлайн потому как не было их у меня(не поддерживалось) да и сейчас не поддерживается в "моем" компиляторе. Вопрос для общего развития, так сказать, как использовать инлайн в разных модулях? В хедер поместить? - abivan(14.08.2013 12:05)
- Да. Компилятор просто должен "знать" как скомпилировать соответствующую функцию. Маленький пример: Bill(567 знак., 14.08.2013 12:15 - 12:26)
- так и я так же поступаю. Просто я лучше оформлю манипуляцию с портом в виде inline функции, а не виде макроопределения с параметрами. Впрочем, все люди пишут исходя из своих собственных представлений и своего собственного опыта. А и представления, Bill(31 знак., 14.08.2013 11:57)
- почему такая нелюбовь? препроцессор как управдом - друг программиста - Snaky(14.08.2013 11:27)
- do-while зачем? просто { } не достаточно? - abivan(14.08.2013 12:00)
- А что мешает к порту "привязать" еще что-то, например, Bill(246 знак., 14.08.2013 11:17)
- Да пусть в том же хидере, где Вы указали, что #define LED_PORT PORTB и что #define RED_LED_PIN 6, - описать чуть ниже для удобной работы несколько строк вроде: #define RED_LED_ON LED_PORT |= (1 < < RED_LED_PIN). И все. Лучше сразу там описать Юра(897 знак., 14.08.2013 09:10, )