AVR + Pascal (?)

Обсуждаем контроллеры компании Atmel.
Ответить
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

Ну смотрите, задача :) Буду признателен если вы скажете как ее можно решить без единого каста )
Есть функция передачи некоего буфера чаров по каналу связи. И по этому каналу могут передаваться 10 разных типов структур скажем...

Или вот еще - есть проект с весьма ограниченными ресурсами по ОЗУ. Поэтому создан глобальный буфер скажем buftmp. В некоторой функции мне надо создать локальную переменную типа ololo_type размером скажем 100 байт.
что я делаю?

Код: Выделить всё

ololo_type * localvar = (ololo_type*)buftmp;
и все, память необходимая для нее - это память необходимая для указателя, а не 100 байт.

Что касается указателей - тоже весьма важно. Например буферы переменной длины, или скажем варианты типа memcpy весьма полезны в хозяйстве.
Контактная информация:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 736
Зарегистрирован: Пн янв 10, 2011 03:06:36
Откуда: Ростов-на-Дону

Сообщение Goldsmith »

В Pascal'е есть конструкция, аналогичная union в языке C, - запись с вариантами. Она позволяет отобразить несколько разных структур на одну область памяти.

Это позволит решить обе задачи - и с передачей разных структур по каналу, и с повторным использованием глобального буфера для разных нужд. И при этом синтаксис останется достаточно выразительным.

P.S. Кстати, работа с указателями там тоже имеется. В самом языке отсутствуют некоторые вольности в обращении с ними вроде адресной арифметики, но в конкретных реализациях обычно есть расширения, позволяющие делать и это (хотя это вряд ли идет на пользу программе, но принципиальная возможность есть).
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

Ну я не говорю что в паскале этого нет - мой пост был адресован тов. Satyr, который утверждал что использовать касты и указатели моветон :)
Однако union в данном случае не очень подходит. Ибо мне надо в функции создать динамически структуру в глобальном буфере, которая сдохнет вместе в функцией, а не содержать огроменный union со всеми возможными структурами. Помимо этого часто нужно использовать буфер со смещением, скажем чтоб разместить в нем две структуры.
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 736
Зарегистрирован: Пн янв 10, 2011 03:06:36
Откуда: Ростов-на-Дону

Сообщение Goldsmith »

Опять же для подобных хаков есть лазейки в конкретных реализациях. Например, в TurboPascal это операция поименования @ (аналогичная & в C), аналогичная псевдофункция Addr(), нетипизированный ссылочный тип Pointer (аналог void *) и пр. В диалектах языка для PDP-11, VAX-11, Z80 и др. были свои аналогичные средства с другим синтаксисом. Буду очень удивлен, если их не окажется в диалекте для AVR.

Конечно, эти не описанные в стандарте Вирта дополнения языка не унифицированы и уникальны в каждой реализации, поэтому ни о какой переносимости такого кода речи быть не может (хотя далеко не всем это реально нужно). Но если задаться целью как следует побезобразничать в коде, то на Pascal'е это получится с тем же успехом, что и на C, - есть все необходимое.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

Я понятия не имею, что делает эта конструкция на Си
Берем указатель (&x) на float (Real в Паскале), после чего преобразуем его к указателю на int (int*), после чего обращаемся к нему как к массиву ( [] ), беря первый элемент ( [0] ), т.е., вынимаем первые два байта представления float. :)
У раздолбаев такое распространено не только в эмбеддиде
Даже мне как заядлому сишнику страшно на это смотреть ))
Говорите что хотите, а меня от таких конструкций просто прет. :))) Хотя пихать их куда попало, конечно, не надо.

А вот так я вызывал функции из таблицы:

Код: Выделить всё

((void (*)(uint8_t**,uint8_t))pgm_read_word(&(sys_func[i])))(arg_ptr,args_num);
:)))
хоть он конечно и урод, по сравнению с Паскалем
Ой ладно. :) Это просто у Паскаля громоздкий синтаксис. "{" гораздо короче, чем "begin". :)
В школе когда учился активно использовал паскаль, но си завоевал мое сердце ))
+1.
Опять же для подобных хаков есть лазейки в конкретных реализациях.
Костыли, то бишь. :))) А в Си это прямо в стандарте.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

Код: Выделить всё

((void (*)(uint8_t**,uint8_t))pgm_read_word(&(sys_func[i])))(arg_ptr,args_num);
дааааа )))) жуть ))))
указатели на функции стараюсь не использовать без надобности ибо это ад для неподготовленного мозга, стараюсь делать читаемо, хотя иногда приходится бесспорно. Например без этого достаточно трудно обойтись при реализации многопоточности, а может и вообще невозможно
Контактная информация:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 736
Зарегистрирован: Пн янв 10, 2011 03:06:36
Откуда: Ростов-на-Дону

Сообщение Goldsmith »

Указатель на функцию в принципе ничем не опаснее любого другого, да и вряд ли сложнее в понимании и использовании. Зато без указателей на функцию невозможно реализовать полиморфное поведение объекта, а следовательно, мы не сможем применить в своих программах ни один из реально полезных паттернов проектирования, даже если не связываемся с многопоточностью.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Контактная информация:
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

вряд ли сложнее в понимании и использовании
Да просто синтаксис объявления у них бывает дюже суровый, особенно когда что-то с volatile. :) Я до сих пор в таких случаях обращаюсь к литературе. :)

Без надобности, конечно, наворачивать не стоит. Тем не менее, это может очень сильно выручить.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 736
Зарегистрирован: Пн янв 10, 2011 03:06:36
Откуда: Ростов-на-Дону

Сообщение Goldsmith »

YS писал(а):Да просто синтаксис объявления у них бывает дюже суровый
Рекомендую: Ted Jensen. Tutorial on Pointers and Arrays in C. После прочтения книги большинство затруднений улетучатся.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Контактная информация:
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

Да знаю я тот синтаксис. :) Просто редко использую (указатели на функции), потому для уверенности и лезу в справку. Но за книжку спасибо, лишней не будет.

Ну а с обычными указателями, ессно, и так проблем никаких. :)

UPD: Ух ё, сколько там вообще интересных книг по той ссылке! Спасибо еще раз!

UPD2: А вот то, что мне и правда очень необходимо. Спасибо еще раз!
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 736
Зарегистрирован: Пн янв 10, 2011 03:06:36
Откуда: Ростов-на-Дону

Сообщение Goldsmith »

YS писал(а):UPD: Ух ё, сколько там вообще интересных книг по той ссылке! Спасибо еще раз!

UPD2: А вот то, что мне и правда очень необходимо. Спасибо еще раз!
Пожалуйста!

Если понравилось, заглядывайте время от времени, я регулярно добавляю туда новые экспонаты по мере прочтения. Ну и наиболее понравившиеся статьи тоже в отдельный блог кладу. А то потом сам не найду, если понадобится перечитать или процитировать.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

Действительно дофига замечательных книг на англе. Может сделаем инициативную группу волонтеров и переведем их на русский?) Может потом и издательство какое заинтересуем )
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

BCluster писал(а):Может сделаем инициативную группу волонтеров и переведем их на русский?) Может потом и издательство какое заинтересуем )
Может таки русские инженеры, как инженеры во всем мире, научатся читать литературу на едином де-факто стандартном техническом языке ?
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

Я могу и на английском читать. На русском приятнее, и меньше устаю, но это все ерунда. А русский народ ленивый и что он насчет научиться это вряд ли )))))))
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

BCluster писал(а):А русский народ ленивый и что он насчет научиться это вряд ли )))))))
Ну пусть дальше бухают и сёмки лущат, лишь бы на нищету свою не ныли :))
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

Пожалуйста!
Спасибо, жаль только, линков на скачивание нету. Я понимаю, копирастия и все такое, только я уже проверил - две трети трудов хрен скачаешь с первого тычка. :( Вот мучаю гугл, ищу... Все-таки тема специфичная, и потому эти книги на каждом шагу не валяются.
Может сделаем инициативную группу волонтеров и переведем их на русский?)
Ну нафиг, только ошибки плодить. Да и всего не перевести. Тогда уж более здравой выглядит идея написать хороший учебник по техническому английскому.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

YS писал(а):хороший учебник по техническому английскому
Тоже вариант, но сложно ) Да и в итоге получится словарь )
Можно выбрать хороший труд и перевести, думаю многим будет полезно ) Ну в принципе если не интересна идея - то нафих ее )
Контактная информация:
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

Видел я переводы хороших трудов... Чаще всего это грустное зрелище. :)))

Пример - Bob Pease, Troubleshooting analog circuits. Переводную книжку закрыл после фразы, в которой осциллографические щупы (oscilloscope probes) назвали пробниками. :))) При наличии таких ляпов я банально перестаю верить переведенному тексту.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6329
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Satyr писал(а): Может таки русские инженеры, как инженеры во всем мире, научатся читать литературу на едином де-факто стандартном техническом языке ?
Если до этого не вымрут, как динозавры -- за ненадобностью. Для отверточной сборки 4 класса - и то роскошь.
YS писал(а): осциллографические щупы (oscilloscope probes) назвали пробниками.
А у нас, старых инженегров, в сленге нормально проходило.
Опытный кот
Аватара пользователя
Сообщения: 736
Зарегистрирован: Пн янв 10, 2011 03:06:36
Откуда: Ростов-на-Дону

Сообщение Goldsmith »

YS писал(а):Спасибо, жаль только, линков на скачивание нету.
Я специально линки там не привожу во избежания наездов по поводу пиратства. Тем более что наши соотечественники в последнее время тоже грешат копирастией, а пара-тройка отечественных авторов там тоже затесались (хотя и не жемчужины коллекции). Казалось бы, книга доброго слова не стоит, сплошь плагиат или пустословие, а шуму-то...

Если что-то из перечисленного захотелось почитать, а найти не смогли - обращайтесь в личку, поделюсь. Почти все хранятся у меня в закромах. Не дам только James W. Grenning, Test Driven Development for Embedded C и Mark VanderVoord, Embedded Testing with Unity and CMock. Их электронные версии мне прислали авторы, и не хотелось бы, чтобы именно моя именная копия расползлась по Сети. Впрочем, видел их сканы на торрентах. Остальные - без проблем.
YS писал(а):Тогда уж более здравой выглядит идея написать хороший учебник по техническому английскому.
Лучше взять просто хороший учебник английского и энциклопедический словарь по теме, например, этот. Лучшие технические книги пишутся живым литературным языком, обычно еще и с юмором. Протокольный технический язык хорош только для даташитов.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Контактная информация:
Ответить

Вернуться в «AVR»