Здесь принимаются все самые невообразимые вопросы... Главное - не стесняйтесь. Поверьте, у нас поначалу вопросы были еще глупее :)
Ответить

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

Пн авг 16, 2021 09:50:24

для более сложных задач (работа с разнообразной периферией, графическими дисплеями) наверно лучше подойдёт С++, т.к. код получается стройнее, и хоть результирующая прошивка получается объёмней, но применяемые в этом случае более мощные МК её потянут. (пример - Марлин (прошивка для 3д принтера) написан на С++ в среде ардуино...)

Вообще не показатель. У меня контроллер 3D принтера на ARM, прошивка на Си. Абсолютно всё конфигурируется из текстового файла. В марлине, насколько я понимаю, необходимо перепрошивать.

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

Пн авг 16, 2021 10:15:38

В третий раз. Спецификатором является ТОЛЬКО p. Знак % применяется и с другими спецификаторами, коих целая туча.

Не вижу разницы. Перевод не меняется.
ДЛЯ указателя. Так понятней, да. Но в коде, который я написал, Указателя нет вообще. А символы ДЛЯ указателя присутствуют.
Осталось только pointer перевести по другому)))

Добавлено after 30 seconds:
Что-то тут все в толстый троллинг скатилось…

А ведь хорошие посты писали. Зачем же так.
Когда не можешь или не хочешь объяснить, мир или волшебный или троллит тебя.

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

Пн авг 16, 2021 11:09:01

Но в коде, который я написал, Указателя нет вообще. А символы ДЛЯ указателя присутствуют.

В четвертый раз предлагаю прочитать описание функции printf...
Спецификатор р под кавычками определяет СПОСОБ передачи выводимого значения. Это ЛОКАЛЬНЫЙ указатель ВНУТРИ функции. Аргумент передаваемый в функцию расположен ПОСЛЕ ЗАПЯТОЙ и является значением этого локального указателя.
Что не так? Никакого внешнего указателя не требуется.
Не надо переводить аббревиатуры и искать сакральный смысл в буквах. Есть мануал, где некие символы определяют некие соответствующие этим символам действия. Никаких других толкований давать не нужно.

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

Пн авг 16, 2021 11:14:58

Кажется нашёл объяснение. Можете оценить?
Вот описание Указателя из интернета:
Указатель — это переменная, которая содержит адрес другой переменной.
В моём примере r содержит адрес самой себя, а не другой переменной. Поэтому r не будет являться указателем. Имеется в виду указатель на адрес другой переменной.

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

Пн авг 16, 2021 11:18:44

Зачем же так.

Вот и мне интересно: зачем ты корчишь комедию и строишь из себя идиота?
Тема давно скатилась в офтоп. Элементарные детские вопросы по С можно одним махом решить, прочитав Кернигана & Ритчи. А вопросы по аргументам функций 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, а потом - свой собственный.

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

Пн авг 16, 2021 11:26:23

Указатель — это переменная, которая содержит адрес другой переменной.

Да, именно так.

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

Вт дек 14, 2021 20:54:53

Добрый вечер. У меня не большой вопросик.
Вот классический код начинающего микроконтроллерщика
Спойлер// 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:

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

Чт дек 16, 2021 18:14:49

.... и???

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

Пт дек 17, 2021 16:17:12

Ну напр. так...
Спойлер/* 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. Но там макрос на макросе и макросом подгоняет.

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

Пт дек 17, 2021 17:55:18

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

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

Пт дек 17, 2021 19:34:28

Я разбираюсь с библиотекой GPIO (ссылка) Перевод со страницы англ.->рус.
Библиотека Arduino GPIO была разработана для обеспечения высокопроизводительного доступа к цифровым выводам. Большинство функций доступа скомпилированы в одну инструкцию и выполняются за 1-2 такта. Функции библиотеки более чем в 10 раз быстрее, чем функции цифровых выводов Arduino. В некоторых случаях в 100 раз быстрее...
Скачал, установил, отвязался от Ардуины. Работает нормально. Но хотелось бы знать больше - что, зачем и почему до каждой строчки. В целом просветление некоторое есть. Самообразование так сказать (ну или делать нех..) :))

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

Пт дек 17, 2021 20:07:07

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

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

Вт окт 11, 2022 15:34:12

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

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

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

//зачем надо - делаю на основе этого МК контроллер для электромашинки и один вход на ручку газа идет, а другой на замер тока на шунте (шунт из медной проволоки 2мм диаметром .. надо фиксировать токи до 150А

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

Вт окт 11, 2022 15:41:27

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