реклама на сайте
подробности

 
 
> Скорость выполнения кода на atmega640
Leonmezon
сообщение Jul 24 2009, 11:12
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 191
Регистрация: 11-02-09
Из: Краснодар
Пользователь №: 44 686



Просьба помочь с функцией отправки байт по RS232 от atmega640 (сама функция полностью работает, но необходимо ускорить ее выполнения (на ассемблер перейти не могу - его не знаю).
// Функция передачи данных на ЭВМ по RS232 (масивы B1, B2 - создаю в ОЗУ, передаю по переменно взависимости от флагов. перед массив идут 5 0хF0 - заголовок.
Код
void RS232(void)
{
unsigned int i, j;
unsigned char data[4];
signed long *p;
p=(signed long*)data;
flag_BUF=0;
if (flag_B2==1)
{
  UDR0 = 0xF0;
  while ( !( UCSR0A & (1<<UDRE0)) ) { };
  UDR0 = 0xF0;
  while ( !( UCSR0A & (1<<UDRE0)) ) { };
  UDR0 = 0xF0;
  while ( !( UCSR0A & (1<<UDRE0)) ) { };
  UDR0 = 0xF0;
  while ( !( UCSR0A & (1<<UDRE0)) ) { };
  UDR0 = 0xF0;
  while ( !( UCSR0A & (1<<UDRE0)) ) { };
  // Преобразуем signed long B1 и в ЭВМ
     for(i=0; i<600; i++)
     {
        *p=B1[i];
         for (j=0; j<4; j++)
           {
              UDR0 = data[j];
              while ( !( UCSR0A & (1<<UDRE0)) ) { };
           }
     }
}
else
{
  UDR0 = 0xF0;
  while ( !( UCSR0A & (1<<UDRE0)) ) { };
  UDR0 = 0xF0;
  while ( !( UCSR0A & (1<<UDRE0)) ) { };
  UDR0 = 0xF0;
  while ( !( UCSR0A & (1<<UDRE0)) ) { };
  UDR0 = 0xF0;
  while ( !( UCSR0A & (1<<UDRE0)) ) { };
  UDR0 = 0xF0;
  while ( !( UCSR0A & (1<<UDRE0)) ) { };
// Преобразуем signed long B2 и в ЭВМ
    for(i=0; i<600; i++)
     {
        *p=B2[i];
         for (j=0; j<4; j++)
           {
              UDR0 = data[j];
              while ( !( UCSR0A & (1<<UDRE0)) ) { };
           }
     }      
}
}
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
x736C
сообщение Jul 25 2009, 16:54
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Я написал просто деление. Дальше в скобках уточнил, что процедура деления в вашем случае достаточно быстрая.
Не надо рассматривать это, как ухищрение.
Не приводите перед делением rez к типу double. У вас абсолютно целочисленное деление на (2^23 - 1).
Все в signed long.

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

Цитата(Leonmezon @ Jul 25 2009, 20:24) *
И можно что то сделать с отниманием 1 (или она мало занимает кода).

Думаю, что это не тот случай, чтоб оптимизировать вычитание единицы. Оставьте так smile.gif

Сообщение отредактировал x736C - Jul 25 2009, 16:57
Go to the top of the page
 
+Quote Post
Leonmezon
сообщение Jul 25 2009, 17:01
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 191
Регистрация: 11-02-09
Из: Краснодар
Пользователь №: 44 686



Цитата(x736C @ Jul 25 2009, 20:48) *
Я написал просто деление. Дальше в скобках уточнил, что процедура деления в вашем случае достаточно быстрая.
Не надо рассматривать это, как ухищрение.
Не переводите перед делением rez к типу double. У вас абсолютно целочисленное деление на (2^23 - 1).
Все в signed long.

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

1. По времени - попробую на работ- напишу. (Хотя тяжело точно отследить - примерно будет только).
2. В целочисленных нельзя (правда я не уверен - как на самом деле будет происходить преобразования типов: сначала результат, потом преобразование или нет): U=rez/Kd - если rez и Kd целочисленные - то результат будет 0 при rez<Kd?
3. Частота 14,... МГц - хотя сейчас думаю перевести на Xmega - с частотой 14,...х2 = 28,.. МГц (в теме Xmega писал уже)
4. В принципе и сейчас все работает (и очень хорошо),но появился датчик (с собственным шумом 300 нВ) и для работы с ним планирую сделать запас времени, чтобы сняв 200 выборок за 1 сек прогнать через простой режекторный цифровой фильтр в микроконтроллере (повысить точность измерений) - для этого и еще как бы выиграть еще время, т.е. перед отправкой буфера (2400 байт) по RS232 успеть 200-300 мс прогнать через фильтр. (Фильтр пишу не я - человек на них собаку съел - но просит запас по времени на работу фильтра)
Go to the top of the page
 
+Quote Post
x736C
сообщение Jul 25 2009, 17:28
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



1. Как оцениваете время выполнения функции? Симулятор не может посчитать?
2. Результат будет правильным. Типы менять туда-сюда не надо в вашем случае.
3. 28 — огромная частота smile.gif
4.1. Если вы поверите в прерывания, то сможете многое выполнять параллельно. Например, работать с данными и отсылать их одновременно, выполняя что-то третье.
4.2. 200-300 мс — огромное время smile.gif
4.3. 1 сек — cranky.gif

«..200 выборок за 1 сек прогнать через...»
«...успеть 200-300 мс прогнать через...»
Сколько в итоге?

Если не секрет, какого рода данные с датчика? Что-то периодичное? Почему такие точности?


P. S. Неужели ассемблер окончательно отмирает unsure.gif

Сообщение отредактировал x736C - Jul 25 2009, 17:29
Go to the top of the page
 
+Quote Post
Leonmezon
сообщение Jul 25 2009, 18:19
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 191
Регистрация: 11-02-09
Из: Краснодар
Пользователь №: 44 686



Цитата(x736C @ Jul 25 2009, 21:28) *
1. Как оцениваете время выполнения функции? Симулятор не может посчитать?
2. Результат будет правильным. Типы менять туда-сюда не надо в вашем случае.
3. 28 — огромная частота smile.gif
4.1. Если вы поверите в прерывания, то сможете многое выполнять параллельно. Например, работать с данными и отсылать их одновременно, выполняя что-то третье.
4.2. 200-300 мс — огромное время smile.gif
4.3. 1 сек — cranky.gif

«..200 выборок за 1 сек прогнать через...»
«...успеть 200-300 мс прогнать через...»
Сколько в итоге?

Если не секрет, какого рода данные с датчика? Что-то периодичное? Почему такие точности?


P. S. Неужели ассемблер окончательно отмирает unsure.gif

1. Я и на симулятор не могу дома (компилятор не компилирует код - только до 4 кБ - а у меня больше - на работе - лицензия - тогда и проверю).
2. Насчет типов - проверю.
3. 28 - это не много.
4.1. На прерывания - нельзя, ввиду того что на прерываниях сидят 3 АЦП, плюс прерывание синхронизации от GPS.
4.2. Не очень верно написал: по внешнему такту, а запускаю 3 АЦП на оцифровку данных - с частотой 200 Гц - получаю за 1 сек - 600 значений (три канала) и останавливаюсь на 10 мкс, приходит новый такт и процесс повторяться по АЦП, при этом данные принятые за предыдущею секунду передаются по RS232 (надо успеть до нового такта). Т.е. получаем трехканальную систему синхронной оцифровки которая работает с задержкой во времени на 1 сек. (Заказчика устраивает).
4.3. Датчик - сейсмодатчик, последний с динамическим диапазоном 145 дБ (но самый верх можно не мерять - но выше 9 балов по шкале Рихтера можно не мерять...)
5. На ассемблере - это тяжка написать, если только не критические функции...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Leonmezon   Скорость выполнения кода на atmega640   Jul 24 2009, 11:12
- - Непомнящий Евгений   А зачем вам ускорять скорость ее выполнения? Какая...   Jul 24 2009, 11:24
|- - Leonmezon   Цитата(Непомнящий Евгений @ Jul 24 2009, 15...   Jul 24 2009, 14:17
|- - zltigo   Цитата(Leonmezon @ Jul 24 2009, 17:17) 2....   Jul 24 2009, 14:27
- - aaarrr   Переведите работу на прерывания - все равно, на че...   Jul 24 2009, 11:38
- - Непомнящий Евгений   я что-то не пойму. Вы не успеваете отправлять со с...   Jul 24 2009, 14:30
|- - zltigo   Цитата(Непомнящий Евгений @ Jul 24 2009, 17...   Jul 24 2009, 14:37
- - Палыч   Цитата(Leonmezon @ Jul 24 2009, 14:12) .....   Jul 24 2009, 15:05
- - Leonmezon   Перерыва в передачи байтов нет (данные принимаются...   Jul 24 2009, 15:52
|- - MrYuran   Цитата(Leonmezon @ Jul 24 2009, 19:52) фи...   Jul 24 2009, 16:03
- - aaarrr   Оптимизацию советую начать отсюда: КодU=(...   Jul 24 2009, 15:59
|- - Leonmezon   Цитата(aaarrr @ Jul 24 2009, 19:59) Оптим...   Jul 24 2009, 16:12
|- - aaarrr   Цитата(Leonmezon @ Jul 24 2009, 20:12) А ...   Jul 24 2009, 16:16
|- - MrYuran   Цитата(Leonmezon @ Jul 24 2009, 20:12) А ...   Jul 24 2009, 16:24
|- - Leonmezon   Цитата(MrYuran @ Jul 24 2009, 20:24) U=((...   Jul 24 2009, 17:02
|- - aaarrr   Цитата(Leonmezon @ Jul 24 2009, 21:02) Пр...   Jul 24 2009, 17:22
|- - Leonmezon   Цитата(aaarrr @ Jul 24 2009, 21:22) Вы ог...   Jul 24 2009, 17:44
- - aaarrr   Да не нужно заниматься ерундой и делить на 1677721...   Jul 24 2009, 18:05
|- - Leonmezon   Цитата(aaarrr @ Jul 24 2009, 22:05) Да не...   Jul 24 2009, 18:14
|- - rezident   Цитата(Leonmezon @ Jul 25 2009, 00:14) Ка...   Jul 24 2009, 18:41
- - aaarrr   Деление на 16777215 и умножение на 20000000 эквива...   Jul 24 2009, 18:40
|- - Leonmezon   Цитата(aaarrr @ Jul 24 2009, 22:40) Делен...   Jul 24 2009, 18:58
|- - rezident   Цитата(Leonmezon @ Jul 25 2009, 00:58) 2....   Jul 24 2009, 19:02
|- - Leonmezon   Цитата(rezident @ Jul 24 2009, 23:02) Еру...   Jul 24 2009, 19:10
|- - rezident   Цитата(Leonmezon @ Jul 25 2009, 01:10) По...   Jul 24 2009, 19:25
|- - Leonmezon   Цитата(rezident @ Jul 24 2009, 23:25) 150...   Jul 24 2009, 19:52
- - Kuzmi4   2 Leonmezon - откройте секрет - что вы там такое...   Jul 24 2009, 21:11
- - mdmitry   На семинаре AD по АЦП специалисты компании утвержд...   Jul 24 2009, 21:44
- - x736C   Цена деления 1,2 мкВ при точности ±150 мкВ.. К...   Jul 25 2009, 03:25
- - Leonmezon   Если вот так записать код, насколько будет быстрее...   Jul 25 2009, 16:24
|- - defunct   Цитата(Leonmezon @ Jul 25 2009, 19:24) Ес...   Jul 29 2009, 00:18
|- - aaarrr   Цитата(x736C @ Jul 25 2009, 21:28) 2. Рез...   Jul 25 2009, 18:23
|- - x736C   Цитата(aaarrr @ Jul 25 2009, 22:23) Не бу...   Jul 25 2009, 18:43
|- - Leonmezon   long long - длиное целое 8 байтовое? ( Если да,...   Jul 25 2009, 18:43
- - aaarrr   Цитата(x736C @ Jul 25 2009, 22:43) То ест...   Jul 25 2009, 18:48
|- - Leonmezon   Цитата(aaarrr @ Jul 25 2009, 22:48) Можно...   Jul 25 2009, 19:11
|- - x736C   Цитата(Leonmezon @ Jul 25 2009, 23:11) По...   Jul 25 2009, 19:24
|- - Leonmezon   Цитата(x736C @ Jul 25 2009, 23:24) Понял,...   Jul 25 2009, 19:41
- - x736C   Вы сначала написали, что результат не будет коррек...   Jul 25 2009, 19:02
- - aaarrr   Цитата(x736C @ Jul 25 2009, 23:24) Такая ...   Jul 25 2009, 19:44
|- - Leonmezon   Цитата(aaarrr @ Jul 25 2009, 23:44) Дык м...   Jul 25 2009, 20:21
- - x736C   Понятно. Запутался слегка. Из Kd можно убрать лиш...   Jul 25 2009, 20:02
- - x736C   Понятно. Это как раз то, чего я не мог понять в ди...   Jul 25 2009, 20:45
|- - Leonmezon   Цитата(x736C @ Jul 26 2009, 00:45) Понятн...   Jul 27 2009, 10:45
|- - aaarrr   Цитата(Leonmezon @ Jul 27 2009, 14:45) Вр...   Jul 27 2009, 13:07
|- - Leonmezon   Цитата(aaarrr @ Jul 27 2009, 17:07) А зач...   Jul 27 2009, 16:18
|- - rezident   Цитата(Leonmezon @ Jul 27 2009, 22:18) Во...   Jul 27 2009, 17:11
||- - Leonmezon   Цитата(rezident @ Jul 27 2009, 21:11) А в...   Jul 27 2009, 17:39
||- - rezident   Цитата(Leonmezon @ Jul 27 2009, 23:39) 3....   Jul 28 2009, 16:01
||- - Leonmezon   Цитата(rezident @ Jul 28 2009, 20:01) Есл...   Jul 28 2009, 16:24
||- - aaarrr   Цитата(Leonmezon @ Jul 28 2009, 20:24) Лу...   Jul 28 2009, 16:26
||- - Leonmezon   Цитата(aaarrr @ Jul 28 2009, 20:26) Выбро...   Jul 28 2009, 16:39
|- - aaarrr   Цитата(Leonmezon @ Jul 27 2009, 20:18) вп...   Jul 27 2009, 18:01
|- - Leonmezon   Цитата(aaarrr @ Jul 27 2009, 22:01) Вам д...   Jul 27 2009, 20:12
|- - aaarrr   Цитата(Leonmezon @ Jul 28 2009, 00:12) И ...   Jul 27 2009, 20:15
|- - Leonmezon   Цитата(aaarrr @ Jul 28 2009, 00:15) По ср...   Jul 27 2009, 20:19
|- - aaarrr   Цитата(Leonmezon @ Jul 28 2009, 00:19) т....   Jul 27 2009, 20:26
|- - Leonmezon   Цитата(aaarrr @ Jul 28 2009, 00:26) По ср...   Jul 27 2009, 20:54
|- - aaarrr   Цитата(Leonmezon @ Jul 28 2009, 00:54) Не...   Jul 27 2009, 20:58
- - aaarrr   А может, взять нормальные средства (можно и беспла...   Jul 28 2009, 16:47
|- - Leonmezon   Цитата(aaarrr @ Jul 28 2009, 20:47) А мож...   Jul 28 2009, 16:57
|- - aaarrr   Цитата(Leonmezon @ Jul 28 2009, 20:57) AV...   Jul 28 2009, 17:07
|- - Leonmezon   Цитата(aaarrr @ Jul 28 2009, 21:07) Помен...   Jul 28 2009, 17:35
- - Rst7   ЦитатаНа AVR и ICC свет клином не сошелся, как это...   Jul 28 2009, 17:14
- - aaarrr   Цитата(Rst7 @ Jul 28 2009, 21:14) Кстати,...   Jul 28 2009, 23:47


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 04:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01483 секунд с 7
ELECTRONIX ©2004-2016