Разбирался на днях с отладочной платой STM8S-Discovery, да потер всю память на чипе, не запомнив дефолтные значения option bytes. Часть демок теперь не работает как надо. Пол дня прокопался, но так и не разобрался, что там изначально было. Если у кого есть данная плата, напишите пожалуйста, что у вас в ней прошито в option bytes?
PombI4, а если прошить значениями по умолчанию (factory default) из даташит?
Добавлено after 2 hours 17 minutes 36 seconds: Как то я это пропустил. 15 апреля вышел SDCC 3.9 SDCC 3.9.0 Feature List: Support for struct / union assignment. Optimizations in the stm8 backend relevant to soft float increase Whetstone score by two thirds. Improvements in rematerialization in the stm8 backend improve code generation for struct, union and arrays. New stack allocator reduces stack space usage for the stm8, z80, z180, gbz80, r2k, r3ka, tlcs90 backends. New ez80_z80 backend for eZ80 in Z80 mode. Removed deprecated sdcclib utility. New pdk14 backend for Padauk µC with 14-bit wide program memory. New in-development pdk15 backend for Padauk µC with 15-bit wide program memory.
Особенно радует ускорение теста Whetstone в два раза и рематериализация для STM8 при операциях со структурами, объединениями и массивами. Код, который SDCC генерил до этого, особенно со структурами, меня сильно раздражал. Присваивание структур и объединений вещь приятная, но мне не в лом было и memcpy() писать. Что там улучшили в аллоцировании стека я пока не понял. Развитие поддержки сверхдешевых, но однократно программируемых, Padauk радует, но это уже к STM8 отношения не имеет.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
PombI4, Они не могли быть нулевыми. Большинство option bytes у STM8 парные - прямое и инверсное значение. Например, по-умолчанию, OPT1=0х00, а следующий за ним NOPT1=0хFF Поэтому просто нулями их так просто не перепишешь. Подозреваю, что ST VD увидев несоответствие между прямыми и инверсными значениями сам прописал значения по-умолчанию.
PombI4, про прошивальщик я не в курсе, к сожалению. Прошивки не блокирую, а остальное удобней устанавливать в коде, так как это может зависеть от параметров сборки.
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Доброго времени суток. В RM016 указано, что 16 битный регистр TIM1_CNTR имеет теневой регистр для чтения и не имеет для записи. ARR имеет теневой для записи, про чтение вроде как ничего не сказано. И ничего больше я не нашел.
Теперь сам вопрос. Режим захвата, считываю захваченные данные вот так
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
VladislavS писал(а):
На странице 167.
Спасибо. Вечно сам себе трудности нахожу, чтобы их мужественно преодолевать.
VladislavS писал(а):
Всё гораздо проще, не надо мудрить. На восьмибитке сдвиг на 8 бесплатен.
Попробовал предложенных оба варианта. Компиллится в кучу команд в том числе логики и сдвига. IAR, оптимизация максимум в режиме speed. В моем варианте переменная capch загружается в 4 команды через аккумулятор.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Все равно компиллит в достаточно длинный код, при этом фу вызывает реально. Попробовал добавить в объявление функции inline, переключившись в С++ , ничего не изменилось. Оптимизатор переключил со speed на size, то же ничего.
Интересный момент, вот это
Код:
TIM2_CCR3L++;
с компиллилось в это
Код:
TIM2_CCR3L++; 0085A5 C65316 LD A, TIM2_CCR3L 0085A8 4C INC A 0085A9 C75316 LD TIM2_CCR3L, A
И это при наличии четырех байтной команды inc mem, которая выполнится за один такт.
Да, IAR для STM8 бесплатен для размера кода вроде до 8К. А если учесть, что у многих STM8 столько и есть флеши всего, то можно считать что он просто бесплатен.
Все равно компиллит в достаточно длинный код, при этом фу вызывает реально. Попробовал добавить в объявление функции inline, переключившись в С++ , ничего не изменилось. Оптимизатор переключил со speed на size, то же ничего.
Подозреваю, что Вы используете какую-то древнюю версию IAR. По-крайней мере когда я 2 года назад писал для STM8, как раз вышла версия IAR 3.10 взамен старой 2.20 и качество компилируемого кода резко улучшилось. На версии 2.20 был полный шлак.
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
jcxz писал(а):
можно считать что он просто бесплатен.
Нельзя. IAR коммерческий продукт и рассчитывая получить прибыль с продаж, надо все же было постараться сделать компиллятор по умнее. Тем более система команд STM8 заточена под Си, да и ИАРовцы умеют же, видимо не приоритет просто. А то что демо версия подошла под радиолюбительские хотелки, это частный счастливый случай .
Хрен с ним, придется сильнее напрягать межушный оптимизатор .
Добавлено after 1 minute 23 seconds:
jcxz писал(а):
Подозреваю, что сиё связано с тем, что TIM2_CCR3L у Вас объявлен как volatile.
И что? Что это меняет? Проверять пока не хочу, но стоит.
Добавлено after 21 minute 20 seconds:
jcxz писал(а):
Вы используете какую-то древнюю версию IAR.
3.10.4 У меня.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Все равно компиллит в достаточно длинный код, при этом фу вызывает реально. Попробовал добавить в объявление функции inline, переключившись в С++ , ничего не изменилось. Оптимизатор переключил со speed на size, то же ничего.
Да ладно, инлайнит только в путь даже если не просить об этом.
int main() { uint16_t capch = (TIM2_CCR3H<<8) | TIM2_CCR3L;
foo(capch);
for(;;); }
// --- Листинг ----
//int main() //{ // uint16_t capch = (TIM2_CCR3H<<8) | TIM2_CCR3L; / foo(capch); main: LD A, L:0x5315 CLRW X LD XL, A CLR A RLWA X, A LD A, L:0x5316 LD S:?b1, A RRWA X, A OR A, S:?b1 RRWA X, A RRWA X, A JREQ L:??main_0 RIM JRA L:??main_1 ??main_0: SIM // for(;;); ??main_1: JRA L:??main_1 //}
На самом деле разница по тактам не так чтобы катастрофична. В случае с локальной переменной надо же и работу со стеком учитывать. Но всё равно, тупо с двумя байтами не разобраться это надо суметь...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения