С чего начать программировать микроконтроллеры?

Здесь принимаются все самые невообразимые вопросы... Главное - не стесняйтесь. Поверьте, у нас поначалу вопросы были еще глупее :)
parovoZZ
Мудрый кот
Сообщения: 1759
Зарегистрирован: Пт июн 01, 2018 07:28:45

Re: С чего начать программировать микроконтроллеры?

Сообщение parovoZZ »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=4075222#p4075222"]для более сложных задач (работа с разнообразной периферией, графическими дисплеями) наверно лучше подойдёт С++, т.к. код получается стройнее, и хоть результирующая прошивка получается объёмней, но применяемые в этом случае более мощные МК её потянут. (пример - Марлин (прошивка для 3д принтера) написан на С++ в среде ардуино...)[/uquote]
Вообще не показатель. У меня контроллер 3D принтера на ARM, прошивка на Си. Абсолютно всё конфигурируется из текстового файла. В марлине, насколько я понимаю, необходимо перепрошивать.
koeltrad
Потрогал лапой паяльник
Сообщения: 317
Зарегистрирован: Ср дек 09, 2020 18:38:07

Re: С чего начать программировать микроконтроллеры?

Сообщение koeltrad »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4076684#p4076684"]В третий раз. Спецификатором является ТОЛЬКО p. Знак % применяется и с другими спецификаторами, коих целая туча.[/uquote]
Не вижу разницы. Перевод не меняется.
ДЛЯ указателя. Так понятней, да. Но в коде, который я написал, Указателя нет вообще. А символы ДЛЯ указателя присутствуют.
Осталось только pointer перевести по другому)))

Добавлено after 30 seconds:
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4076737#p4076737"]Что-то тут все в толстый троллинг скатилось…[/uquote]
А ведь хорошие посты писали. Зачем же так.
Когда не можешь или не хочешь объяснить, мир или волшебный или троллит тебя.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25148
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: С чего начать программировать микроконтроллеры?

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

[uquote="koeltrad",url="/forum/viewtopic.php?p=4076747#p4076747"]Но в коде, который я написал, Указателя нет вообще. А символы ДЛЯ указателя присутствуют.[/uquote]
В четвертый раз предлагаю прочитать описание функции printf...
Спецификатор р под кавычками определяет СПОСОБ передачи выводимого значения. Это ЛОКАЛЬНЫЙ указатель ВНУТРИ функции. Аргумент передаваемый в функцию расположен ПОСЛЕ ЗАПЯТОЙ и является значением этого локального указателя.
Что не так? Никакого внешнего указателя не требуется.
Не надо переводить аббревиатуры и искать сакральный смысл в буквах. Есть мануал, где некие символы определяют некие соответствующие этим символам действия. Никаких других толкований давать не нужно.
koeltrad
Потрогал лапой паяльник
Сообщения: 317
Зарегистрирован: Ср дек 09, 2020 18:38:07

Re: С чего начать программировать микроконтроллеры?

Сообщение koeltrad »

Кажется нашёл объяснение. Можете оценить?
Вот описание Указателя из интернета:
Указатель — это переменная, которая содержит адрес другой переменной.
В моём примере r содержит адрес самой себя, а не другой переменной. Поэтому r не будет являться указателем. Имеется в виду указатель на адрес другой переменной.
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: С чего начать программировать микроконтроллеры?

Сообщение Eddy_Em »

[uquote="koeltrad",url="/forum/viewtopic.php?p=4076747#p4076747"]Зачем же так.[/uquote]
Вот и мне интересно: зачем ты корчишь комедию и строишь из себя идиота?
Тема давно скатилась в офтоп. Элементарные детские вопросы по С можно одним махом решить, прочитав Кернигана & Ритчи. А вопросы по аргументам функций glibc — почитав маны. Ну набери ты в консоли man 3 printf — и читай на здоровье!
В моём примере r содержит адрес самой себя, а не другой переменной.
Вот тебе простой пример:

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

#include <stdio.h>

int main(){
        int x = 2;
        void *ptr = (void*)&x;
        printf("ptr=%p\n", ptr);
        ptr = &ptr;
        printf("ptr=%p\n", ptr);
        return 0;
}
Сначала ptr содержит адрес x, а потом - свой собственный.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25148
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: С чего начать программировать микроконтроллеры?

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

[uquote="koeltrad",url="/forum/viewtopic.php?p=4076769#p4076769"]Указатель — это переменная, которая содержит адрес другой переменной.[/uquote]
Да, именно так.
Аватара пользователя
Эйлер Леонард
Встал на лапы
Сообщения: 104
Зарегистрирован: Пн ноя 04, 2019 09:58:29
Откуда: г. Нижний Тагил Свердл. обл.

Re: С чего начать программировать микроконтроллеры?

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

Добрый вечер. У меня не большой вопросик.
Вот классический код начинающего микроконтроллерщика
Спойлер// ATtiny85 test
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>

int main(void){

PORTB |= (1 << PB2);
DDRB |= ( 1 << PB2 );// output

while(1){
PORTB |= (1<<PB2);
_delay_ms(500);
PORTB &= ~(1<<PB2);
_delay_ms(500);
}

}

/*
0x18 PORTB – – PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0
0x17 DDRB – – DDB5 DDB4 DDB3 DDB2 DDB1 DDB0
0x16 PINB – – PINB5 PINB4 PINB3 PINB2 PINB1 PINB0
*/
А теперь необходимо переписать тот же код без использования имен регистров, используя исключительно их адреса (0x18, 0x17, 0x16) согласно ДШ. :dont_know:
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: С чего начать программировать микроконтроллеры?

