Страница 610 из 628

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

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

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

PB1 led;
led.write(0);
PB5::write(1);

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

Добавлено: Сб янв 23, 2021 00:38:32
Эйлер Леонард
Ну вот незабвенный digitalRead. Надо бы переложить на ASM. Чем я сейчас и занят. Ну как там говорят, когда коту делать нечего..
uint8_t digitalRead(uint8_t pin){ return !!( PINB & (1<<pin) );}

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

Добавлено: Сб янв 23, 2021 15:59:20
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;

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

Добавлено: Вс янв 24, 2021 00:53:17
Олегыч1
Подскажите пожалуйста, чем по сути отличается микроконтроллер от микропроцессора? Я знаком только с AVR-микроконтроллерами. А сейчас вот столкнулся с микропроцессором, который так же нуждается в прошивке, как и AVR... И имя ему: bj8p153. Что это вообще за зверек такой? Прошу прощения, если не в тот раздел написал :oops: не знаю куда отнести свой вопрос.

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

Добавлено: Вс янв 24, 2021 01:16:50
VladislavS
[uquote="Олегыч1",url="/forum/viewtopic.php?p=3966160#p3966160"]А сейчас вот столкнулся с микропроцессором,
....
И имя ему: bj8p153.[/uquote]Смешно. AVR по сравнению с ним - суперкомпьютер! Даташит гуглится в 3 сек. В чём проблема почитать?

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

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

https://radiokot.ru/forum/viewtopic.php?f=61&t=175053

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

Добавлено: Вс янв 24, 2021 03:47:24
КРАМ
[uquote="Олегыч1",url="/forum/viewtopic.php?p=3966160#p3966160"]А сейчас вот столкнулся с микропроцессором[/uquote]
Это КОНТРОЛЛЕР, а не процессор (даташит об этом недвусмысленно намекает прямо в заголовке), причем с ОТР (One Time Programming - однократно программируемой) программной памятью.

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

Добавлено: Вс янв 24, 2021 20:13:08
Эйлер Леонард
Решено. Самый быстрый в мире 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. НУ.. За дружбу, Си++ и ассемблера!

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

Добавлено: Вс янв 24, 2021 20:39:20
VladislavS
А теперь с удивлением узнаём, что командами SBI и CBI доступны не все порты. А вот C конструкцию типа PINx |= (1<<pin); компилятор сам способен перевести либо в SBI, либо в OUT исходя из номера порта. Без всякого асма.

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

Добавлено: Вс янв 24, 2021 21:30:34
NStorm
Самый быстрый в мире
Сомнительно. Т.к. как не раз уже вам написали, компилятор Си и так бы нормально всё сделал.

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

Добавлено: Вс янв 24, 2021 21:44:08
Эйлер Леонард
Вполне может быть и так.

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

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

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

Добавлено: Вс янв 24, 2021 22:03:29
VladislavS
[uquote="Эйлер Леонард",url="/forum/viewtopic.php?p=3966675#p3966675"]Вполне может быть и так.[/uquote]Тут недостаток в том, что функция не будет заинлайнена из другой единицы трансляции. Стоит обернуть её в шаблонный класс и сделать статическим методом. Тогда С++ действительно сделает её эффективной. Можно так же продумать реализации, когда на вход подаются константные данные. Тогда проверка условия будет "вырождаться" на этапе компиляции.

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

Добавлено: Вс янв 24, 2021 23:31:47
Эйлер Леонард
Сейчас я пока просто изучаю. Напр.

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

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 читал на разных форумах.

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

Добавлено: Пн янв 25, 2021 00:30:22
VladislavS
Научитесь смотреть листинги компиляции. Пробуйте, смотрите, сравнивайте, делайте выводы.

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

Добавлено: Пн янв 25, 2021 11:38:46
Олегыч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 и я запутался поэтому немного. Короче производители и сами точно не уверены к чему отнести данную микросхему, т.к. сильной принципиальной разны получается и нет.

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

Добавлено: Пн янв 25, 2021 12:11:01
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)
С классом не будет лишних скобок и параметров, имена функций тоже будут короче, т.к. они ни с какими другими именами не конфликтуют.

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

Добавлено: Пн янв 25, 2021 12:22:05
Мурик
Олегыч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А

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

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

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

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

Добавлено: Пн янв 25, 2021 13:28:02
parovoZZ
Если кратко, то в состав микроконтроллера входит микропроцессор, память (постоянная и оперативная), периферия и др. модули например задающий генератор, умножитель частоты и т. д.
В микропроцессоре это всё тоже есть. По ссылке, что я дал, по сути всё разобрано.

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

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

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