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

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

Сб авг 14, 2021 22:50:33

И вообще, быть вендузятником - это как на нуль делить свою жизнь!!!
Операционная система, как и любой другой инструмент, выбирается исходя из круга стоящих задач. Считать по-другому - искусственно ограничивать себя, а это неправильно.
Последний раз редактировалось mickbell Сб авг 14, 2021 22:51:05, всего редактировалось 1 раз.

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

Сб авг 14, 2021 22:58:58

Разобрался. Написано Buy, я так понял что покупать надо. Не хотел по имейлу активировать. Ок, запустил.

Добавлено after 2 minutes 22 seconds:
Насчёт винды я согласен что надо с неё уходить только из за того что они наглеют. Слежка и.т.п.
А программировать где угодно можно и применять навыки. Потом ещё искать эмуляторы для виндовских программ под линукс.

Добавлено after 5 minutes 58 seconds:
https://learnc.info/c/namespaces.html
Функцию нельзя определять более одного раза в разных файлах или нельзя иметь функции с одинаковыми названиями в разных файлах?

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

Сб авг 14, 2021 23:44:21

Операционная система, как и любой другой инструмент, выбирается исходя из круга стоящих задач. Считать по-другому - искусственно ограничивать себя, а это неправильно.

Ну-ну... Одно дело - в игрушки играть, для чего мастдайка как раз подходит, и совсем другое - работать! Без баша с кореутилсами вообще ничего не сделать. Я уж молчу о вменяемом репозитории с софтом!
Потом ещё искать эмуляторы для виндовских программ под линукс.

Не надо. Очень редко можно найти такой софт, который только под огороженной мастдайкой работает. Но все равно он будет стоить 100500 денег, так что — не нужен!

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

Вс авг 15, 2021 07:55:08

Ну-ну... Одно дело - в игрушки играть, для чего мастдайка как раз подходит
Игрушки - тоже аргумент.

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

Вс авг 15, 2021 22:57:31

Кто подскажет.
Спецификатор %p происходит от слова Pointer- указатель.
Взять адрес переменной можно так: int r; printf("%p\n", &r);
Здесь всё логично для меня, спецификатор с названием Pointer работает с адресом.

Но ведь указателем называют другую конструкцию. Вот такую int r=0; int *k=&r;
Здесь непонятно почему это является указателем. Добавили ещё одну конструкцию и называем это указателем, хотя адрес переменной можно брать без посредника, в данном случае посредник это переменная k.

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

Вс авг 15, 2021 23:02:40

хотя адрес переменной можно брать без посредника

и сразу вопрос: что значить "брать"?

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

Вс авг 15, 2021 23:40:33

Я не знаю как правильно сказать. Буду стараться выражаться понятнее.
Я имел в виду: я вывожу на экран адрес переменной r работая со спецификатором, который происходит от слова Pointer(Указатель) %р.
И это для меня было логично, это бы я принял как описание указателя.
Но указатель почему то это другое, со звёздочками.

Добавлено after 33 minutes 29 seconds:
Этому определению больше подходит название не Указатель, а Стрелочник))
Потому что идёт работа через переменную-посредника, в данном случае это переменная k.

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

Вс авг 15, 2021 23:43:47

Кто подскажет.
.....
Но ведь указателем называют другую конструкцию. Вот такую int r=0; int *k=&r;
Здесь непонятно почему это является указателем. Добавили ещё одну конструкцию и называем это указателем, хотя адрес переменной можно брать без посредника, в данном случае посредник это переменная k.