Сообщение Gudd-Head »

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

Re: С чего начать программировать микроконтроллеры?

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

Ну напр. так...
Спойлер/* ATiny85 -std=c++14
регистр специального назначения
регистры SFR
*/
#define F_CPU 8000000UL //
#include <avr/io.h>
#include <util/delay.h>

#define GPIO_PIN(port, pin) ( ((port) << 4) | (pin) )
#define GPIO_REG(pin) ((pin ) >> 4)
#define GPIO_MASK(pin) _BV( (pin) & 0xF )

//#define GPIO_MASK(pin) (1 << ((pin) & 0xF))
//constexpr
//uint8_t GPIO_MASK(uint8_t pin){
//return 1 << ( (pin) & 0xF );
//}


class BOARD {
public:
enum pin_t {
D0 = GPIO_PIN(0x36,0), // PINB:0
D1 = GPIO_PIN(0x36,1), // PINB:1
D2 = GPIO_PIN(0x36,2), // PINB:2
D3 = GPIO_PIN(0x36,3), // PINB:3
D4 = GPIO_PIN(0x36,4), // PINB:4
D5 = GPIO_PIN(0x36,5), // PINB:5
};
};

template<BOARD::pin_t PIN>
class GPIO {
public:
GPIO<PIN>& input(){// & - адрес операнда PIN в памяти
SFR()->ddr &= ~MASK;
return (*this);// * - значение по адресу
}

//void input(){ SFR()->ddr &= ~MASK; }

void output(){ SFR()->ddr |= MASK;}

void low(){ SFR()->port &= ~MASK; }

void high(){ SFR()->port |= MASK; }

void write(int value){
if(value){ high(); } else { low(); }
}

bool read(){ return ((SFR()->pin & MASK) != 0); }

void operator=(int value){
write(value);
}

protected:
struct gpio_reg_t {
volatile uint8_t pin; //!< Port Input Pins.
volatile uint8_t ddr; //!< Data Direction Register.
volatile uint8_t port; //!< Data Register.
};

gpio_reg_t* SFR(){ return ( (gpio_reg_t*) GPIO_REG(PIN) ); }

static const uint8_t MASK = GPIO_MASK(PIN);
};


GPIO<BOARD::D3> led;

int main(void){

led.output();// пин на выход

while (1) {// мигание светодиодом

led.write(1); // зажечь
_delay_ms(500);
led.write(0); // погасить
_delay_ms(500);

}
}
Взял здесь. Разобрал по запчастям, потом снова собрал. Фурычит. Правда выпотрошил все, то не мешает работе. В целом вроде бы всё понятно. Сначала рылся в io.h. Но там макрос на макросе и макросом подгоняет.
Аватара пользователя
mickbell
Друг Кота
Сообщения: 16373
Зарегистрирован: Пт мар 30, 2012 05:17:29
Откуда: Екатеринбург

Re: С чего начать программировать микроконтроллеры?

Сообщение mickbell »

Зачем вообще отказываться от имён регистров? Кот :))) становится нечитаемым.
И хрюкотали зелюки,
Как мюмзики в мове.

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

Re: С чего начать программировать микроконтроллеры?

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

Я разбираюсь с библиотекой GPIO (ссылка) Перевод со страницы англ.->рус.
Библиотека Arduino GPIO была разработана для обеспечения высокопроизводительного доступа к цифровым выводам. Большинство функций доступа скомпилированы в одну инструкцию и выполняются за 1-2 такта. Функции библиотеки более чем в 10 раз быстрее, чем функции цифровых выводов Arduino. В некоторых случаях в 100 раз быстрее...
Скачал, установил, отвязался от Ардуины. Работает нормально. Но хотелось бы знать больше - что, зачем и почему до каждой строчки. В целом просветление некоторое есть. Самообразование так сказать (ну или делать нех..) :))
Аватара пользователя
mickbell
Друг Кота
Сообщения: 16373
Зарегистрирован: Пт мар 30, 2012 05:17:29
Откуда: Екатеринбург

Re: С чего начать программировать микроконтроллеры?

Сообщение mickbell »

Тогда всё правильно, читайте файлы с макросами. Например, из библиотек WinAVR. А про ардуй потихоньку забывайте. Железо применять можно.
И хрюкотали зелюки,
Как мюмзики в мове.

На каждый РКН
Найдётся VPN.
ELITE
Открыл глаза
Сообщения: 54
Зарегистрирован: Пт фев 27, 2015 14:15:08

Re: С чего начать программировать микроконтроллеры?

Сообщение ELITE »

Доброго дня
Подскажите, можно ли реализовать на МК

МК - attiny85
среда - ардуино ИДЕ

Хочу использовать 2 порта под АЦП,
НО
надо на одном порте делать замер 0-5в (опорное = питанию мк 5В)
а на другом - 0-1.1В (опорное внутренней стабилизатор 1.1В
--
можно динамически постоянно менять источник опорного???

//зачем надо - делаю на основе этого МК контроллер для электромашинки и один вход на ручку газа идет, а другой на замер тока на шунте (шунт из медной проволоки 2мм диаметром .. надо фиксировать токи до 150А
Аватара пользователя
mickbell
Друг Кота
Сообщения: 16373
Зарегистрирован: Пт мар 30, 2012 05:17:29
Откуда: Екатеринбург

Re: С чего начать программировать микроконтроллеры?

Сообщение mickbell »

Проще ослабить делителем или даже просто одним добавочным резистором сигнал с ручки газа.
И хрюкотали зелюки,
Как мюмзики в мове.

На каждый РКН
Найдётся VPN.
Ответить

Вернуться в «Теория»