Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Re: Котуинко

Пн апр 25, 2022 11:36:02

ГЫММ...
Есть такая задачка...
имеем указатель на функцию, определенный как новый тип
Код:
#typedef void(*ptrf) ();

создаем переменную my_ptrf типа ptrf
Код:
ptrf my_ptrf;

и некую функцию
Код:
void test();

затем загружаем
Код:
my_ptrf = test;

в самом my_ptrf сидит адрес функции test (или какой-то функции такого же типа)...
Надо тот адрес вытянуть в виде 0xnnnn (предполагается что адрес двухбайтовый)
и заслать во внешнее ОЗУ побайтово...
Затем обратный вариант - считать два байта и запихнуть их в указатель на функцию...
:dont_know:


главный колбасист писал(а):
Неужто тяжело поискать?

Искали.И поиском,и так в папках рылись. В ATMEL/AVRstudio не был найден даже IO.h
Может не там искали ?

Каталог
C:\Program Files\Atmel\AVR Tools
Далее
C:\Program Files\Atmel\AVR Tools\AVR Toolchain
и там копаем.....
:facepalm:

Вроде конструкция с менюшками начала чуток продвигаться...
На сей момент из "устройств" реализованы часики с индикацией времени да просмотром и изменением данных в часиках/календаре 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.
:roll:
Вобщем как-то так...
Потихоньку буду другие "устройства" добавлять...
:write:
Вложения
prvt2.zip
(133.33 KiB) Скачиваний: 111

Re: Котуинко

Ср апр 27, 2022 14:32:15

BOB51 писал(а):Надо тот адрес вытянуть в виде 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 память), то намного проще объявить в этом самом ОЗУ сам указатель, и просто работать с ним - не нужно будет побайтно туда переносить и считывать, компилятор сам все сделает

Re: Котуинко

Ср апр 27, 2022 20:30:42

То "обычный" указатель...
А меня смушшаеть, что нужно измываться над "указателем на функцию", да еще и в виде нового типа данных...
:roll:
Хотя как вариант - в ОЗУ идет индекс (unsigned char или int), а уж сам МК по тому индексу выполняет чего угодно (пока так и сделано).
8)

Re: Котуинко

Ср апр 27, 2022 22:03:14

указатель на функцию ничем не отличается от любого другого. все указатели до разыменовпния одинаковы.

Добавлено after 1 minute 10 seconds:
тип указателя начинает играть роль только при разыменовании.

Re: Котуинко

Чт апр 28, 2022 08:08:55

все указатели до разыменовпния одинаковы.
Вообще говоря, это не так. Возьмём хорошо знакомый вам AVR. Указатели на область данных и программ это две большие разницы. Не говоря уже о том, что в области данных тоже "особенности" есть.

Re: Котуинко

Чт апр 28, 2022 09:39:11

VladislavS писал(а):Указатели на область данных и программ это две большие разницы
я сейчас приведу в виде бинарных значений два указателя, один на ОЗУ, другой на FLASH, прошу вас определить, где указатель на область ОЗУ, а где - на FLASH:
1. 0x0100
2. 0x0102

Re: Котуинко

Чт апр 28, 2022 11:05:25

Мне некогда соревноваться с вами в демагогии. Просто положу тут кусочек документации по указателям от IAR AVR.
EWAVR_CompilerGuide_Pointers.pdf
(61.54 KiB) Скачиваний: 59

Re: Котуинко

Чт апр 28, 2022 11:20:00

ну так я не про костыли говорил, кои и в GCC есть, а про то, как указатели определяет стандарт Си. в кейле для 51-ых есть битовые переменные, которых нет в стандарте, и что из этого? (кстати, интересно: указатели на них в кейле есть?) пока вы не начнете реализовывать доступ к данным по указателю, у вас нет стандартного способа узнать, в чем отличие одного от другого. а доступ и называется разыменовыванием.

Re: Котуинко

Чт апр 28, 2022 12:06:28

Давно заметил, что те кто апеллируют к стандарту, обычно его даже не открывали. Почитайте раздел 6.3.2.3 Pointers и откройте для себя, что приведения с указателями являются implementation-defined. И то что вы называете костылями всего лишь их реализация на конкретной архитектуре.

Re: Котуинко

Чт апр 28, 2022 12:42:24

ну... стандарт-то открывал... местами, конечно. до "implementation defined" не дошел, хватило прочтенного утверждения о совпадении размера с int.

что ж... лишний раз убедился, что ничему верить нельзя.

Re: Котуинко

Чт апр 28, 2022 19:11:48

Ладушки...
"дело ясное, что дело темное"...
8)
Пока что очередное "устройство" в мой садомазохстский проектик добавилось - "секундомер"...
Штука без субменюшек - в них смысла нету в данном случае, но с некоторым "запасом на будущее".
Переход - в окне главного меню - ставим единичку
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")...
Папка проекта и файлы имеют те же имена, что и предыдущие (но отличаются по содержимому)- посему соблюдаем аккуратность при распаковке!
(старый проект может быть "затерт")
prvt2.zip
(69.14 KiB) Скачиваний: 110

:write:

Re: Котуинко

Сб май 07, 2022 15:43:10

А я вон чё придумала...
Не смейтесь только,я больше
ничего пока не умею. :oops:

#include <avr/io.h>

#include <avr/interrupt.h>


char main(x,y){
x=x+2>>y;
sei();
DDRD=(PD0+x ) ;
TIMSK=(TOIE0+1);
TCCR0=(CS00+1);

while(1,x){;}
}
Изображение

Re: Котуинко

Вс май 08, 2022 07:49:22

Это на конкурс "кто больше ошибок в одной строке кода сделает"?

Re: Котуинко

Вс май 08, 2022 08:35:28

Возможно. но в симуляторе работает...

Далее
C:\Program Files\Atmel\AVR Tools\AVR Toolchain

А вот и нету в моей древней avr studio4 такой папки.
Ну и ладно,фиг с ним. Все равно,если бы и нашел,ничего там не понял.
Это и к лучшему.

з.ы. http://www.spectrum-soft.com/download/download.shtm
Дали ссылку на симулятор схем на одном вражеском форуме,сказали лучше,
современнее,чем мой мультисим. правда? но что то архив больно маленький.
мультисимовский больше раз в десять.

Re: Котуинко

Вс май 08, 2022 11:00:22

ну ладно, стандарт даже я ниасилил, но книжку-то популярную про AVR и Си прочесть можно же? ну, хотя бы для того, чтобы запомнить, что main имеет тип int...

Re: Котуинко

Вс май 08, 2022 11:37:52

"main имеет тип int" - звучит как сюжет порнофильма :)))

Re: Котуинко

Вс май 08, 2022 12:08:27

там был int ,поначалу, потом ставлю все подряд,посмотреть что изменится.
Увлекательнее,чем книжку читать,и в памяти откладывается лучше.
Ничего не изменилось,ошибок нет. и считает. :)

Re: Котуинко

Вс май 08, 2022 14:32:13

Скорее всего сообщения об ошибках отключены в настройках IDE.
8)
С АВРками начинать Си осваивать проще таки с абдуринкоIDE, а уж дальше по мере аппетита можно и к студиеву Си перейти.
Так хоть явные ошибки пользователя отсеять можно. Да и возможностей для практических конструкций вполне достаточно.
8)

Re: Котуинко

Вс май 08, 2022 17:35:14

"main имеет тип int" - звучит как сюжет порнофильма :)))

так Си это сплошная e#ля с греблей

Re: Котуинко

Вт май 24, 2022 19:56:49

Бывают среды разработки не такие привередливые,как например AVRstudio, где закорючку не там поставишь,и пол-дня выискиваешь откуда ошибки.Чтобы больше времени уделять самому алгоритму,
и собственно творческому процессу,а не синтаксису,и какую закорючку где ставить?
Я понимаю,когда большой опыт,и до автоматизма доходит,это не столь важно.
Вот была такая хрень,"алгоритм бульдер" незаслуженно забытый ?
Ответить