Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

cortex-m0/armv6m асемблерски библиотечки
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=13291
Страница 1 от 3

Автор:  miro_atc [ Съб Окт 25, 2014 9:53 pm ]
Заглавие:  cortex-m0/armv6m асемблерски библиотечки

като гледам в newlib-a няма никой за куртекс-М0 (не че съм изненадан) та ще се наложи да си го портвам, ама преди да съм запретнал ръкави викам да попитам ако случайно някой е попадал на читави имплементации за куртекс-0 на udiv(), udiv10() и там разните вариации за деление, модул и т.н. включая и long long...

Автор:  scout_3pm [ Съб Окт 25, 2014 10:31 pm ]
Заглавие:  Re: cortex-m0/armv6m асемблерски библиотечки

arm_cortexM0l_math.lib (Little endian on Cortex-M0 / CortexM0+)
arm_cortexM0b_math.lib (Big endian on Cortex-M0 / CortexM0+)

Една от тези двете няма ли да свърши работа :? Оптимизирани мат. библиотеки от ARM - http://www.keil.com/pack/doc/CMSIS/DSP/html/index.html .

Автор:  palavrov [ Нед Окт 26, 2014 1:29 am ]
Заглавие:  Re: cortex-m0/armv6m асемблерски библиотечки

виж в eCos ... трябва да ги има, но не знам доколко са изпипани

едит: май имат поддръжка само за M3, за М0 не виждам ...

Автор:  Цецо [ Нед Окт 26, 2014 11:46 am ]
Заглавие:  Re: cortex-m0/armv6m асемблерски библиотечки

Знам, че много ги обичаш, ама CMSIS гледа ли? Мисля, че имаха оптимизирани математики за всички куртекси...

Опс, сега проверих, то там било тежка артилерия, матрици, комплексни числа и т.н. Простички няма.

Автор:  miro_atc [ Нед Окт 26, 2014 2:01 pm ]
Заглавие:  Re: cortex-m0/armv6m асемблерски библиотечки

С изключение на делението на 10 това са функции от стандартната библиотека... CMSIS по принцип е "над" тези неща.
Нормално би трябвало АРМ да ги напишат и вероятно са ги написали в Кейл, а другите да се спасяват кой как може...

Всъщност не знам за М0 дали изобщо може да се оптимизират тия функции, ако не то няма смисъл да се пишат, може и заради това да не си ги написали.... Макар че за М3-4 и А-сериите със сигурност има смисъл, ама още не всичко е оправено. Както и да е, аз може би 64-бит аритметиката ще я разкарам, евентуално само деление на 10 ще се опитам да оптимизирам...

Автор:  vesko_hard [ Нед Окт 26, 2014 3:04 pm ]
Заглавие:  Re: cortex-m0/armv6m асемблерски библиотечки

Имам спомени че наскоро от някъде ми попадна ADS , ама даже не се сещам къде съм го забутал. Но не знам там дали ги има на асм или са на либове направо. В понеделник ще проверя.

Автор:  miro_atc [ Вто Окт 28, 2014 4:50 pm ]
Заглавие:  Re: cortex-m0/armv6m асемблерски библиотечки

те такова търсех...

Автор:  miro_atc [ Вто Окт 28, 2014 6:43 pm ]
Заглавие:  Re: cortex-m0/armv6m асемблерски библиотечки

хе-хе

CMSIS имат много интересна имплементация на CLZ:

Код:
  static __INLINE uint32_t __CLZ(
  q31_t data)
  {
    uint32_t count = 0;
    uint32_t mask = 0x80000000;

    while((data & mask) == 0)
    {
      count += 1u;
      mask = mask >> 1u;
    }

    return (count);

  }


не дай си боже data да е равно на 0 :-)

Автор:  stefan63 [ Вто Окт 28, 2014 7:00 pm ]
Заглавие:  Re: cortex-m0/armv6m асемблерски библиотечки

само тази функция ли е бъгава? :-)

Автор:  palavrov [ Вто Окт 28, 2014 9:00 pm ]
Заглавие:  Re: cortex-m0/armv6m асемблерски библиотечки

Бъгливци ... те това е истинския алгоритъм:

for(count=0;data;count++) data &= data-1;

Автор:  miro_atc [ Вто Окт 28, 2014 11:13 pm ]
Заглавие:  Re: cortex-m0/armv6m асемблерски библиотечки

palavrov написа:
Бъгливци ... те това е истинския алгоритъм:

for(count=0;data;count++) data &= data-1;

почти си го нацелил, само дето цикълът е малко по-различен и сметките също :-)

Автор:  palavrov [ Сря Окт 29, 2014 3:14 am ]
Заглавие:  Re: cortex-m0/armv6m асемблерски библиотечки

miro_atc написа:
palavrov написа:
Бъгливци ... те това е истинския алгоритъм:

for(count=0;data;count++) data &= data-1;

почти си го нацелил, само дето цикълът е малко по-различен и сметките също :-)

Оффф ... CLZ = count leading zeros ... това дето съм го написал е за броене на вдигнатите битове ... това за водещите нули даже е по лесно :)

Автор:  miro_atc [ Сря Окт 29, 2014 10:07 am ]
Заглавие:  Re: cortex-m0/armv6m асемблерски библиотечки

лесно-лесно, ама тва лесно онова лесно, а пък докато подредя всичките "леснотии" лесно си губя времето ;-)

Автор:  palavrov [ Сря Окт 29, 2014 11:32 am ]
Заглавие:  Re: cortex-m0/armv6m асемблерски библиотечки

Хрумна ми как може да се направи това броене супер елегантно с двоично търсене - довечера ще го разпиша на C и ще го постна ... т.е. за 64 бита с 6 итерации намираш колко са водещите нули ;)

Автор:  ps66 [ Сря Окт 29, 2014 12:05 pm ]
Заглавие:  Re: cortex-m0/armv6m асемблерски библиотечки

miro_atc написа:
хе-хе

CMSIS имат много интересна имплементация на CLZ:

Код:
  static __INLINE uint32_t __CLZ(
  q31_t data)
  {
    uint32_t count = 0;
    uint32_t mask = 0x80000000;

    while((data & mask) == 0)
    {
      count += 1u;
      mask = mask >> 1u;
    }

    return (count);

  }


не дай си боже data да е равно на 0 :-)


сигурен ли си, че някъде няма декларирано нещо като:
#define CLZ(data) (data ? __CLZ(data) : 0)

иначе всеки фрагмент от код може да бъде "смешен"


palavrov написа:
Хрумна ми как може да се направи това броене супер елегантно с двоично търсене - довечера ще го разпиша на C и ще го постна ... т.е. за 64 бита с 6 итерации намираш колко са водещите нули ;)

твоя "алгоритъм" е елементарен, но едва ли някой би го оценил!
трудността му е log2(64), но трябва да ползваш 32bit, 16bit, 8bit, 4bit, 2bit, 1bit операции ... и като нищо ефективността му ще отиде по дяволите

Страница 1 от 3 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/