k не является "посредником" и никакого отношения к r не имеет. k - это специфический тип переменной имеющей разрядность ПЛАТФОРМЫ и ей может быть присвоено ТОЛЬКО ЗНАЧЕНИЕ АДРЕСА.
Адрес переменной - это ЗНАЧЕНИЕ КОНСТАНТЫ, а не переменная. И именно это значение может быть присвоено типу указатель.
Ну и выражение int *k=&r; означает, что объявляется указатель k на переменную размерностью unsigned integer и ему дефолтно присваивается значение АДРЕСА переменной int r.
Возьмем для примера 8-битный МК с адресным пространством ОЗУ 16 бит. То есть максимальное (а не физически реализованное) адресуемое пространство составит 65536 байт. Тогда указатель будет 16-битный.
А если адрес 32-разрядный, то и указатель тоже будет 32-разрядный. А разрядность МК по данным может при этом быть любой от 8 бит и более.
Последний раз редактировалось КРАМ Вс авг 15, 2021 23:53:49, всего редактировалось 3 раз(а).

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

Вс авг 15, 2021 23:49:37

чтобы вывести что-то на экран, сперва необходимо это что-то преобразовать в понятное для экрана. А затем записать в регистр, из которого аппаратное обеспечение МК заберёт и по интерфейсу передаст в экран. Если в функцию надо передать адрес переменной, в которой содержится значение, значит внутри этой функции также определён указатель.

Добавлено after 2 minutes 51 second:
и ей может быть присвоено ТОЛЬКО ЗНАЧЕНИЕ АДРЕСА.

ну, Си такой язык, что присвоено может быть что угодно. Но для компилятора это всегда будет адрес.

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

Вс авг 15, 2021 23:52:21

присвоено может быть что угодно. Но для компилятора это всегда будет адрес.

А разве "что угодно" не входит в адресное пространство? И если не входит, то исключение по ошибке адреса будет следствием при обращении к переменной по этому значению указателя...

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

Пн авг 16, 2021 00:13:30

Это будет являться указателем? int r; printf("%p\n", &r);
Почему нет, если здесь используется спецификатор %p, который происходит от слова Pointer(Указатель)?

Добавлено after 16 minutes 35 seconds:
Адрес может и статичен, но при разыменовывании это переменная, которую можно менять сколько хочешь раз.
И это остаётся всё та же самая k при разыменовывании, которая будет являться переменной. Я вижу это как посредничество потому что адрес переменной r можно вывести на экран без посредничества дополнительных конструкций со звёздочками, что я написал постом выше.

Добавлено after 4 minutes 22 seconds:
Но что самое важное от чего я и путаюсь- это то что в этой упрощённой конструкции выведения адреса на экран я использую спецификатор %p, который происходит от слова Pointer(Указатель). Ну всмысле что ещё надо чтоб назвать это указателем.

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

Пн авг 16, 2021 00:39:09

здесь используется спецификатор %p, который происходит от слова Pointer

Вы мешаете в кучу формат аргументов функции printf (это особый случай) и формат переменных в теле программы.
Разыменование - это лишь форма присвоения/возврата значения переменной по указателю.
Если вы пишите функцию, которая имеет аргументы, то передать в нее значения аргументов вы можете двумя способами - либо указав имя переменной, значение которой передается, либо через указатель, тогда передать в функцию можно значение любой переменной (с размерностью определенной при объявлении указателя) и тогда функция станет универсальной по отношению к аргументу.

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

Пн авг 16, 2021 00:48:10

Это два разных типа Указателей значит? Ок. Если так, то более понятно.
& get a pointer; %p print a pointer
* а это третий Указатель, который другого вида, ну я не экстрасенс, почему они одинаково их назвали тогда.

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

Пн авг 16, 2021 00:50:36

Это будет являться указателем? int r; printf("%p\n", &r);
Почему нет, если здесь используется спецификатор %p, который происходит от слова Pointer(Указатель)?

А Си здесь причём? Это команда форматирования для функции printf().

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

Пн авг 16, 2021 01:14:04

А Си здесь причём? Это команда форматирования для функции printf().

У меня этот код в Си компилируется, запускается и выдаёт на экран адрес переменной r.
Код:
#include <stdio.h>
int main(void) {
    int r;
    printf("%p\n", &r);
  return 0;
}


