Перейти к содержанию
    

Xenia

Модератор FTP
  • Постов

    4 850
  • Зарегистрирован

  • Победитель дней

    3

Весь контент Xenia


  1. ADIF - это номер бита, а не регистр. Проверять надо регистр ADCSRA на наличие этого флага. Вот так: while (!(ADCSRA & (1<<ADIF))) {} Здесь, сдвигом единички влево, из номера бита получается маска. Потом с помощью операции "&", бит ADIF вырезается из значения регистра статуса ADCSRA. Результат сравнения инвертируем операцией "!". P.S. На ICCV7 я не работаю, поэтому для уточнения рекомендации смотрите сами, как определен ADIF в хидере: номер бита он или маска. На моем любимом IAR'е :) это выглядит много изящней и нагляднее: while( !ADCSRA_ADIF) {} Рекомендую.
  2. А не факт, что IAR того же не умеет. Многое зависит от установок оптимизации, тогда как топикстартер молчит об этих установках, как рыб :).
  3. Это не поможет. Компилятор не обязан вычислять значения функций. Например, даже если вы запишите sin(0.5), то не ожидайте, что компилятор станет вычислять синус в момент компиляции. Функция, она функция и есть. Вычисления над константами в момент компиляции касаются лишь элементарных операций, как-то - арифметических и логических операций, но отнюдь не вычислений функций в выражениях. А если вам нужно, чтобы тело функции вычислялось в момент компиляции, тогда используйте не функцию, а дефайн. Например так: #define func(x) 2*(x)*(x)+4*(x)-6 тогда это действительно будет всегда прямая подстановка, и если x окажется константой, то компилятор вычислит всё выражение func во время компиляции.
  4. IAR чудит

    Тут что-то определенное априорно сказать сложно. Известно, что в процессе исталляции приличных размеров dll-библиотека IsCprot.dll составляет "образ компьютера", формируя его уникальный идентификатор. Он-то и служит тем удостоверием личности, по которому определяется принадлежность лицензии. После инсталляции этой библиотеки уже нет, но видимо какие-то ее функции унаследует Менежер лицензий. Я сказала "идентификатор компьютера", но это не совсем точно, т.к. этот идетификатор изменяется, если войти в другую операционную систему на том же компьютере. Например, у меня их на одном и том же компе три штуки, причем две из них Win XP SP3 близняшки, проинсталлированные с одного и того же диска и с той же самой лицензией (некие опасные трюки я проверяю на на той версии, которую меньше жалко, а также из нее лечу от вирусов другую систему). Так вот из близняшки индентификатор уже другой. Другим становится идентификатор и тогда, если перейти в другой профиль на той же самой операционной системе. Как обстоит со сменой диска, процессора или материнской платы - не проверяла, но очень возможно, что и это имеет значение. Но скорее всего IAR сам не исследует железо, а использует для привязки характерные атрибуты Windows, которые уникальны для каждой инсталляции. И если после изменения в железе старая Винда согласилась на нем работать без переинсталляции, то, по-видимому, согласится и IAR.
  5. IAR чудит

    Так или иначе, но большинство программых пакетов инсталирует все равно администратор. И если уж такое дело, то он может на время инсталляции добавить пользователя в группу адмнистаторов, а после инталляции вернуть статус-кво. Еще полезный совет - отключите на время инсталляции антивирусник, особенно если это Касперский или Доктор Веб. Несколько раз натыкалась, что из-за них IAR не активируется на двухядерных машинах, хотя сама инсталляция на вид проходит нормально, а на одноядерных почему-то не мешают.
  6. IAR чудит

    Ну раз у вас License manager единичку в графе Total кажет, то с активацией у вас все в порядке. Тогда дело может быть в том, что вы инсталлировали продукт как Administrator или какой-то пользователь с правами администратора, а компилировать сели как гость или как пользователь, который продукт не инсталлировал. С этим строго - в многопользовательских системах проинсталлированный продукт работает ТОЛЬКО У ТОГО, кто его инсталлировал, а у остальных ругается, отказываясь компилировать.
  7. IAR чудит

    Поясните пожалуйста подробнее, как вам удалось получить такое сообщение? Обычно License manager выглядит так: и таких слов там нет.
  8. Вот! Делюсь с вами вариантом, сочиненным лично. Лично, но все-таки посматривая на то, как это делали предшественники :) PUBLIC fastexp ; double fastexp( double x) fastexp PROC fld qword ptr [esp+4]; x грузим из стека fldl2e fmul fld st frndint fld1 fscale fxch st(2) fsubrp f2xm1 fmul st, st(1) fadd ret fastexp ENDP Функция написана для линковки с обычной Сишной программой, которая по общепринятому соглашению заталкивает аргумент в программый стек, а результат ожидает на вершине FPUшного стека. Не соблаговолите ли испытать? :) P.S. Это чистая экспонента, на 0.55 она аргумент не множит.
  9. А вы положите в тот же директорий, где лежит ваша программа (на другом компьютере), те DLL-ки, которые она просит, скопировав их из matlab/bin/win32 (с родного компьютера). Без родных библиотек MаtLab-приложение все равно не заработает, а вам не все ли равно, в каком виде те библиотеки будут представлены - в виде приложенных DLL или упакованных в EXE-модуль приложения?
  10. Ладно, давайте разберем ваш случай. Использую язык MatLab, где уже есть встроенная функция fft() для быстрого преобразования Фурье. Подготовим исходные данные: T1 = 3; T2 = 5; // выбираем конкретные периоды N = 16; // выбираем длину числового массива for i = 1:N // цикл по всем точкам массива M(i) = cos(6.28*i/T1) + cos(6.28*i/T2); // заполняем массив по вашей формуле end Получаем в массиве вот это: -0.1895 -1.3101 0.1899 -0.1897 0.4954 1.3126 -1.2999 -1.3193 1.3035 0.5092 -0.1944 0.1954 -1.3019 -0.2123 1.9998 -0.1665 Вычисляем частоты: F1 = N/T1 = 16/3 = 5.3333 F2 = N/T2 = 16/5 = 3.2000 Эти частоты для расчета не нужны, но понадобятся для поверки правильности ответа, т.к. именно их должен будет угадать наш алгоритм. Сам расчет: absfftM = abs( fft(M) ); // весь расчет в одной строке - сначала делаем fft(), а из него потом находим амплитуду гармоник, как абсолютную величину комплексного числа (корень квадратный из суммы его косинусной и синусной частей). Получим такой результат: 0.1778 0.4203 1.1033 7.5016 1.8213 5.6483 4.3394 2.4653 2.1837 2.4653 4.3394 5.6483 1.8213 7.5016 1.1033 0.4203 Первое число соответствует F0 (постоянной составляющей), следующие за ней - амплитудам соответствующих гармоник F1 ... F8, а дальше зеркальное отражение, которое нам неинтересно. Т.е расшифровка будет такая: 0.1778 - постоянная составляющая (в идеале должна быть равна нулю, но остались дробные "хвостики", т.к. наши периоды оказались не кратны N) 0.4203 - амплитуда частоты 1 1.1033 - амплитуда частоты 2 7.5016 - амплитуда частоты 3 (высокая, в идеале должна иметь высоту 8) 1.8213 - амплитуда частоты 4 5.6483 - амплитуда частоты 5 (высокая, в идеале должна иметь высоту 8) 4.3394 - амплитуда частоты 6 2.4653 - амплитуда частоты 7 2.1837 - амплитуда частоты 8 (это частота Найквиста, дальше нее не смотрим) Смотрим, какие частоты в нашем спектры превалируют. Таких частот две: 7.5016 - амплитуда частоты 3 5.6483 - амплитуда частоты 5 - они самые большие. Убеждаемся, что наш алгорим "угадал" частоты F2 = N/T2 = 16/5 = 3.2000 F1 = N/T1 = 16/3 = 5.3333 с той точностью, которую ему позволила дискретизиция. Если бы точек было не 16, а 128 или 256, то было бы на порядок точнее. Из-за этих дробных частей соседняя амплитуда 4.3394 - амплитуда частоты 6 оказалась тоже высока, за счет того, что частота 5 оказалась чуть ниже нормы. Это только из-за того, что наши периоды не уложилсь нацело в массив длиной 16 (число 16 не делится без остатка на 3 и 5), но если бы поделилось нацело, но этого бы не случилось. Так понятно?
  11. Установка EWAVR и EWARM

    Если хотите, чтобы у вас и то и другое работало - надо устанавливать оба продукта в ОДНУ папку! Т.е. чтобы IDE (поддиректорий common) был у них один и тот же (общий). Боюсь, что это невозможно. А впрочем, главное здесь - настройки проекта, которые, как правило, сохраняются. А настойка IDE, на мой взгляд, - ерунда, не вижу даже чего там такого настраивать, чтобы потом хранить вечно.
  12. Это будет массив синусоид и косинусоид, укладывающихся ЦЕЛОЕ число раз на длине вашего массива. Пусть для примера, ваш массив состоит из 16-и последовательных замеров (N=16), а потом вы сделали из него преобразование Фурье F[x]. Тогда в F[0] вы получите постоянную составляющую сигнала (она же средняя арифметическая). В F[1] получите амплитуду гармоники, период которой равен вашим 16-ти точкам. В F[2] - амплитуда гармоники, период которой укаладывается на этом отрезке дважды (период = 8 точек). В F[3] - трижды, и т.д. пока не дойдете до частоты N/2. Это, так называемая, частота Найквиста, выше которой не бывает :). А точнее сказать, более частые гармоники на нашем дискретном участке не представимы. Т.к. сама гармоника F[N/2] будет представлять собой чередующиеся +1 и -1, поскольку ей отпущено всего 2 точки на период. На практике FT-алгоритм даст вам не амплитуду гармоники, а амплитуды sin- и cos-составляющих по отдельности. Амплитуду же гармоники вы может вычислить из них, как гипотенузу sqrt(sin^1+cos^2). Так получится уже спектр мощности, который скорее всего вам и нужен. Если ваша частота близка к одной из базисных частот Фурье-преобразования, то та амплитуда в частотном спектре будет торчать торчком :). А если промежуточная, то будут высокими две стоящие рядом палки. Если вы будете использовать FFT (быстрое Фурье-преобразование) на числе точек, кратном степени числа 2, то там, в зависимости от применяемого алгоритма, могут случиться сложности с поиском того, где ваши частоты будут расположены в масиве после преобразования. Как правило, FFT-алгоритм строит спектр на том же месте, где раньше были данные. А бывает и так, что нужен еще один чистый массив под синусы. Тут уж надо разбираться с тем, какой алгоритм вам достался. Или испытать его на тестовых примерах, чтобы понять, что к чему. Бывает и так, что для более плотной упаковки в F[0] кладется амплитуда частоты Найквиста F[N/2], поскольку она не имеет sin-части (sin-часть у нее всегда нулевая), а постоянную составляющую кладут к ней вместо sin-части. Бывает и противоположный порядок. Тогда можно уложиться на том же масиве в 16 точек, занимая первую половину под cos-, а второю под sin-составляющую: F[0] - постоянка, F[1]...F[7] - косинусы, F[8] - частота Найквиста, F[9]...F[15] - синусы.
  13. Ознакомьтесь с более ранними темами. Возможно, что там найдете ответ на свой вопрос: "Работа с СОМ портом, Win2000" http://electronix.ru/forum/index.php?showtopic=2699 "Visual C++, не могу отправить байт через COM порт ПК" http://electronix.ru/forum/index.php?showt...p;hl=CreateFile
  14. Это лечится, и usbser.sys в том не виноват. Если это ваша собственная программа находится на связи с USB-устройством, то она должна реагировать на системное сообщение WM_DEVICECHANGE, которое генерируется системой при подключении и отключении внешних USB-устройств. Если вы успеете (а должны успеть!) закрыть тот COM-порт до того, как USB-устройство воскреснет после ресета и начнет коннектиться заново, то никакого затора не возникнет. Но, а если это дубовая программа-терминал, написанная чужим дядей, то с ней ничего не поделаешь.
  15. Видимо можно ускорить вычисление, даже не переходя на ассемблер, если отказаться от возведения x в плавающую степень 0.75, а представить число 0.75 в виде рациональной дроби 3/4. Тогда возведение в эту степень будет эквивалентно двойному квадратному корню из куба x. Т.е. X^0.75 = sqrt( sqrt ( x*x*x)) или, вынося квадрат x из под внутреннего корня, окончательно имеем: X^0.75 = sqrt( x * sqrt (x)) Такое будет вычисляться много быстрее, чем возведение в дробную степень. P.S. Когда в выражениях присутствуют сложные функции типа квадратных корней, тригонометрических функций, а особенно возведения в стпень, то потуги ускорения вычислений, путем перехода на ассемблер, оказываются безрезультатными - выигрыш в скорости получается ничтожным. Единственным исключением была моя борьба с вычислением гауссинаны exp(-(x-x0)^2/sigma^2), которую мне удалось ускорить почти вдвое, за счет переписывания кода для экспоненты (x86 не имеет встроенной инструкции для вычисления экспоненты и ее приходится вычислять через логарифмы).
  16. А вы подайте напряжение с транформатора (включая делитель) между измерительным входом АЦП и плюсом опорного напряжения. Тогда в отсутствии сигнала, на входе получится +2.5 вольта (от Vref), которые будут восприниматься в диференциальном режиме, как середина шкалы. А когда появится переменная составляющая с трансформатора, то входной сигнал будет, складываясь с 2.5 вольтами, колебаться вокруг этого значения. Т.е. даже отрицательное напряжение с трансформатора при сложении с 2.5 вольтами будет оставаться для АЦП положительным.
  17. Вместо нее ATmega128A смотрите сами здесь: http://www.argussoft.ru/webroot/delivery/f...0Oct%202010.pdf
  18. Если задача касается только битов внутри одного байта, то задача решается исключительно просто: Создайте массив на 256 элементов и заполните его вручную для всех 256 возможных случаев: char array[256] = {}; А результат будете получать, подставляя исследуемый байт в качестве индекса: result = array[byte]; Если там еще что-то надо выдавать, то создайте тогда массив структур на все 256 возможных вариантов, один раз правильно его заполнив: struct { uchar число_последовательных нулей; uchar место_первого_нуля_в_цепочке; uchar место_последнего_нуля_в_цепочке; uchar общее_число_нулей; ..... и т.д. } array[256]; Т.е. заполните в структуре всё то, что считаете нужным узнать про этот байт. В этом случае выборка структуры из массива структур по номеру байта, сразу выдаст вам всю его поднаготную без каких-либо расчетов. А вот вычислять все это в реальном времени, да еще и на vhdl, совершенно не стоит. Всё, что можно сделать ДО работы, должно быть сделано один раз в момент компиляции.
  19. На сайте компании появился анонс на STM32F205xx, STM32F207xx. http://www.st.com/internet/mcu/product/245085.jsp И даже даташит выложили! (на той же странице): http://www.st.com/internet/com/TECHNICAL_R.../CD00237391.pdf Лично меня порадовала работа на внутренней Flash до частоты 120 МГц без дополнительных тактов ожидания. А потолок у этого МК - 150 МГц. Про новый Roadmap на русском языке можно прочесть здесь: http://www.ixbt.com/news/all/index.shtml?14/07/30
  20. Уважаемая Терраэлектроника! Проявляю интерес к вашим фирменным разработкам. В частности, обрадовало своевременное появление модуля "Барракуда" (TE-STM32F107) на контролере STM32F107. В связи с чем вопрос: Каковы ваши планы дальнейших разработок? Можно ли прямо сейчас назвать что-нибудь из того, что только находится в плане разработок? Планируется ли выпустить микроконтролерный модуль на чем-то "экзотическом"? Например, на контроллерах компаний RENESAS или FREESCALE? Я отлично понимаю, что сейчас, на волне популярности архитектуры ARM, только ленивый не клепает на них устройства :), но хотелось бы все-таки большего разнообразия. А то ведь замкнутый круг получается - продукцией RENESAS не торгуют, потому как де "нет спроса", а откуда ему быть, если тех микроконтроллеров в России днем с огнем не достать? Вот ведь выбросили же на рынок кучу STM32 и STM8, и сразу же спрос на них появился. Надо учитывать отечественный менталитет, когда разработчики не заказывают музыку, ориентируются на то, что есть в продаже.
  21. У нее же всего один таймер, поэтому на разных каналах можно только скважность разную установить, но частоту на каналах разной не сделаешь. Взять контроллер, у которого 2 или больше таймеров. А что мешает использовать все разряды? В крайнем случае можно сдвинуть число вправо на 2 разряда - вот и останется 8 бит (старших).
  22. AT32uc3c

    Не вижу ссылки. doc32002.pdf - это последний, но он за март месяц и про команды FPU там не сказано. doc32010.pdf - а это какая-то апликуха.
  23. AT32uc3c

    Ну так не было же FPU в те времена, когда этот Technical Reference Manual писали. Я потому и спрашиваю вас, откуда вы собираетесь выцарапывать команды для работы с FPU. Или вам и без знания команд хорошо :), авось компилятор сам сообразит?
  24. AT32uc3c

    И как же с FPU вы намерены разбираться, если до сих пор нет внятного руководства по командам FPU? Или быть может я их в дадашите проглядела?
  25. AT32uc3c

    Это вот этот что ли? - http://store.atmel.com/PartDetail.aspx?q=p:10500191 По описанию не понравился он мне - дорогущий, а Ethernet сделать забыли, хотя UC3C его поддерживает. И RS-232 тоже побоку.
×
×
  • Создать...