а точнее не совсем понятно зачем unsigned char заключено в круглые скобки
это явное преобразование типа результата. по умолчанию результат (baud>>8) будет иметь тип unsigned int (по "наибольшему типу операнда, т.е. baud), а в регистры UBRRL/UBRRH надо помещать байт... и автор посчитал, что без явного указания компилятору рассматривать результат сдвига, как беззнаковый байт, правильный результат может быть не достигнут...
хотя как по мне, так это все избыточно - и без приведения типа все будет сделано корректно
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Объявляется структура с именем database имеет три переменные, rowId, name, surname. затем объявляется переменная worker через переменную worker мы можем получить доступ к элементам структуры. Доступ к элементам структуры осуществляется через точку.
Так вот вопрос, для чего такие сложности и каким образом структуры могут использоваться при программировании микроконтроллеров
для чего такие сложности и каким образом структуры могут использоваться при программировании микроконтроллеров
как вы себе представляете обработку 25-и аналогичных структур? когда всего 3 переменных, можно обойтись и без структуры, а когда групп по 3 переменных 25 или более? структуры всегда используются для создания логически увязанных единиц информации, чтобы унифицировать обработку этой информации. например, я применял структуры, когда делал индикацию методом чарлиплекса - слыхали о таком? это, грубо говоря, когда для зажигания светодиода используется не только два состояния (0 и 1), но и третье состояние пина микроконтроллера, так называемое Z-состояние. так вот, пока вы управляете светодиодом через единственный порт PORTx, все просто и без структур. Но когда состояние светодиода определяется состоянием уже двух портов PORTx и DDRx, получается уже не так красиво...
я создал структуру, в которой каждому светодиоду сопоставил поле "адрес порта PORT", "адрес порта DDR" и "битовая маска светодиода", после чего работать стало гораздо проще... особенно для светодиодов, подключаемых к разным портам. у меня вышло все унифицировать именно благодаря структурам, описывающим каждый светодиод.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Структуры помогают упорядочить код. Например, часы с будильником - вводим структуру, храняющую время в своих элементах, аналогично - для будильников. Потом и сравнивать много легче, и код читабельнее. А без этого получается вот такое .
доброго всем здравия. мне кажется я что то понял из ваших подсказок. Попробую описать простыми словами. Например возьмем какой нибудь объект пусть это будет автомобиль. у каждого авто есть много характеристик, для простоты возьмем несколько длинна, ширина, мощность, вес. объединяем их в структуру автомобиль
struct автомобиль { int длинна; int ширина; float мощность; nt вес; };
но марки автомобилей разные и характеристики у них разные
возьмем к примеру несколько марок
ваз тойота ниссан
и объявим переменные struct автомобиль ваз struct автомобиль тойота struct автомобиль ниссан
и затем инициализируем их
ваз.длинна = хх ваз.ширина = хх ваз.мощность = хх ваз.вес = хх
тойота.длинна = хх тойота.ширина = хх тойота.мощность = хх тойота.вес =
ниссан.длинна = хх ниссан.ширина = хх ниссан.мощность = хх ниссан.вес = хх
то есть под именем структуры объединяются названия характеристик, параметров и т.д. присущие какой либо группе объектов. под объявленными переменными с типом имени структуры, подразумеваются конкретные объекты группы
и вполне логична запись через точку имя конкретного объекта и его конкретная характеристика с последующим присвоением значения или другими операциями
прошу извинить, что много расписал, но я так понял структуры в си если я не прав попрошу поправить всем спасибо
sibiryak69, чем фамилия-имя из предидущего примера не понравилось?
Примерно ты правильно понял. Это способ объединить логически связанные данные. Но доступ <имя переменной>.<поле структуры> - не единственная возможность. Еще есть указатель (в том числе и на структуру). Еще есть массивы (в том числе и структур).
А так, да: ты ввел новую абстракцию (новый тип) (struct автомобиль). Далее можешь данный тип использовать:
Всем привет! Не совсем нашёл тему куда этот вопрос можно задать, так что напишу пока здесь. Если не туда запостил - перенесу, извините. В общем, решил поэкспериментировать с АВР, сварганил небольшой проект на Атмега 168, но даже светодиод не моргает, хотя контроллер шьётся. Я уже отчаялся искать где у меня косяк, несколько вечеров бьюсь. Вводные: Atmega168 USBasp AVRDude_PROG3.3 ( khazama тоже пробовал) AtmelStudio
Схема
Код:
Код:
#include <avr/io.h> #include <util/delay.h>
int main(void) { DDRD = 0b10010000; PORTD = 0b10010000;
хекс-файл беру из папки Release проекта после билда.
Суть проблемы в том, что контроллер шьётся, верификацию памяти проходит, но не подает никаких признаков жизни. Причем прошивается он 100%, т.к. я пробовал шить на одном компе и верификацию проводить на другом - если прошивки одинаковые, то верификация проходит нормально, если разные, то не верифицируется. (также и при прошивке AVRDUDE и верификацией Khazam'ом) Если изменить фьюзы в хазаме, то потом эти изменения можно увидеть в AVRdude. Настройка фьюзов:
Пытаюсь запустить хотя бы просто на внутреннем генераторе. EESAVE нажат просто для теста.записи\считывания фьюзов.
В протеусе код работает >< Уже впаял другой контроллер ( думал, мб порт выгорел), но результат такой же. Блин, мужики, ЧЯДНТ?!
так вот, пока вы управляете светодиодом через единственный порт PORTx, все просто и без структур. Но когда состояние светодиода определяется состоянием уже двух портов PORTx и DDRx, получается уже не так красиво...
я создал структуру, в которой каждому светодиоду сопоставил поле "адрес порта PORT", "адрес порта DDR" и "битовая маска светодиода", после чего работать стало гораздо проще... особенно для светодиодов, подключаемых к разным портам. у меня вышло все унифицировать именно благодаря структурам, описывающим каждый светодиод.
Уважаемый AVR, я так полагаю вы имели в виду регистры PORT и DDR ???
Добавлено after 8 minutes 6 seconds: не плохо о структурах рассказано здесь http://www.youngcoder.net/2015/01/structury1.html?m=1 понравилось выражение "структурная переменная", а сама структура как бы шаблон для структурной переменной
я так полагаю вы имели в виду регистры PORT и DDR ???
я вполне четко написал, что я имел ввиду. в поле структуры нельзя хранить "порт", но можно хранить "указатель на этот порт", т.е., как я и написал, адрес порта.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Добрый день, не поможете мне разобраться в регистрах. Пытаюсь сделать импульсы на atmel328. Нужно два канала, на которых будут импульсы длительностью 10 мкс и паузой между ними 30 мкс. Импульсы одинаковые, только на втором канале есть задержка от первого канала. На 5-10 мкс по заднему фронту от первого канала.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения