Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Reflector »

[uquote="Эйлер Леонард",url="/forum/viewtopic.php?p=3965552#p3965552"]Макрос, это макрос. А функция, это функция.[/uquote]
С функцией получится только на плюсах, там PB0 может быть классом, тогда порт и номер пина он хранит как константы и в функцию их передавать не нужно:

Код: Выделить всё

PB1 led;
led.write(0);
PB5::write(1);
Аватара пользователя
Эйлер Леонард
Встал на лапы
Сообщения: 104
Зарегистрирован: Пн ноя 04, 2019 09:58:29
Откуда: г. Нижний Тагил Свердл. обл.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Эйлер Леонард »

Ну вот незабвенный digitalRead. Надо бы переложить на ASM. Чем я сейчас и занят. Ну как там говорят, когда коту делать нечего..
uint8_t digitalRead(uint8_t pin){ return !!( PINB & (1<<pin) );}
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение VladislavS »

[uquote="Эйлер Леонард",url="/forum/viewtopic.php?p=3965565#p3965565"]Надо бы переложить на ASM.[/uquote]Может сначала посмотреть во что это компилируется и не заниматься ерундой?

Добавлено after 2 minutes 12 seconds:
[uquote="Reflector",url="/forum/viewtopic.php?p=3965564#p3965564"]там PB0 может быть классом[/uquote]Добавлю вариантов

Код: Выделить всё

PB1 led;
led=1;
Аватара пользователя
Олегыч1
Поставщик валерьянки для Кота
Сообщения: 1941
Зарегистрирован: Пт фев 27, 2015 20:57:08
Откуда: Курск

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Олегыч1 »

Подскажите пожалуйста, чем по сути отличается микроконтроллер от микропроцессора? Я знаком только с AVR-микроконтроллерами. А сейчас вот столкнулся с микропроцессором, который так же нуждается в прошивке, как и AVR... И имя ему: bj8p153. Что это вообще за зверек такой? Прошу прощения, если не в тот раздел написал :oops: не знаю куда отнести свой вопрос.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение VladislavS »

[uquote="Олегыч1",url="/forum/viewtopic.php?p=3966160#p3966160"]А сейчас вот столкнулся с микропроцессором,
....
И имя ему: bj8p153.[/uquote]Смешно. AVR по сравнению с ним - суперкомпьютер! Даташит гуглится в 3 сек. В чём проблема почитать?
parovoZZ
Мудрый кот
Сообщения: 1759
Зарегистрирован: Пт июн 01, 2018 07:28:45

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение parovoZZ »

[uquote="Олегыч1",url="/forum/viewtopic.php?p=3966160#p3966160"]Подскажите пожалуйста, чем по сути отличается микроконтроллер от микропроцессора?[/uquote]
Ответ дан здесь

https://radiokot.ru/forum/viewtopic.php?f=61&t=175053
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25154
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение КРАМ »

[uquote="Олегыч1",url="/forum/viewtopic.php?p=3966160#p3966160"]А сейчас вот столкнулся с микропроцессором[/uquote]
Это КОНТРОЛЛЕР, а не процессор (даташит об этом недвусмысленно намекает прямо в заголовке), причем с ОТР (One Time Programming - однократно программируемой) программной памятью.
Аватара пользователя
Эйлер Леонард
Встал на лапы
Сообщения: 104
Зарегистрирован: Пн ноя 04, 2019 09:58:29
Откуда: г. Нижний Тагил Свердл. обл.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Эйлер Леонард »

Решено. Самый быстрый в мире digitalWrite() и pinMode() и незабвенный подмигиватель светодиодной лампочкой. Всего то и надо было перейти на С++ и применить шаблон в качестве одного из параметров функции.
Спойлер

Код: Выделить всё

/*  Attiny85  */ 
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
//----
enum { LOW, HIGH };
enum { INPUT, OUTPUT };
//----
template <typename T>
void digitalWrite(T pin, uint8_t val){
if(!val) {
	__asm__ __volatile__("cbi %0, %1" :: "I" (_SFR_IO_ADDR(DDRB)), "I" (pin) );
 	 } else {
	__asm__ __volatile__("sbi %0, %1" :: "I" (_SFR_IO_ADDR(DDRB)), "I" (pin) );
	 }
}
//----
template <typename M>
void pinMode(M pin, uint8_t mode ){//mode: INPUT, OUTPUT
if(!mode) {
	__asm__ __volatile__("cbi %0, %1" :: "I" (_SFR_IO_ADDR(DDRB)-1), "I" (pin) );
	} else {
	__asm__ __volatile__("sbi %0, %1" :: "I" (_SFR_IO_ADDR(DDRB)-1), "I" (pin) );
    }
}
//--------
int main(void){
	
pinMode(PB0, OUTPUT);
	
    while (1) {
digitalWrite(PB0, HIGH);  // зажигаем светодиод
    _delay_ms(50);        // ждем
digitalWrite(PB0, LOW);   // выключаем светодиод
    _delay_ms(50);        // ждем
	}
	
}
Правда только для Attiny85. НУ.. За дружбу, Си++ и ассемблера!
Вложения
Test(3).gif
Снимок с протеуса
(29.38 КБ) 159 скачиваний
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение VladislavS »

А теперь с удивлением узнаём, что командами SBI и CBI доступны не все порты. А вот C конструкцию типа PINx |= (1<<pin); компилятор сам способен перевести либо в SBI, либо в OUT исходя из номера порта. Без всякого асма.
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение NStorm »

Самый быстрый в мире
Сомнительно. Т.к. как не раз уже вам написали, компилятор Си и так бы нормально всё сделал.
Аватара пользователя
Эйлер Леонард
Встал на лапы
Сообщения: 104
Зарегистрирован: Пн ноя 04, 2019 09:58:29
Откуда: г. Нижний Тагил Свердл. обл.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Эйлер Леонард »

Вполне может быть и так.

Код: Выделить всё

void digitalWrite(volatile uint8_t *port, uint8_t pin, uint8_t val){
	if(!val){ (*(port)) &= ~(1<<pin); }
	else { (*(port)) |= (1<<pin); }
}
Не много поизгалявшись над оригинальной Ардуиновской функцией. (отвязал её от Меги и всех Ардуиновских библиотек) Там - не иначе как тихий ужас я бы не назвал. Ну а насчет подрыгать лапами. Я все-таки лампочки на Reset подключать не планирую.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение VladislavS »

[uquote="Эйлер Леонард",url="/forum/viewtopic.php?p=3966675#p3966675"]Вполне может быть и так.[/uquote]Тут недостаток в том, что функция не будет заинлайнена из другой единицы трансляции. Стоит обернуть её в шаблонный класс и сделать статическим методом. Тогда С++ действительно сделает её эффективной. Можно так же продумать реализации, когда на вход подаются константные данные. Тогда проверка условия будет "вырождаться" на этапе компиляции.
Аватара пользователя
Эйлер Леонард
Встал на лапы
Сообщения: 104
Зарегистрирован: Пн ноя 04, 2019 09:58:29
Откуда: г. Нижний Тагил Свердл. обл.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Эйлер Леонард »

Сейчас я пока просто изучаю. Напр.

Код: Выделить всё

uint8_t digitalRead(volatile uint8_t *port, uint8_t pin){
	return !!( (*(port-2)) & (1<<pin) );
}
И работает ли такой эквивалент?

Код: Выделить всё

template <typename K>
uint8_t digitalRead(K pin){
	uint8_t result;
__asm__ __volatile__("inb %[retval], %[pin]" :[retval] "=a" (result) : [pin] "I" (_SFR_IO_ADDR(DDRB)-2) );
	return result;
}
А то на этой стезе много всяких ловушек и капканов. Пока просто для интереса. А о войне миров С++ & ASM читал на разных форумах.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение VladislavS »

Научитесь смотреть листинги компиляции. Пробуйте, смотрите, сравнивайте, делайте выводы.
Аватара пользователя
Олегыч1
Поставщик валерьянки для Кота
Сообщения: 1941
Зарегистрирован: Пт фев 27, 2015 20:57:08
Откуда: Курск

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Олегыч1 »

[uquote="КРАМ",url="/forum/viewtopic.php?p=3966182#p3966182"][uquote="Олегыч1",url="/forum/viewtopic.php?p=3966160#p3966160"]А сейчас вот столкнулся с микропроцессором[/uquote]
Это КОНТРОЛЛЕР, а не процессор (даташит об этом недвусмысленно намекает прямо в заголовке), причем с ОТР (One Time Programming - однократно программируемой) программной памятью.[/uquote]
А ниже написано BJ8P508/153 is an 8-bit microprocessor with low-power and high-speed CMOS technology и я запутался поэтому немного. Короче производители и сами точно не уверены к чему отнести данную микросхему, т.к. сильной принципиальной разны получается и нет.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Reflector »

