Осваивая работу своего логического анализатора, подключенного в данном случае к I2c для синтезатора с ATtiny13A и Si5351A, достиг интересного момента.
В процессе оптимизации кода ATtiny13A ->...
Тип: Сообщения; Пользователь: veso74
Осваивая работу своего логического анализатора, подключенного в данном случае к I2c для синтезатора с ATtiny13A и Si5351A, достиг интересного момента.
В процессе оптимизации кода ATtiny13A ->...
Частота зарядки I2c Auto Address Increment быстрее на ~2 раза (на той же частоте шини) (regs: 26..33, 42..49).
Ниже: включил лог. анализатор специально для Вас:
PIC12F1572, HW I2c, 100 kHz...
Посм. I2c Auto Address Increment
Растет обем flash, но згружает частоту Si быстрее (без start, address ... stop на всех байтах, a только один раз для массива с данными, расположенными по...
Да. Для конкретного случая получилось: странно. А находил и другие такие действия в математических выражениях. Думаю, для ATtiny13A сильно переработали, с большим количеством допусков из-за...
Поэтому: пишем код, чтобы работало :). А если нужно что-то конкретное (как в этом случае: маленький объём, или высокая скорость, отсутствие конфликтов и т.п.), то начинается оптимизация, поиск...
PIC: никакой разницы (худший вариант - больше объема). Arduino: выровнени: 1414 байт :).
void si5351_set_freq(uint32_t f) {
uint32_t fvco = (FVCO_MAX / f) & 0xFFFFFFFE; // fvco = 600 ... 900 MHz
fvco *= f;
uint8_t a = fvco / FXTAL; // a = 15 ... 90
uint32_t b = fvco %...
Eще зависит и от компиляторов.
И в данном случае на C (PIC), другой на C++ ... их сложно сравнивать.
---
Попробовал и
uint32_t b = fvco % FXTAL; // b = 0 ... 1048575
uint32_t b = fvco...
Можно еще так: "старт", "запись addr", "запись data", "запись data", "запись data", "запись data", "запись data", "запись data", "запись data", "запись data", "стоп": (Auto Address Increment)....
Ну снизим требования к синтезаторам Si5351A и ATtin13A ;-): напр. для одного КВ диапазона (или для FM радио: 88..108 MHz?) , плюс больше всего иметь напр. одной кнопкой /шаг/. Это похоже на "мозговой...
В PIC, с используемым компилятором в рабочем коде для Si5351:
num = fvco - XTAL_FREQ * mult;
"выиграл" с 4 words в flash.
В Arduino, Arduino+MiniCore для ATtiny13A нет разницы.
Сравнить их в равных условиях. А тот расчет (qrp-labs) попробивал какое-то время назад, как он появился и портировать под другие МК. В основном не пользуюсь.
Оптимизации могут быть бесконечными, а...
Да, извлек прогр. код с помощью OCR ... :roll:
PIC:
ROM used: 245 words, RAM used: 16
ATTiny13A Microcore (без буутлоудера):
192 байт / 10 байт, no opt: 620 байт / 21 байт
Arduino UNO (с...
PIC mcu: 205 байт
есть warnings:
>>> Warning 204 "main.c" Line 20(1,1): Condition always FALSE (fr >= XTAL_FREQ;)
>>> Warning 207 "main.c" Line 21(1,1): Code has no effect (b != 1;)
Arduino...
Внутри есть и bootloader. Есть и Serial - печать данных в UART. Также посмотрите и сколько strings есть.
Многое можем догадываться, что находится внутри компиляторах и под ним. Важно то, что уже сделано хорошо. А методы расчета по булевой математике напр. 20-30 и более летней давности можно легко...
Oleg 9, попробовал метод. Те же цифры получаются как при использовании метода расчета WRP-Labs, так и при использовании метода, которым поделились.
А ... "медленный" метод с математическим...
shift 3 byte
// address_pointer = phase_accumulator >> 24;
// address_pointer = ((uint8_t*)&phase_accumulator)[3];
// address_pointer = make8(phase_accumulator, 3);
Как вариант оптимизации для...
А и уровень уже такой: меняешь IDE и МК и "фокусы" кода уже не имеют смысла. Новые IDE/compilers одновременно "мощные" и содержати идеальные оптимизаторы, которые выполняют тысячи минимизаций, при...
На первый взгляд подумал, что в данном случае речь идет о точных кратных/частотах (25000000).
Спасибо, попробую в будущем. Не знаком со скрытыми хитростями и трюки assembler-a :).