Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос С
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Страницы: 1, 2, 3
defunct
Давайте может функцию настройки PLL по-оптимизируем?
ViKo
Цитата(defunct @ Jul 3 2010, 04:02) *
Давайте может функцию настройки PLL по-оптимизируем?

Я пользуюсь библиотечной. Надеюсь, ее писали мастера. Да и используется функция однократно.
Принципы, как нужно писать, здесь уже оговорены.
_Bill
Цитата(ViKo @ Jul 2 2010, 21:43) *
Думаю, хуже не станет, если я доложу, что уменьшил количество тактов для преобразования -2147483647 в строку до 195. Жаль, что не байтов.

Я думаю, вашу функцию можно еще чуть чуть уменьшить.
Код
void  itoad(int32_t number, uint8_t *string)
{
  *(uint32_t *)(string) = 0x20202020;
  *(uint32_t *)(string + 4) = 0x20202020;
  *(uint32_t *)(string + 8) = 0x00302020;
  if (!number) return;
  if (number < 0) {
    number = -number;
    *string = '-';
  }
  else
        *string = '+';
  string += 11;
  do {
    *--string = number % 10 + '0';
  } while (number /= 10);
}
Или нет?
Wano
Хорошо если по правому боку ровнять:

string += 10; или =11 или =бесконечность

А если нет, что с пр́обелами? Двигать надо будет. Лучше бы сразу на миллиард, потом на сотню лимонов...

А
*(uint32_t *)(string) = 0x20202020;
работает в любом случае? Всегда начало char массива 4-aligned (если умышленно не двигать указатель)?
sonycman
Цитата(Wano @ Jul 11 2010, 03:48) *
А
*(uint32_t *)(string) = 0x20202020;
работает в любом случае? Всегда начало char массива 4-aligned (если умышленно не двигать указатель)?

Написано под Кортекс, ему по барабану выравнивание, разве что незначительно вырастет время выполнения инструкции.

Правда, это относится только к инструкциям, работающим с единичными словами - LDR, LDRH, STR, STRH.
Мультивордовые LDRD/STRD/LDM/STM и т.д. в случае невыравненного на границу 4 байт доступа всё равно приведут к исключению.
ViKo
Цитата(Wano @ Jul 11 2010, 02:48) *
А
*(uint32_t *)(string) = 0x20202020;
работает в любом случае? Всегда начало char массива 4-aligned (если умышленно не двигать указатель)?

На этот вопрос я ответил
http://electronix.ru/forum/index.php?showt...st&p=779719

Цитата(Wano @ Jul 11 2010, 02:48) *
Хорошо если по правому боку ровнять

Вы имели в виду "по левому"? Знак будет рисоваться в самой левой позиции. Я такого не хотел.
fox1
Цитата(MrYuran @ Jun 30 2010, 15:31) *
Вот никак не могу понять, почему никто до сих пор не придумал оператор, который возвращает сразу и частное, и остаток.
Ведь они оба образуются при операции деления.
Зачем 2 раза проводить одну и ту же операцию, чтобы взять по очереди две половинки результата?
laughing.gif
Тяжёлое наследие бейсика...



Есть такое:

Производит деление двух целых и возвращает частное и остаток.
#include <stdlib.h>
div_t div(int numer, int denom);

http://netcode.ru/cpp/?lang=&katID=10&...&artID=4099
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.