Берём тот камень, какой нужен... и не паримся...
Нужна периферия... скорость не так нужна... подешевле - F0XX или F100...
Нужна математика (простая) и скорость - F103 или F2XX...
Нужно всё - F4XX...
А перспективность/неперспектипность это от лешего... У всех линеек больше общего, чем разного... Изучая одну линейку неизбежно изучаешь и все остальные...
В принципе недорого
STM32F103VCT6 Микроконтроллер
Микроконтроллер: ARM Cortex-M3 32-bit, Flash: 256K, RAM: 48K, UART: 5, АЦП: 16 x 12bit (1MSPS), ЦАП: 2 x 12bit, ШИМ: 28 x 16bit
Тип корпуса: LQFP100
Цена - 48 грн. ...
"Я не даю готовых решений, я заставляю думать!"(С)
Возник вопрос в очередной раз:
Допустим есть порт PORTB из 8 пин. Соответственно имеем 8 бит регистра.
А мне нужно обращаться к нему как будто к двум портам, например биты 0,1,2,3 этого порта - это некий виртуальный порт PORTX, к которому также хотелось бы обращаться как к регистру. И есть порт PORTY - биты 4,5,6, с аналогичным доступом.
Можно ли это организовать например через #define ? В голову что то ничего не приходит.
Можно конечно. Только #define это директива препроцессора, позволяющая делать необходимые абстракции для программиста. А на деле всеравно будет сложная работа с битами порта, причем эта директива ограничена однострочными абстракциями, первый вариант еще можно легко реализовать при помощи дефайна, а для второго варианта уже нужен макрос или подпрограмма.
Макрос будет немного быстрее но сильно использует память а подпрограмма выполняться будет дольше но съекономит флеш-память что будет заметно если данная функция используется очень часто. Но на 16 тактов дольше выполнение.
Но лучше этой фигней не страдать, а создать в прошивке некий HAL, где доступ к железу будет разграничен от основного алгоритма и осуществляться через строго заданные интерфейсы. В таком случае у тебя не будет никаких портов, только функции высокого уровня(вроде "отправить байт") а вся реализация будет отделена логически. Вобщем, вариантов может быть масса главный критерий - удобство использования.
Alexeyslav писал(а):причем эта директива ограничена однострочными абстракциями, первый вариант еще можно легко реализовать при помощи дефайна, а для второго варианта уже нужен макрос
Хмм... Под "однострочными" вы что имеете в виду? Исходную запись или результат?
А макрос не через define делается?
oleg110592 писал(а):мне нужно обращаться к нему как будто к двум портам, например биты 0,1,2,3 этого порта - это некий виртуальный порт PORTX, к которому также хотелось бы обращаться как к регистру. И есть порт PORTY - биты 4,5,6, с аналогичным доступом.
Если на чтение, то можно, например, вот так сделать (поверх порта A).
#define GET_PORTX (PINA&0x0f)
#define GET_PORTY ((PINA&0x70)>>4)
На запись маленько сложнее...
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
директива #define пишется только в одну строку, макрос делается при помощи пары директив .macro и .endmacro между ними можно запихнуть целую простыню текста с подставляемыми параметрами.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
макросы обрабатываются препроцессором, поэтому язык значения не имеет. на С тоже работает.
так дефайном можно сделать пару строк, больше будет очень не удобно... а уж про параметры в такой макроподстановки уже молчу. А вывих мозга получить исследуя программу с такими дефайнами - как нефиг делать.
И в какой среде для языка Си работают макросы в виде .macro .endmacro ???
amd9800, код функции вызывается, а код макроса поставляется каждый раз в то место, где он указывается.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Макрос - нечто вроде синонима - подставляется вместо него во всех местах, где он встретится тот текст, который в определении оного.
Ну в общем учите матчасть..
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Макросы не имеют никакого отношения к среде и языку на котором пишешь, макросы работают непосредственно перед компиляцией на уровне препроцессора поскольку они ГЕНЕРИРУЮТ исходник.
В макрос можно передать к примеру часть имени функции, склеить внутри полное имя и вызвать эту функцию, что обычным процедурам в рантайме недоступно.
Alexeyslav, препроцессоры бывают разные. Не зря там написано "The C Preprocessor".
AvrAssembler2 умеет обрабатывать определения в стиле Си-шного препроцессора и знает что такое ".marco", однако cpp (GNU C Preprocessor) не знает что такое ".macro".
Не спорю, что само определение макроса можно рассматривать независимо от языка, и можно "ручками" сделать не типичную схему обработки исходника с использованием каких угодно средств. И, соответственно, можно попробовать прикрутить препроцессор от AvrAssembler2 к программе на Си - только зачем?
Alexeyslav писал(а):макрос делается при помощи пары директив .macro и .endmacro
Это для ассемблеров! Типично для ассемблеров.
Для Си, обычно, все делается через "#define". Посмотрите раздел 3 по ссылке про препроцессор для Си - как называется раздел и с помощью каких директив создаются макросы в Си.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Всем доброго дня Кто-нибудь может подсказать, как работать с 74HC595D? Гугл какого-то туториола не выдал, в даташите я понял только названия ног Я даже не понял смысла того, что написано в таблице управления микросхемой .В целом ситуация такая: есть, скажем, 4х разрядный 7ми сегментный индикатор. Есть ATmega48, без внешнего кварца.
Ну и вопрос, куда и что подключать, чтобы отправить ей команды? И в каком виде ей их слать? Как тактировать? В общем, ничего я не пойму
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Gudd-Head, в целом по поводу учебника по цифровой электронике вы правы, но я как-то не сторонник книг или ВУЗов, ИМХО, всё лучше доходит с практикой. Нагуглил вот http://avrproject.ru/publ/kak_podkljuch ... 5/2-1-0-44 то, что надо, кажется. Надо было искать "...сдвиговый регистр", на это меня подтолкнул ваш ответ, спасибо
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.