Страница 1 из 3
Изучаю STM8l151 что означает "->"
Добавлено: Пн июл 20, 2015 19:16:37
king-live
Доброго времени суток! Изучаю STM8l151 в частности АЦП в IAR. Есть примеры в инете по настройке АЦП к примеру строка
Код: Выделить всё
CLK->PCKENR2 |= CLK_PCKENR2_ADC1; //Тактирование
Что означает вот такое написание "->"? Или как его по другому написать, близкое к стилю AVR студии. Заранее спасибо!
Re: Изучаю STM8l151 что означает "->"
Добавлено: Пн июл 20, 2015 19:27:41
ARV
это стандартная для языка Си конструкция - работа с указателем. учите язык.
Re: Изучаю STM8l151 что означает "->"
Добавлено: Пн июл 20, 2015 19:40:40
king-live
Посмотрел конструкции в стандартной Си. и указатели в них объявлены через "*" и ни где в моих учебниках нет такой конструкции "->". Вот где конкретно описанны такие конструкции, подскажите если сможете. И потом второй вопрос был связан, с чем его можно заменить такую конструкцию, что бы близко было по стилю AVR студии!
Re: Изучаю STM8l151 что означает "->"
Добавлено: Пн июл 20, 2015 20:45:55
ARV
при чем тут стиль студии? в студии вы можете делать то же самое - это ЯЗЫК СИ.
CLK - это указатель на структуру. обращение к полю структуры, адрес которой содержит этот указатель, делается оператором -> то есть CLK->PCKENR2 означает, что мы обращаемся к полю PCKENR2 структуры, адрес которой содержится в CLK.
что еще добавить? учите язык Си
можно, конечно, написать криво (*CLK).PCKENR2 - это будет по-вашему "в стиле"?
Re: Изучаю STM8l151 что означает "->"
Добавлено: Пн июл 20, 2015 20:52:07
amv2000
king-live писал(а):ни где в моих учебниках нет такой конструкции "->"
Ну так почитайте чужие
http://cppstudio.com/post/5377/
или
http://cpp.com.ru/kr_cbook/ch6kr.html
Re: Изучаю STM8l151 что означает "->"
Добавлено: Пн июл 20, 2015 20:59:51
king-live
Про указатели понял! Кстати за около 5 лет проектов, а их огромное количество по всем направлениям (от пожара-охранных систем до станков с ЧПУ) ни разу не использовал указатели. Просто напросто не знал об их существовании. Не дошёл до этой темы, из за ненадобности! Вот кстати самое крутое объяснение и самое доходчивое - для чего нужны указатели?
http://www.cyberforum.ru/cpp-beginners/ ... 82564.html
И вот после понятия что и к чему и для чего эти указатели, понял что в предыдущих моих проектах они действительно не нужны были (проекты все на AVR Atmega,Attiny). И уверяю и сейчас они мне не нужны. Но!!!!! Вот теперь как мне обойти этот "->" ? В данном случае связанное с работой АЦП.
Re: Изучаю STM8l151 что означает "->"
Добавлено: Пн июл 20, 2015 21:13:52
king-live
Вот к примеру в студии писал под мегу8 (работа с битом "регистром" ADEN)
Всё понятно и просто! Работа с 1 битом регистра ADCRA.
Так почему здесь в IAR такого стиля нет, или так не позволяет делать сама структура STM8 ?
Re: Изучаю STM8l151 что означает "->"
Добавлено: Пн июл 20, 2015 21:42:42
Myp3ik
А что такое ADCSRA в Вашем примере Вам известно?

