Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8437
Apparatchik(Пользователь)
Специалист
Постов: 123
В ответ на: Си для МК и не только, вопросы и ответы 20.06.2014 14:17
Репутация: 0  
Да, спасибо большое, так все понятно.
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8440
Apparatchik(Пользователь)
Специалист
Постов: 123
В ответ на: Си для МК и не только, вопросы и ответы 07.07.2014 20:41
Репутация: 0  
Скажите пожалуйста, если контроллер 32 битный например STM32 то при определении 8 битной переменной на самом деле ей выделяется только 8 бит в памяти или 32 но доступ только к восьми?
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8441
ARV(Администратор)
Администратор
Постов: 2386
В ответ на: Си для МК и не только, вопросы и ответы 08.07.2014 10:33
Репутация: 176  
на сколько я понимаю, это может быть оставлено на усмотрение компилятора. думаю, что выелится все-таки 1 байт, но варианты могут быть. во всяком случае в структурах однозначно может происходить "выравнивание" до оптимальной разрядной сетки... это касается типов char и short int. если я правильно понимаю стандарт С99, то тип uint8_t обязан быть именно 8-битным на любой платформе. есть еще fast_uint8_t, "быстрый" байт - вот он может быть компилятором "впихнут" в регистровую переменную для обеспечения максимальной быстроты обработки, а регистр может быть и 32-битным...
как-то непросто все
Не стыдно не знать, стыдно не учиться
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8442
Apparatchik(Пользователь)
Специалист
Постов: 123
В ответ на: Си для МК и не только, вопросы и ответы 10.07.2014 18:41
Репутация: 0  
В STM32 один вектор прерывания может использоватся для разных событий и в обработчике нужно проверять флаг события чтоб вычислить от какого сработало прерывание. Так вот если например одно событие мне нужно в одном модуле (отдельный файл), а другое - в другом модуле как поступить в таком случае?
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8443
ARV(Администратор)
Администратор
Постов: 2386
В ответ на: Си для МК и не только, вопросы и ответы 11.07.2014 08:06
Репутация: 176  
т.к. нынешняя политика ARM-остроения кратко описывается "у нас всего много, на всех хватит", вы можете поступать так же, как поступают программисты на PC: из обработчика прерываний обращаться к функциям, определенным вразных модулях. ОЗУ у вас немеряно, быстродействие как у ракеты - чего мелочиться? проблема не актуальна, имхо.
Не стыдно не знать, стыдно не учиться
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8444
Apparatchik(Пользователь)
Специалист
Постов: 123
В ответ на: Си для МК и не только, вопросы и ответы 22.07.2014 16:43
Репутация: 0  
Скажите пожалуйста, если у оператора if несколько условий через логическое И и первое условие оказалось ложным, будут ли проверятся остальные условия? ведь общее уже всеравно будет ложью. Тоесть для быстродействия можно ли писать все в одном операторе или надо делать вложеные операторы?
Содержимое поста отредактировано: Apparatchik, в: 22.07.2014 16:43
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8445
ARV(Администратор)
Администратор
Постов: 2386
В ответ на: Си для МК и не только, вопросы и ответы 23.07.2014 11:47
Репутация: 176  
это зависит от того, как настроен оптимизатор. если оптимизация включена - наверняка "лишние" вычисления делаться не будут. при -Os однозначно не делаются, для других уровней не помню. это касается не только И, но и ИЛИ в том числе.
Содержимое поста отредактировано: ARV, в: 23.07.2014 11:47
Не стыдно не знать, стыдно не учиться
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8446
Apparatchik(Пользователь)
Специалист
Постов: 123
В ответ на: Си для МК и не только, вопросы и ответы 23.07.2014 15:55
Репутация: 0  
Значит имеет смысл в одном операторе писать условия по "приоритетам" дабы увеличить быстродействие.
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8447
Apparatchik(Пользователь)
Специалист
Постов: 123
В ответ на: Си для МК и не только, вопросы и ответы 23.07.2014 19:00
Репутация: 0  
ARV писал(а): другой способ: создать структуру примерно такого формата (псевдоязык): структура{ код_команды_с_пульта; адрес_функции_обработки_команды; } потом создаем массив из этих структур, в котором перечисляем все коды и соответствующие обработчики. ... в цикле перебираем этот массив и ищем в нем код, как нашли - тут же вызываем обработчик кода). таким образом многоэтажный switch исчезает.
ну и далее в том же ключе...
Понравился Ваш совет и вот наконец руки дошли, начал пробовать на практике. При объявлении массива структур я не указываю его размерность так, как дописываю новые пункты меню в его инициализацию. Как можно програмно определить сколько элементов массива у меня есть? Подозреваю, что как то связано с sizeof, но как правильно написать не знаю.
P.S. еще хотел спросить как лучше поступать: передавать в другой модуль указатели на переменные и массивы, которые нужно менять, или использовать extern, если эти переменные и массивы глобальные в основном модуле.
Содержимое поста отредактировано: Apparatchik, в: 23.07.2014 20:04
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.