|
возможно ли на Си, объединить биты регистров портов микроконтроллера |
|
|
|
 |
Ответов
|
Jun 14 2009, 10:21
|
Профессионал
    
Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528

|
Цитата(Herz @ Jun 14 2009, 12:47)  Такие книжки читать как раз не нужно, ИМХО. Ибо это из категории вредных советов.  Да нет, сами по себе советы вместо #define использовать const и темплейты - правильные. Просто в тех книгах речь идёт о С++ и типичных его применениях - для ваяния многомегабайтных монстров. А тут случай практически противоположный - манипуляции битами на самом нижнем уровне, никакой переносимости не требуется по определению, зато важна эффективность. Но, разумеется, хотелось бы собрать в одном месте все зависимости от номеров битов в портах, чтобы при правках не искать их по всей программе. Альтернатива - написать пару функций для чтения и для записи, а для эффективности инлайнить их.
--------------------
Russia est omnis divisa in partes octo.
|
|
|
|
|
Jun 14 2009, 10:49
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(SSerge @ Jun 14 2009, 13:21)  Но, разумеется, хотелось бы собрать в одном месте все зависимости от номеров битов в портах, чтобы при правках не искать их по всей программе. Описываю весь доступ к портам через макросы в одном h-файле и не парюсь. В прочих файлах НИКАКОГО упоминания о портах, только макросы с осмысленными названиями. Просто для понимания. Существенно упрощает портирование. К сожалению, есть проблема инлайнить функции, определенные в других модулях, теоретически можно тоже через #include, но это уж точно на изврат похоже.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Jun 14 2009, 17:09
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(aaarrr @ Jun 14 2009, 14:35)  очень полезный в некоторых случаях прием. ОК, я подумаю. Хотелось бы уточнить случаи. Вопрос то в чем - если придерживаться какой-то структуры проекта, логичного разбиения проекта на модули (файлы), то достаточно сложные инлайновые функции должны быть определены в соответствующих модулях. И им нечего быть включенными в другие модули. Как раз недавно пришлось воспользоваться инлайном и оптимизацией для быстрых операций в прерывании. Если же функция вырождается в дерганье выводом или считывание его состояния, то объясните мне плз, в чем преимущество инлайновой функции по сравнению с простейшим макросом: #define ON_BACKLIGHT (P1OUT|=P1_BACKLIGHT), где #define P1_BACKLIGHT 0x02 //output
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Jun 14 2009, 17:16
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Dog Pawlowa @ Jun 14 2009, 21:09)  ОК, я подумаю. Хотелось бы уточнить случаи. Например, есть у меня в модуле display такая функция: Код __forceinline void disp_set_dot_alpha(u_int x, u_int y, DISP_COLOR color, u_char alpha) { u_int c0, c1, mask; if(alpha > 0) { c0 = color; if(alpha < DISP_MAX_ALPHA) { c1 = *((u_short*)&disp_frame + (y * DISP_WIDTH) + x); mask = 0x07e0f81f; c0 = (c0 | (c0 << 16)) & mask; c1 = (c1 | (c1 << 16)) & mask; c0 = ((c0 * alpha) >> 5) & mask; c1 = ((c1 * (DISP_MAX_ALPHA - alpha)) >> 5) & mask; c0 = c0 + c1; c0 |= c0 >> 16; } *((u_short*)&disp_frame + (y * DISP_WIDTH) + x) = c0; } } Тащить всю работу с графикой в один модуль неразумно, до макроса не вырождается, зато как инлайн функция существенно повышает производительность.
|
|
|
|
|
Jun 14 2009, 17:36
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(aaarrr @ Jun 14 2009, 20:16)  зато как инлайн функция существенно повышает производительность. ОК, спасибо. Видимо, не сталкивался. Но в таком виде функция не инклюдится, или я не знаю эту среду/компилятор? Цитата(sergeeff @ Jun 14 2009, 20:29)  Вы сами-то как оцениваете читабельность такого выражения? Супер! Превосходная ! Ни у кого такого нет! "Включить подсвет", насколько мне известно... Большие буквы, отсутствие скобок -> значит это макрос для работы с портами -> см файл project_ports.h Лет пят-шесть так работаю, маразм наступает, но вот с этим пока проблем не было.
--------------------
Уходя, оставьте свет...
|
|
|
|
Сообщений в этой теме
another_one возможно ли на Си Jun 13 2009, 16:50 sergeeff Никак Jun 13 2009, 17:59 DpInRock Вы всегда смотрите, как именно ваши фантазии будет... Jun 13 2009, 19:38 another_one Цитата(DpInRock @ Jun 13 2009, 23:38) Вы ... Jun 13 2009, 22:17 SSerge Для читаемости можно оформить доступ к битам в раз... Jun 13 2009, 22:49 zltigo Цитата(sergeeff @ Jun 14 2009, 03:20) Поч... Jun 14 2009, 05:17    sergeeff Цитата(Dog Pawlowa @ Jun 14 2009, 14:49) ... Jun 14 2009, 10:55     Dog Pawlowa Цитата(sergeeff @ Jun 14 2009, 13:55) Это... Jun 14 2009, 11:07         Dog Pawlowa Цитата(aaarrr @ Jun 14 2009, 20:41) Вы им... Jun 14 2009, 17:55          aaarrr Цитата(Dog Pawlowa @ Jun 14 2009, 21:55) ... Jun 14 2009, 17:59        sergeeff Цитата(Dog Pawlowa @ Jun 14 2009, 20:36) ... Jun 14 2009, 17:48         Dog Pawlowa Цитата(sergeeff @ Jun 14 2009, 20:48) Ну ... Jun 14 2009, 18:04          sergeeff Цитата(Dog Pawlowa @ Jun 14 2009, 21:04) ... Jun 14 2009, 18:41           ReAl Цитата(sergeeff @ Jun 14 2009, 21:41) 2. ... Jun 14 2009, 20:46            sergeeff Цитата(ReAl @ Jun 14 2009, 23:46) где ... Jun 15 2009, 06:31             Dog Pawlowa Цитата(sergeeff @ Jun 15 2009, 09:31) кни... Jun 15 2009, 06:44              sergeeff Цитата(Dog Pawlowa @ Jun 15 2009, 09:44) ... Jun 15 2009, 07:11             ReAl Цитата(sergeeff @ Jun 15 2009, 09:31) 2. ... Jun 15 2009, 08:03              sergeeff Цитата(ReAl @ Jun 15 2009, 11:03) Так зна... Jun 15 2009, 08:33        zltigo Цитата(Dog Pawlowa @ Jun 14 2009, 20:36) ... Jun 14 2009, 19:13      sergeeff Цитата(Dog Pawlowa @ Jun 14 2009, 20:09) ... Jun 14 2009, 17:29    SasaVitebsk Цитата(Dog Pawlowa @ Jun 14 2009, 13:49) ... Jun 15 2009, 08:24     zltigo Цитата(SasaVitebsk @ Jun 15 2009, 11:24) ... Jun 15 2009, 10:43      SasaVitebsk Цитата(zltigo @ Jun 15 2009, 13:43) ...и ... Jun 17 2009, 08:57 sergeeff Мне представляется, что:
1. Есть программисты - од... Jun 14 2009, 10:27 KRS На С++ можно с помощью перезагрузки операции присв... Jun 14 2009, 10:59 sergeeff А почему все макросы в одном h-файле можно помести... Jun 14 2009, 11:16 MrYuran Я бы сделал так:
#define UP(port, bit) port |=... Jun 14 2009, 11:34 another_one Цитата(MrYuran @ Jun 14 2009, 15:34) Я бы... Jun 14 2009, 18:41  sergeeff Цитата(another_one @ Jun 14 2009, 21:41) ... Jun 14 2009, 18:59   aaarrr Цитата(sergeeff @ Jun 14 2009, 22:59) Еже... Jun 14 2009, 19:05   zltigo Цитата(sergeeff @ Jun 14 2009, 21:59) Неб... Jun 14 2009, 19:16    sergeeff Цитата(zltigo @ Jun 14 2009, 22:16) Прост... Jun 14 2009, 19:38     Dog Pawlowa Цитата(sergeeff @ Jun 14 2009, 22:38) ...... Jun 14 2009, 19:54      aaarrr Цитата(Dog Pawlowa @ Jun 14 2009, 23:54) ... Jun 14 2009, 20:05     zltigo Цитата(sergeeff @ Jun 14 2009, 22:38) Сог... Jun 14 2009, 20:11 aaarrr Да-да, copy-paste, в первый раз и "char... Jun 14 2009, 19:14 defunct Меня как-то никогда не смущало написать пару десят... Jun 14 2009, 20:52 zltigo Цитата(defunct @ Jun 14 2009, 23:52) Заче... Jun 14 2009, 21:03  defunct Цитата(zltigo @ Jun 15 2009, 00:03) Зачем... Jun 14 2009, 21:07   zltigo Цитата(defunct @ Jun 15 2009, 00:07) Нужн... Jun 14 2009, 21:16    defunct Цитата(zltigo @ Jun 15 2009, 00:16) А вме... Jun 14 2009, 21:28     singlskv Цитата(defunct @ Jun 15 2009, 01:28) на м... Jun 14 2009, 21:39      defunct Цитата(singlskv @ Jun 15 2009, 00:39) а п... Jun 14 2009, 21:46       singlskv Цитата(defunct @ Jun 15 2009, 01:46) Пото... Jun 14 2009, 21:54        defunct Цитата(singlskv @ Jun 15 2009, 00:54) про... Jun 14 2009, 22:13         singlskv Цитата(defunct @ Jun 15 2009, 02:03) Вы ч... Jun 14 2009, 22:14         Dog Pawlowa Цитата(defunct @ Jun 15 2009, 01:13) Вы м... Jun 15 2009, 05:37          defunct Цитата(Dog Pawlowa @ Jun 15 2009, 08:37) ... Jun 15 2009, 06:46     zltigo Цитата(defunct @ Jun 15 2009, 00:28) если... Jun 14 2009, 22:00      defunct Цитата(zltigo @ Jun 15 2009, 01:00) Зачас... Jun 14 2009, 22:25       singlskv Цитата(defunct @ Jun 15 2009, 02:25) Блин... Jun 14 2009, 22:30        defunct Цитата(singlskv @ Jun 15 2009, 01:30) Ну ... Jun 14 2009, 22:37       zltigo Цитата(defunct @ Jun 15 2009, 01:25) А ес... Jun 15 2009, 07:05 ReAl ====================
Кстати, об исходной теме и пр... Jun 14 2009, 20:58
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|