Добавлено after 3 minutes 24 seconds:
& get a pointer; %p print a pointer
* это тоже Указатель.
Как мне кажется очень легко запутаться. Два разных типа указателей в одном выражении.

Добавлено after 1 minute 43 seconds:
Кодом выше я тоже указатель вывел на экран, только другой значит указатель.

Добавлено after 9 minutes 41 second:
Неа. Это всё один вид указателей.

Добавлено after 1 minute 32 seconds:
Может то что со звёздочкой можно назвать переносчиком указателя))

Добавлено after 2 minutes 32 seconds:
Вот то что & и %p могут использоваться без конструкций со звёздочкой наталкивает на мысль что указателем можно назвать сам адрес ячейки.

Добавлено after 1 minute 7 seconds:
А звёздочка как сосуд для указателя, в котором его переносят.

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

Пн авг 16, 2021 01:17:54

Ну вот и настала пора перейти к символам и строкам в Си.

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

Пн авг 16, 2021 01:31:45

Это два разных типа Указателей значит? Ок. Если так, то более понятно.
& get a pointer; %p print a pointer
* а это третий Указатель, который другого вида, ну я не экстрасенс, почему они одинаково их назвали тогда.

Еще раз.
&<variable> - это ЗНАЧЕНИЕ АДРЕСА ПЕРЕМЕННОЙ, а никакой не указатель.
Есть ОБЪЯВЛЕНИЕ указателя (не путать с его употреблением в коде). Форма объявления указателя:
<тип на который указывает> *<имя указателя> - char *a;
Есть ПРИСВОЕНИЕ ЗНАЧЕНИЯ указателю в коде - a=&<variable>; И здесь нет никаких звездочек.
Есть разыменование - *a=12345; это присвоение значения переменной на которую ссылается указатель. И тут вообще указатель не модифицируется.
% - это не знак указателя. Это В ДАННОМ СЛУЧАЕ стартовый символ аргумента функции printf. А p является спецификатором, говорящем о том, что вывод будет по указателю. Предлагаю прочесть описание этой функции, а не фантазировать. :)

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

Пн авг 16, 2021 02:12:00

Хорошо, я понимаю что это неправильно.
Но здесь явно описание плохое или кто то три раза повторил и все подхватили.
----------
Вы игнорируете просто аргументы что я пишу.
Да, вижу что неправильная моя теория, но не полностью по моей вине.

Ещё раз логику опишу.
Имеем код:
Код:
#include <stdio.h>
int main(void) {
    int r;
    printf("%p\n", &r);
  return 0;
}



& - этот знак означает get a pointer что переводится как ПОЛУЧИТЬ УКАЗАТЕЛЬ
К чему я в данном коде применяю &. К переменной r. Для чего? Для получения Адреса этой переменной.
%p - этот спецификатор означает print a pointer что переводится как НАПЕЧАТАТЬ УКАЗАТЕЛЬ.
Что я печатаю с помощью %p. Я печатаю Адрес переменной r с помощью спецификатора %p
Посмотрите с моей стороны. Что я должен думать если всё по логике указывает именно на Адрес переменной.

Может фантазирую, да, Но описание спецификатору и Анперсанде не я придумывал.

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

Пн авг 16, 2021 03:16:58

Но описание спецификатору и Анперсанде не я придумывал.

Тут путаница из-за жаргонов и неточного перевода.
Амперсант означает получение значения ДЛЯ указателя. Формат этого значения соответствует ТИПУ "указатель". То есть в жаргоне только из контекста можно понять о чем идет речь - о самом указателе или об адресах.
Точно так же мешают в кучу разрядность константы(значения) и тип переменной. Например. В жаргоне 0.2345 - это флоат. Но это никакой не флоат, а просто число. И оно может быть присвоено типу int который может быть fixed, то есть переменной с фиксированной точкой.
Добавлено after 3 minutes:
%p - этот спецификатор означает print a pointer что переводится как

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

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

Пн авг 16, 2021 09:37:48

Что-то тут все в толстый троллинг скатилось…
Ответить