Jump to content
Andrey_47

Указатели на отдельные выводы порта. Виртуальный порт

Recommended Posts

Хочу создать виртуальный порт для того, чтобы выводы из разных реальных портов можно было бы объединить в один виртуальный.

Решил для начала попробовать с помощью указателей создать переменную, и, чтобы с помощью этой переменной менять значение вывода одного из портов (PORTA0)

Вот как я это пытался делать:

#define F_CPU 8000000UL
#include <avr/io.h>

 int *a;

int main(void)
{
    DDRA |= (1<<0);
    a = &PA0;
    *a = 1;
       
    while (1) 
    {
    }
}


Разумеется ничего не компилируется, потому что вид записи типа  a = &PA0; является неправильным. 

Кто-нибудь знает как сделать правильный вид записи, чтобы с помощью переменной менять уровень одного из выводов порта???

Да и вообще, если есть примеры того, как сделать виртуальный порт из набора выводов других портов пришлите пожалуйста . А то по тому, что имеется в интернете не особо что то понятно.

 

Share this post


Link to post
Share on other sites

Задача абсолютно надуманная.

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

Но, с моей точки зрения, во всех случах это не стоит делать вообще: выгода сомнительная.

Указатель невозможно сделать на данные меньше байта размером.

Share this post


Link to post
Share on other sites

Высококачественные конденсаторы Panasonic для надежности вашей электроники!

Электролитические алюминиевые конденсаторы Panasonic отличаются повышенной надежностью, длительным сроком службы, низким импедансом и выдерживают большой ток пульсаций, в то время как семейства полимерных конденсаторов Panasonic SP-CAP, POSCAP, OS-CON и HYBRID характеризуют сверхнизкий ESR и увеличенная емкость, работа при высоких напряжениях и в расширенном температурном диапазоне. Приобретая продукцию Panasonic, вы гарантированно получаете самое передовое решение для ваших задач. Для облегчения вашего выбора, мы подготовили подборку полезных материалов.

Читать статьи

12.10.2019 в 20:18, Andrey_47 сказал:

Разумеется ничего не компилируется, потому что вид записи типа  a = &PA0; является неправильным. 

епстественно неправильный, потомушта PA0 это не переменная и не адрес , это тупая автозамена дефайном для препроцессора вида:

/* ***** PORTB ************************ */
/* PORTB - Data Register, Port B */
#define    PB0          0       // 
#define    PB1          1       // 
#define    PB2          2       // 
#define    PB3          3       // 
#define    PB4          4       // 

а рабочие регистры описываются через асм вставки в тех же командах препроцессора :

#pragma used+
sfrb PINB=0x16;
sfrb DDRB=0x17;
sfrb PORTB=0x18;
sfrb PINA=0x19;
sfrb DDRA=0x1a;
sfrb PORTA=0x1b;
#pragma used-

усе это живет в инклюдах. и вы можете обозвать любой регистр на свое усмотрение теме же командами. но компилятор кодевиженАВР и еже с ним не позволяют создавать/накладывать переменные/структуры/объединения по конкретному адресу RAM в отличии от компиляторов других МК

и полностью согласен с @ARV для работы виртуальный порт на не нать.

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Здравствуйте. Затеялся собрать анализатор спектра на светодиодах, 20x20 светодиодов, МК ATMEGA328P.  Долго ломал голову, как переключать столбцы без использования МК, дабы его не загружать.И вот что у меня получилось. Набросал тестовую прошивку для теста в протеусе.  При инилизации подается импульс на вторую ножку U4a, и на предпоследнем столбце. Думал сетку сделать на 5 сдвиговых регистрах (как раз 40 сигнальных линий), но боюсь мощности МК не хватит для обработки FFT и вывода на матрицу, будет подвисать. Кто что думает по поводу схемы? бегущая строка.pdsprj Natali_2012_program.hex
    • вообще-то не -1 , а около -1.3..1.5 , потомушта падение на диоде 0,64..0,75в , а их в плече моста два... для увеличения коэф. стабилизации
    • Я ведь не просто так, после этого "благородного дела" в отношении чужого государства, разместил заметку о наших гражданах, заживо сваренных в кипятке. Венеция, для нашего ворья, намного дороже, нужнее  и роднее, чем какая-то жопа под  названием Пенза,  в которой для ремонта трубопроводов не выделено ни куя. Или вот ещё: https://news.mail.ru/incident/39544967/?frommail=1 Кого е_ёт Благовещенск и 169 его детей, заражённых гепатитом...? Вот что Венецию затопило...вот это бл_дь трагедия для всего Российского народа.
    • А зачем в той схеме на lm317 и lm337 используется операционный усилитель? Спасибо всем за помощь!
    • Это граница до взрыва диода, при токе в 10 ампер  Там же нарисовано - всего 0.5...0.7 вольт при 85 градусах! Куда ты вообще смотришь...
×
×
  • Create New...