Главная  
19.04.2024 г.
Главная
Проекты
Статьи
Начинающим
Архив новостей
Ссылки
Контакты
Поиск
Файлы
Форум
Карта сайта
Авторизация





Забыли пароль?
Ещё не зарегистрированы? Регистрация
Поддержи наш сайт!
Через WebMoney

 R785211844650
 Z210696637574
 E368177590409

Форум ARV Research
Добро пожаловать, Гость
Пожалуйста Вход или Регистрация.
Забыли пароль?
В ответ на: Си для МК и не только, вопросы и ответы (1 просматривает)
_GEN_GOTOBOTTOM Ответить

TOPIC: В ответ на: Си для МК и не только, вопросы и ответы

#8436
ARV (Администратор)
Администратор
Постов: 2386
graph
В ответ на: Си для МК и не только, вопросы и ответы 19.06.2014 18:08 Репутация: 176  
для AVR float и double полностью одно и то же. тем не менее вы всегда можете пользоваться таким кодом:
Code:

 PROGMEM нужный_вам_тип source 123; нужный_вам_тип result; uint8_t *ptr = (void*)result; uint8_t *src = (void*)source; for(uint8_t i=0i<sizeof(нужный_вам_тип); i++){    *ptr++ = pgm_read_byte(src++); }


надеюсь, про нужный_вам_тип все понятно?
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8437
Apparatchik (Пользователь)
Специалист
Постов: 123
graphgraph
В ответ на: Си для МК и не только, вопросы и ответы 20.06.2014 14:17 Репутация: 0  
Да, спасибо большое, так все понятно.
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8440
Apparatchik (Пользователь)
Специалист
Постов: 123
graphgraph
В ответ на: Си для МК и не только, вопросы и ответы 07.07.2014 20:41 Репутация: 0  
Скажите пожалуйста, если контроллер 32 битный например STM32 то при определении 8 битной переменной на самом деле ей выделяется только 8 бит в памяти или 32 но доступ только к восьми?
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8441
ARV (Администратор)
Администратор
Постов: 2386
graph
В ответ на: Си для МК и не только, вопросы и ответы 08.07.2014 10:33 Репутация: 176  
на сколько я понимаю, это может быть оставлено на усмотрение компилятора. думаю, что выелится все-таки 1 байт, но варианты могут быть. во всяком случае в структурах однозначно может происходить "выравнивание" до оптимальной разрядной сетки...
это касается типов char и short int. если я правильно понимаю стандарт С99, то тип uint8_t обязан быть именно 8-битным на любой платформе. есть еще fast_uint8_t, "быстрый" байт - вот он может быть компилятором "впихнут" в регистровую переменную для обеспечения максимальной быстроты обработки, а регистр может быть и 32-битным...

как-то непросто все
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8442
Apparatchik (Пользователь)
Специалист
Постов: 123
graphgraph
В ответ на: Си для МК и не только, вопросы и ответы 10.07.2014 18:41 Репутация: 0  
В STM32 один вектор прерывания может использоватся для разных событий и в обработчике нужно проверять флаг события чтоб вычислить от какого сработало прерывание. Так вот если например одно событие мне нужно в одном модуле (отдельный файл), а другое - в другом модуле как поступить в таком случае?
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8443
ARV (Администратор)
Администратор
Постов: 2386
graph
В ответ на: Си для МК и не только, вопросы и ответы 11.07.2014 08:06 Репутация: 176  
т.к. нынешняя политика ARM-остроения кратко описывается "у нас всего много, на всех хватит", вы можете поступать так же, как поступают программисты на PC: из обработчика прерываний обращаться к функциям, определенным вразных модулях. ОЗУ у вас немеряно, быстродействие как у ракеты - чего мелочиться? проблема не актуальна, имхо.
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8444
Apparatchik (Пользователь)
Специалист
Постов: 123
graphgraph
В ответ на: Си для МК и не только, вопросы и ответы 22.07.2014 16:43 Репутация: 0  
Скажите пожалуйста, если у оператора if несколько условий через логическое И и первое условие оказалось ложным, будут ли проверятся остальные условия? ведь общее уже всеравно будет ложью. Тоесть для быстродействия можно ли писать все в одном операторе или надо делать вложеные операторы?

Содержимое поста отредактировано: Apparatchik, в: 22.07.2014 16:43
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8445
ARV (Администратор)
Администратор
Постов: 2386
graph
В ответ на: Си для МК и не только, вопросы и ответы 23.07.2014 11:47 Репутация: 176  
это зависит от того, как настроен оптимизатор. если оптимизация включена - наверняка "лишние" вычисления делаться не будут. при -Os однозначно не делаются, для других уровней не помню. это касается не только И, но и ИЛИ в том числе.

Содержимое поста отредактировано: ARV, в: 23.07.2014 11:47
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8446
Apparatchik (Пользователь)
Специалист
Постов: 123
graphgraph
В ответ на: Си для МК и не только, вопросы и ответы 23.07.2014 15:55 Репутация: 0  
Значит имеет смысл в одном операторе писать условия по "приоритетам" дабы увеличить быстродействие.
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8447
Apparatchik (Пользователь)
Специалист
Постов: 123
graphgraph
В ответ на: Си для МК и не только, вопросы и ответы 23.07.2014 19:00 Репутация: 0  
ARV писал(а):

другой способ: создать структуру примерно такого формата (псевдоязык):
структура{
код_команды_с_пульта;
адрес_функции_обработки_команды;
}
потом создаем массив из этих структур, в котором перечисляем все коды и соответствующие обработчики. ... в цикле перебираем этот массив и ищем в нем код, как нашли - тут же вызываем обработчик кода). таким образом многоэтажный switch исчезает.

ну и далее в том же ключе...

Понравился Ваш совет и вот наконец руки дошли, начал пробовать на практике. При объявлении массива структур я не указываю его размерность так, как дописываю новые пункты меню в его инициализацию. Как можно програмно определить сколько элементов массива у меня есть? Подозреваю, что как то связано с sizeof, но как правильно написать не знаю.

P.S. еще хотел спросить как лучше поступать: передавать в другой модуль указатели на переменные и массивы, которые нужно менять, или использовать extern, если эти переменные и массивы глобальные в основном модуле.

Содержимое поста отредактировано: Apparatchik, в: 23.07.2014 20:04
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
_GEN_GOTOTOP Ответить
© Copyright 2007 Best of Joomla, Работает на FireBoardполучить последние сообщения прямо на Ваш рабочий стол