ГЫММ... Есть такая задачка... имеем указатель на функцию, определенный как новый тип
Код:
#typedef void(*ptrf) ();
создаем переменную my_ptrf типа ptrf
Код:
ptrf my_ptrf;
и некую функцию
Код:
void test();
затем загружаем
Код:
my_ptrf = test;
в самом my_ptrf сидит адрес функции test (или какой-то функции такого же типа)... Надо тот адрес вытянуть в виде 0xnnnn (предполагается что адрес двухбайтовый) и заслать во внешнее ОЗУ побайтово... Затем обратный вариант - считать два байта и запихнуть их в указатель на функцию...
главный колбасист писал(а):
Цитата:
Неужто тяжело поискать?
Искали.И поиском,и так в папках рылись. В ATMEL/AVRstudio не был найден даже IO.h Может не там искали ?
Каталог C:\Program Files\Atmel\AVR Tools Далее C:\Program Files\Atmel\AVR Tools\AVR Toolchain и там копаем.....
Вроде конструкция с менюшками начала чуток продвигаться... На сей момент из "устройств" реализованы часики с индикацией времени да просмотром и изменением данных в часиках/календаре DS1307. Заложено расширение функционала. Конечно получилося монстро, да и заставки менюшек на 8-позиционном 7 сегментнике есть великое зверство - однако работает... исходно рабочий экран https://img.radiokot.ru/files/20529/2s6vo2bdm3.jpg нажав красну кнопу получаем окно главного меню с курсором в позиции выбора устройств (0=главные часы) https://img.radiokot.ru/files/20529/2s6vpvf8am.jpg если в этом состоянии (независимо от позиции курсора - децимальной запятой нажать красну кнопу - вернется предыдущее состояние) далее выбираем субменюшку - двигаем кнопами < и > курсор во второе знакоместо и кнопами +/- выбираем одно из значений 0 соответствует переходу к рабочему состоянию установленного устройства 1 - показ и редактирование минут https://img.radiokot.ru/files/20529/2s6xaqzbru.jpg https://img.radiokot.ru/files/20529/2s6xbrhlmk.jpg 2 - показ и редактирование часов https://img.radiokot.ru/files/20529/2s6xckr2g2.jpg https://img.radiokot.ru/files/20529/2s6xdc0ysv.jpg 3 - показ и редактирование дня недели ......... 4 - показ и редактирование числа ......... 5 - показ и редактирование месяца ......... 6 - показ и редактирование года https://img.radiokot.ru/files/20529/2s6xgbomsl.jpg https://img.radiokot.ru/files/20529/2s6xh0mjm2.jpg 7 - режим обнуления счетчика секунд (запуск по сигналу точного времени) но то лишь заставка... Далее надо нажать ту же красну кнопу - появится текущее значение параметра. Курсор можно гонять только в разрешенных позициях (автоограничение перемещения) меняем значения при помощи +/-. Курсор в позиции с "?" меняет назначение кноп - "+" равноценно закрытию окна с вводом значения, "-" возврат без внесения изменений. Выйти из субменю можно только установив в окошке субменюшек 0. Вобщем как-то так... Потихоньку буду другие "устройства" добавлять...
Надо тот адрес вытянуть в виде 0xnnnn (предполагается что адрес двухбайтовый) и заслать во внешнее ОЗУ побайтово...
по стандарту Си указатель должен быть совместим по размеру с int, так что приведение типа к int позволяет делать с указателем, что угодно:
Код:
char str[10]; itoa((int)my_ptrf, str, 16); // в str будет hex-значение указателя, "0x" дорисовать можно потом
// функция создания указателя из двух байтов ptrf combine(uint8_t hi, uint8_t lo){ return (ptrf)(lo + hi*256); }
Добавлено after 4 minutes 9 seconds: кстати, если "внешнее ОЗУ" подключено "прозрачно" (т.е. не и2ц или SPI память), то намного проще объявить в этом самом ОЗУ сам указатель, и просто работать с ним - не нужно будет побайтно туда переносить и считывать, компилятор сам все сделает
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
То "обычный" указатель... А меня смушшаеть, что нужно измываться над "указателем на функцию", да еще и в виде нового типа данных... Хотя как вариант - в ОЗУ идет индекс (unsigned char или int), а уж сам МК по тому индексу выполняет чего угодно (пока так и сделано).
Вообще говоря, это не так. Возьмём хорошо знакомый вам AVR. Указатели на область данных и программ это две большие разницы. Не говоря уже о том, что в области данных тоже "особенности" есть.
Указатели на область данных и программ это две большие разницы
я сейчас приведу в виде бинарных значений два указателя, один на ОЗУ, другой на FLASH, прошу вас определить, где указатель на область ОЗУ, а где - на FLASH: 1. 0x0100 2. 0x0102
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
ну так я не про костыли говорил, кои и в GCC есть, а про то, как указатели определяет стандарт Си. в кейле для 51-ых есть битовые переменные, которых нет в стандарте, и что из этого? (кстати, интересно: указатели на них в кейле есть?) пока вы не начнете реализовывать доступ к данным по указателю, у вас нет стандартного способа узнать, в чем отличие одного от другого. а доступ и называется разыменовыванием.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Давно заметил, что те кто апеллируют к стандарту, обычно его даже не открывали. Почитайте раздел 6.3.2.3 Pointers и откройте для себя, что приведения с указателями являются implementation-defined. И то что вы называете костылями всего лишь их реализация на конкретной архитектуре.
Ладушки... "дело ясное, что дело темное"... Пока что очередное "устройство" в мой садомазохстский проектик добавилось - "секундомер"... Штука без субменюшек - в них смысла нету в данном случае, но с некоторым "запасом на будущее". Переход - в окне главного меню - ставим единичку https://img.radiokot.ru/files/20529/2sa5lyps1v.jpg жмем красну кнопу и на дисплейчике заставка https://img.radiokot.ru/files/20529/2sa5mj9ttl.jpg Далее кнопа "+" выполняет функционал "старт/стоп" (при счете "квадратик" вверху, при останове - внизу) https://img.radiokot.ru/files/20529/2sa5my1djl.jpg кнопа "-" ="сброс показаний", а кнопа ">" - запись текущего результата в дополнительные регистры (сопровождаемую миганием синим "умного светика"). Из того же состояния останова при помощи RK можно войти в главное меню и там ссменить текущее "устройство по умолчанию" пока что на часики ("F00")... Папка проекта и файлы имеют те же имена, что и предыдущие (но отличаются по содержимому)- посему соблюдаем аккуратность при распаковке! (старый проект может быть "затерт")
Далее C:\Program Files\Atmel\AVR Tools\AVR Toolchain
А вот и нету в моей древней avr studio4 такой папки. Ну и ладно,фиг с ним. Все равно,если бы и нашел,ничего там не понял. Это и к лучшему.
з.ы. http://www.spectrum-soft.com/download/download.shtm Дали ссылку на симулятор схем на одном вражеском форуме,сказали лучше, современнее,чем мой мультисим. правда? но что то архив больно маленький. мультисимовский больше раз в десять.
ну ладно, стандарт даже я ниасилил, но книжку-то популярную про AVR и Си прочесть можно же? ну, хотя бы для того, чтобы запомнить, что main имеет тип int...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
там был int ,поначалу, потом ставлю все подряд,посмотреть что изменится. Увлекательнее,чем книжку читать,и в памяти откладывается лучше. Ничего не изменилось,ошибок нет. и считает.
Скорее всего сообщения об ошибках отключены в настройках IDE. С АВРками начинать Си осваивать проще таки с абдуринкоIDE, а уж дальше по мере аппетита можно и к студиеву Си перейти. Так хоть явные ошибки пользователя отсеять можно. Да и возможностей для практических конструкций вполне достаточно.
Бывают среды разработки не такие привередливые,как например AVRstudio, где закорючку не там поставишь,и пол-дня выискиваешь откуда ошибки.Чтобы больше времени уделять самому алгоритму, и собственно творческому процессу,а не синтаксису,и какую закорючку где ставить? Я понимаю,когда большой опыт,и до автоматизма доходит,это не столь важно. Вот была такая хрень,"алгоритм бульдер" незаслуженно забытый ?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения