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

Приглашаем на вебинар «Новинки и уникальные решения Molex. На что обратить внимание и почему»

7 апреля приглашаем на вебинар, который будет интересен разработчикам и инженерам-схемотехникам, интересующимся тенденциями рынка, новыми перспективными решениями для соединений «провод-провод», «провод-плата», «плата-плата». Для инженеров КИПиА и IT будут освещены уникальные решения Molex для «удлинения» интерфейсов HDMI, DisplayPort и USB даже в условиях сильного зашумления, а также семейство бесконтактных датчиков Contrinex. Помимо этого, будет уделено внимание дальнейшему развитию направления антенн, где Molex имеет ряд интересных и уникальных решений

Подробнее

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...

  • Сообщения

    • Биотуалет-с. Там бензоэлектростанция, думаю, что типа кондиционера было. Да и под землёй не жарко.
    • чем глупее и тупее вопрос - тем под стать ему мой ответ.
    • На помойку. И больше никогда не покупайте такие. 1000мкФ надо. Ну, 470...  
    • И так - сегодня к отдать имеем из прошлого предложения тока: Ноутбучный CD привод http://forumimage.ru/uploads/20200209/158127692541637875.jpg http://forumimage.ru/uploads/20200209/158127694105794941.jpg Остальное всё ушло. И - вот тут ещё немножко - видеокарты AGP (могу каждый пункт "одним куском" за шоколадку): 1. AGP TNT2 M64 FX5600-XT-128M DDR MSI NX6600GT - VTD128 ATI R92L- LC3 ATI Radeon X800Pro 256 Ещё: 2. AGP MSI tI4200 - TD8X MSI X5200 - TD128LF И наконец: 3. PCI-E (пока до выяснения бронь) ATI Radeon HD3870 512 (GDD4 DUAL DVI-I/TVO) - новая, с полным комплектом приложений и CD диском. И ещё отдам сканер "Primax Colorado". Под LPT (вх-->вых). Работает (под ХР и 7-ру драйвер есть). Но как-то немножечко прилёг (с 20 см.) на бочок и начал путать в какую сторону надо парковаться. При "ручной" парковке его в исходное положение - сканирует нормально (блин, а в режиме скана запросто умеет правильно делать "туда-обратно"). Желательно всё в самозабор. http://forumimage.ru/uploads/20200324/15850775756887328.jpg http://forumimage.ru/uploads/20200324/158507759533847615.jpg http://forumimage.ru/uploads/20200324/158507761217362132.jpg http://forumimage.ru/uploads/20200324/158507762454616185.jpg
    • Обьясни это Гиркину, а то он боится нос высунуть и РФии.
    • А, позволю себе поинтересоваться, как там был решен вопрос с говном-с? И с охлаждением?
×
×
  • Create New...