Re: Изучаю STM8l151 что означает "->"
Добавлено: Пн июл 20, 2015 21:49:16
ARV
king-live писал(а):И вот после понятия что и к чему и для чего эти указатели, понял что в предыдущих моих проектах они действительно не нужны были (проекты все на AVR Atmega,Attiny). И уверяю и сейчас они мне не нужны. Но!!!!! Вот теперь как мне обойти этот "->" ? В данном случае связанное с работой АЦП.
вот именно сейчас они вам очень нужны, потому что для выбранного вами МК без них просто невозможно обойтись.
то, что вам были "не нужны" указатели, свидетельствует лишь о крайней примитивности решаемых задач. ну или о крайне малом опыте программирования.
обойти -> можно обычным разыменованием указателя - выше я приводил пример
кривой записи этого действия.
Re: Изучаю STM8l151 что означает "->"
Добавлено: Вт июл 21, 2015 04:39:33
king-live
А что такое ADCSRA в Вашем примере Вам известно?
Как то в прошлом, один дядька программист (очень мудрый программист, ходячая энциклопедия) на мои дотошные распросы вот типа таких, сказал очень умные слова. - Чем меньше знаешь, тем крепче спишь! Я сначала не понял его слов и даже обиделся немного! Но когда он мне объяснил что он этим хотел сказать, я для себя открыл путь обсалютно не логичный и не понятный скажем для 99% программистов. Но этот путь стал самым эфективным для понятия мира программирования микроконтроллеров в плане производства. Он сказал следующее -ты новичок, скажем маленький ребёнок и поэтому объясню тебе на "пальцах". Вот предположем у тебя есть машина и называется она ADCSRA. У неё есть двери(ADEN) колёса(ADSC) руль(ADIF) коробка передач(ADMUX), магнитафон и т.п, и т.д...... Это "игра в ассоциации" И вот зачем тебе знать конструкцию двери из чего оно сделанно, если тебе только надо её открыть. (лишняя информация!!!!) зачем нужно знать как устроенно колесо если нужно просто чтобы оно вращалось(лишняя информация!!!!!) зачем нужно знать как устроенна коробка передач, если мне нужно просто переключать скорости, то есть менять входные каналы портов в МК(опять же лишняя информация!!!!!) И вот действительно, каждый из нас пользуется тем, что уже предоставленно кем то специально для пользования! И вот вопрос: Какой из 2-х людей действует эффективнее и увереннее в жизни, если им сейчас дать одинаковое задание к примеру съесть яблоко? Один просто возьмёт яблоко съест его не раздумывая(так как в памяти сидит информация что это еда, вкусная и его можно есть) и пойдёт по своим делам. А второй сначала вспомнит ботанику, химию, разабъёт всё яблоко по структуре до кожуры и косточек, начнёт вспоминать как оно на вкус кислое или сладкое и сделает как и первый человек, он его съест......, а может и не съест!!!!!!

. Так что лишняя информация это не есть хорошо! Есть компилятор и есть язык высокого уровня в данном случае Си. Это их работа определять что такое ADCSRA и мне все го лишь надо в нём открыть дверь, завести его, и поехать (если эта машина ........ шутка конечно, но из жизни!)
А вот
то, что вам были "не нужны" указатели, свидетельствует лишь о крайней примитивности решаемых задач. ну или о крайне малом опыте программирования.
это от части верно! Задачи логического уровня, которые решаются обычными логическими микросхемами. Но зачем тратить 2 месяца на разработку устройства на логике если за час можно собрать на микроконтроллере. И потом чтобы прочесть уровень АЦП на ноге контроллера и в зависимости от него что то где то включить или выключить указатели не нужны. Нужна только правильная логика! А к STM8 перешёл пото му что нужны 20 каналов АЦПи они дешевле оптом чем к примеру Attiny828. Я занимаюсь серийным оборудованием, а количество не маленькое. В год порядком 20 000 микросхем программируем под разные устройства и для дома и для промышленности! Спасибо за помощь, придётся изучать указатели, всё равно когда то пришёл бы к этому.
Re: Изучаю STM8l151 что означает "->"
Добавлено: Вт июл 21, 2015 06:39:32
optima
king-live писал(а):
придётся изучать указатели, всё равно когда то пришёл бы к этому.
А стоил ли? сон не пропадет?
king-live писал(а):
сказал очень умные слова. - Чем меньше знаешь, тем крепче спишь!,
Re: Изучаю STM8l151 что означает "->"
Добавлено: Вт июл 21, 2015 06:42:21
ARV
optima писал(а):А стоил ли? сон не пропадет?
king-live писал(а):
сказал очень умные слова. - Чем меньше знаешь, тем крепче спишь!,
и сон пропадет, и седина появится... многие знания - многие печали...
Re: Изучаю STM8l151 что означает "->"
Добавлено: Вт июл 21, 2015 10:11:58
balmer
Самое смешное, что в мелких контроллерах, где не требуется new/delete можно обойтись статическим распределением памяти. Соответственно не знать о указателях вооообще.
В данном случае можно взять StdPeriph_Driver от STM и дальше пребывать в неведении о б операторе ->
Re: Изучаю STM8l151 что означает "->"
Добавлено: Вт июл 21, 2015 10:41:20
ARV
не знать об указателях в Си - это примерно как всю жизнь сверлить ручным буравчиком дырки, не зная о существовании дрелей.
без указателей работать со строками? пересылать более 4 байтов? передавать в функции структуры?
все это можно и без указателей делать, но... неразумно это.
Re: Изучаю STM8l151 что означает "->"
Добавлено: Вт июл 21, 2015 11:06:38
balmer
ARV писал(а):
без указателей работать со строками?
Элементарно:
Код: Выделить всё
char str[] = "abc";
bool contains(char str[], int len, char c)
{
for(int i=0; i<len; i++)
{
if(str[i]==c)
return true;
}
return false;
}
ARV писал(а):
пересылать более 4 байтов?
Не например так.
Код: Выделить всё
struct A
{
uint32_t a;
uint32_t b;
uint32_t c;
};
struct A s1, s2;
s1 = s2;
ARV писал(а):
передавать в функции структуры?
Можно по значению передавать. Получится функциональное программирование
А можно воспользоваться С++ и передавать по ссылке

Re: Изучаю STM8l151 что означает "->"
Добавлено: Вт июл 21, 2015 11:15:14
ARV
bool contains(char str[], int len, char c) - здесь str разве не указатель?
структуры копируете, а массивы?
ну передайте структуру по значению, и результат тоже верните... ссылки в С++ - те же указатели, только иначе названные

Re: Изучаю STM8l151 что означает "->"
Добавлено: Вт июл 21, 2015 11:19:21
Galizin
king-live писал(а):Вот к примеру в студии писал под мегу8 (работа с битом "регистром" ADEN)
Код:
ADCSRA|=(1<<ADEN); // АЦП включён
Всё понятно и просто! Работа с 1 битом регистра ADCRA.
Просто считайте, что в некоторых контроллерах вместо ADCSRA нужно писать секретную комбинацию ADC->SRA. И снова забудьте про указатели, до поры до времени.
В stm это сделано просто ради того, что бы показать, что такой то регистр относится к такой то периферии.
Если очень сильно колбасит, перепишите h файл без структур, как это сделано в заголовках atmel. Да, в этом случае таки да придется разбираться, что такое указатели.
Re: Изучаю STM8l151 что означает "->"
Добавлено: Вт июл 21, 2015 11:34:19
Myp3ik
king-live, тогда, например, в Атмеле чтоб сбросить счетные регистры двух таймеров мы делали так:
Теперь нам нужно сбросить счетные регистры у таймеров на СТМ, это счетные регистры CNT и CNT. А как тогда компилятор поймет к какому таймеру относится конкретный CNT

? А очень просто:
Мысленно поверните стрелку в обратную сторону и она Вам покажет путь истинный

, или хотя бы к какому "блоку" контроллера Вы обращаетесь.
Re: Изучаю STM8l151 что означает "->"
Добавлено: Вт июл 21, 2015 16:22:24
king-live
Спасибо, начинаю разбираться с указателями, но забыв что это указатели! Пока как то так!
Re: Изучаю STM8l151 что означает "->"
Добавлено: Вт июл 21, 2015 16:41:41
king-live
Мысленно поверните стрелку в обратную сторону и она Вам покажет путь истинный , или хотя бы к какому "блоку" контроллера Вы обращаетесь.
А это как раз выход из не понятной ситуации! Спасибо всем за помощь!