[uquote="Эйлер Леонард",url="/forum/viewtopic.php?p=3966631#p3966631"]

Код: Выделить всё

template <typename T>
void digitalWrite(T pin, uint8_t val){
if(!val) {
	__asm__ __volatile__("cbi %0, %1" :: "I" (_SFR_IO_ADDR(DDRB)), "I" (pin) );
 	 } else {
	__asm__ __volatile__("sbi %0, %1" :: "I" (_SFR_IO_ADDR(DDRB)), "I" (pin) );
	 }
}
[/uquote]
Это совсем не то, о чем я говорил изначально, аргумент функции тут по-прежнему присутствует и формально он не константа времени компиляции, потому подобный код не будет компилироваться всегда. Например, если отключить оптимизацию, то не помогут даже навешеные на функцию атрибуты оптимизации и инлайнинга если сама функцию вызывается из неоптимизированного контекста, потому что в таком случае инлайнинг невозможен, а без инлайнинга pin будет передаваться в регистре... Через шаблон нужно передавать само значение, а не тип:

Код: Выделить всё

template <uint8_t pin>
void digitalWrite(bool val){
В таком виде будет компилироваться всегда, но сам вызов выглядит не лучшим образом:

Код: Выделить всё

digitalWrite<PB0>(HIGH)
С классом не будет лишних скобок и параметров, имена функций тоже будут короче, т.к. они ни с какими другими именами не конфликтуют.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Мурик »

Олегыч1 писал(а):чем по сути отличается микроконтроллер от микропроцессора?
https://ru.wikipedia.org/wiki/Однокрист ... контроллер
https://ru.wikipedia.org/wiki/Микропроцессор

Если кратко, то в состав микроконтроллера входит микропроцессор, память (постоянная и оперативная), периферия и др. модули например задающий генератор, умножитель частоты и т. д. То есть микропроцессор это одна из составных частей микроконтроллера.
Олегыч1 писал(а):А ниже написано BJ8P508/153 is an 8-bit microprocessor with low-power and high-speed CMOS technology
Это значит что в микроконтроллере 8-ми битный микропроцессор. Устаревший на данный момент. Ориентируйтесь на 32 бита если нужны современные микроконтроллеры.
Олегыч1 писал(а):Короче производители и сами точно не уверены к чему отнести данную микросхему
Нет, это вы не поняли суть. Это примерно тоже что если бы вы написали
В компе 32-ух битный пароцессор. Короче производители и сами точно не уверены это компьютер или процессор.
Абсурд, согласны?
Олегыч1 писал(а):сильной принципиальной разны получается и нет.
Процессор только выполняет инструкции. Он не содержит памяти и периферии.
Микроконтроллер в виде одной микросхемы, а для процессора нужно много других микросхем - память, контроллер прерываний, система тактирования и т. д.
Вот классический процессор https://ru.wikipedia.org/wiki/КР580ВМ80А
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ARV »

Мурик писал(а):Процессор только выполняет инструкции. Он не содержит памяти и периферии.
современный пентиум или там что еще - микроконтрроллер, получается?

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

Мой уютный бложик... заходите!
parovoZZ
Мудрый кот
Сообщения: 1759
Зарегистрирован: Пт июн 01, 2018 07:28:45

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение parovoZZ »

Если кратко, то в состав микроконтроллера входит микропроцессор, память (постоянная и оперативная), периферия и др. модули например задающий генератор, умножитель частоты и т. д.
В микропроцессоре это всё тоже есть. По ссылке, что я дал, по сути всё разобрано.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Мурик »

ARV писал(а):современный пентиум или там что еще - микроконтрроллер, получается?
Пентиум это что однокристальный контроллер или много других микросхем требует? В нем есть ПЗУ и ОЗУ (кеши не в счет)? Это будет ответ на вопрос.
Читайте вики там все написано.
parovoZZ писал(а):В микропроцессоре это всё тоже есть.
Покажите где именно в этом есть https://ru.wikipedia.org/wiki/КР580ВМ80А

PS.
Не думаю что стоит спорить на эту тему. Олегыч1 спросил в чем отличие, я ответил.
Речь не про современные процессоры типа Intel Core или AMD, а про тем что во встраиваемых решениях в виде одной микросхемы https://ru.wikipedia.org/wiki/Однокрист ... контроллер
Олегыч1 ведь не про компы спрашивал.
Ответить

Вернуться в «Разные вопросы по МК»