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

 
 
> Почему с PowerPac код работает быстрее, чем просто на Cи?
kolobochishe
сообщение Nov 29 2010, 14:19
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



int main(void)
{

unsigned int temp, MyAdr, MyPins, ii;
unsigned int MyArray[5];

ii = 0;
FIO4DIR3_bit.P4_0 = 1; // Вывод на выход

while(1)
{
MyArray[ii] = FIO1PIN;
FIO4PIN3_bit.P4_0= ~FIO4PIN3_bit.P4_0; //Дергаем ножкой
}

}

Почему с PowerPac скорость выше в 2 раза? Вроде просто Си программа все же ближе к ассемблеру, чем ОС плюс задача?

И сразу еще один вопрос. Частота "подергивания ножкой" с PowerPac 1,2Мгц, а просто Си - 0,5Мгц. Неужели быстрее нельзя? Что за операции такие производит контроллер, когда читает порт и записывает в ОЗУ? Это же 50 тактов минимум. И как в ИАРе вообще можно посмотреть время выполнения?

Забыл уточнить. OLIMEX-LPC2478
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kolobochishe
сообщение Nov 29 2010, 16:23
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



ок. даже если так. Хотя взял просто пример LCD Demo и заменил main. Почему такие большие задержки? Почему такой длинный цикл? Если кому не лень, проверьте у себя в PowerPac. Тот же код. Просто опрос регистра состояния порта и запись значения в массив, и с последущим "подергиванием ножки". У кого сколько времени займет. Пример простой, может кому любопытно.
Занимаюсь программированием совсем недавно. Не ожидал, что с процессором 72МГц будет проблема с опросом порта с частотой 2МГц с последующим сохранением в SDRAM (там на плате 2 микросхемы по 32МБ). Не на асме же писать в наш то век smile.gif тем более хочется многозадачности
Go to the top of the page
 
+Quote Post
scifi
сообщение Nov 30 2010, 09:27
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(kolobochishe @ Nov 29 2010, 19:23) *
Не ожидал, что с процессором 72МГц будет проблема с опросом порта с частотой 2МГц с последующим сохранением в SDRAM (там на плате 2 микросхемы по 32МБ). Не на асме же писать в наш то век smile.gif

В большинстве МК обращение к GPIO занимает несколько тактов процессора. Причём сколько именно - как правило нигде не написано. И ассемблером это не исправить.
Для более быстрого ввода-вывода используют иные периферийные устройства, а не GPIO.
Go to the top of the page
 
+Quote Post
kolobochishe
сообщение Nov 30 2010, 10:01
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



Цитата(scifi @ Nov 30 2010, 14:27) *
Для более быстрого ввода-вывода используют иные периферийные устройства, а не GPIO.


это какие, например?

Цитата(Сергей Борщ @ Nov 29 2010, 19:34) *
Рискну предположить, что PowerPack в процессе старта настраивает PLL, а ваша программа работает напрямую от кварца или внутреннего RC.



Использую функцию InitClock() определенную в sys.h. Устанавливает в 72МГц тактовую частоту ядра.
При отладке SYS_GetFsclk(); возвращает 72 000 000. Т.е. работает на 72МГц

PCLKSEL1_bit.PCLK_GPIO = 1; - частота работы порта вывода также 72МГц (делитель 1). До этого было 00 - что означало 72МГц/4

И все равно результат не дотягивает совсем до ожидаемого. Что еще можно сделать?

Добавил цикл задержки. Инкремент до 70 в цикле for. Результат оказался гораздо больше. Хотя должно быть 1-2мкс. Все же не проходит ощущение, что работает контроллер совсем не на 72МГц.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Nov 30 2010, 10:07
Сообщение #5


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(kolobochishe @ Nov 30 2010, 13:01) *
Добавил цикл задержки. Инкремент до 70 в цикле for. Результат оказался гораздо больше. Хотя должно быть 1-2мкс. Все же не проходит ощущение, что работает контроллер совсем не на 72МГц.

На самом деле есть ещё задержки чтения флеши (если программа работает не из RAM)
Плюс, каждый переход сбрасывает конвейер, что тоже сильно влияет (команды выполняются не за 1 такт).
Ну а что происходит в действительности - очень просто посмотреть в листинге, и к гадалке ходить не надо.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
kolobochishe
сообщение Nov 30 2010, 11:17
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



Цитата(MrYuran @ Nov 30 2010, 15:07) *
На самом деле есть ещё задержки чтения флеши (если программа работает не из RAM)


smile.gif Вы оказались ближе всех к истине. У ARM7 наиболее узкое место в скорости работы программы - чтение из флеш. В контроллере есть возможность включить модуль ускорения работы памяти. Это модуль управляется регистрами MAMCR и MAMTIM.

Пока не нашел какие значения использует для этих регистров PowerPac RTOS от IAR, но задав в программе нужные значения MAMCR=2; MAMTIM=3; получил ускорение работы цикла опроса и записи в массив аж до 2МГц (все равно плоховато, но лучше еще не получалось smile.gif). С операционкой было 1,2МГц. Естественно, в компиляторе тоже включил оптимизацию по скорости. Для отладки это плохо (переменные куда-то теряются и при отладке их значения нельзя посмотреть), но зато шустро.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- kolobochishe   Почему с PowerPac код работает быстрее, чем просто на Cи?   Nov 29 2010, 14:19
- - Сергей Борщ   Рискну предположить, что PowerPack в процессе стар...   Nov 29 2010, 14:34
- - MALLOY2   PowerPack правильно настроил проц на максимальную ...   Nov 29 2010, 14:35
- - kolobochishe   PowerPac настроил регистры MAMCR=1 и MAMTIM=5. Поэ...   Nov 30 2010, 13:40
- - MrYuran   Я, конечно, [пока] не спец по АРМовой периферии, н...   Nov 30 2010, 14:21
|- - kolobochishe   Цитата(MrYuran @ Nov 30 2010, 19:21) Ну а...   Dec 1 2010, 04:38
- - GetSmart   Если создать переменную и её инвертировать, а пото...   Dec 1 2010, 09:53
- - kolobochishe   Понял. Пример упрощенный, мягко говоря. Элементов ...   Dec 1 2010, 10:09
|- - scifi   Цитата(kolobochishe @ Dec 1 2010, 13:09) ...   Dec 1 2010, 10:28
|- - kolobochishe   Цитата(scifi @ Dec 1 2010, 15:28) Кстати,...   Dec 1 2010, 14:01
- - MrYuran   Так вроде ж есть специально для этого MCI ? Чтобы ...   Dec 1 2010, 14:14
|- - kolobochishe   Цитата(MrYuran @ Dec 1 2010, 19:14) Так в...   Dec 2 2010, 04:18
|- - MrYuran   Цитата(kolobochishe @ Dec 2 2010, 07:18) ...   Dec 2 2010, 06:53
- - scifi   Ещё АЦП можно на внешнюю шину LPC2478 посадить, ес...   Dec 1 2010, 16:49
- - kolobochishe   Для SD карт есть режим 4 бита. Возможно 100Мб/с эт...   Dec 2 2010, 07:24
|- - MrYuran   Цитата(kolobochishe @ Dec 2 2010, 10:24) ...   Dec 2 2010, 07:38
- - ElefantElectronics   [CENSORED] Работает медленно про тому что Вы не чи...   Dec 9 2010, 17:34
- - IgorKossak   QUOTE (ElefantElectronics @ Dec 9 2010, 19...   Dec 9 2010, 17:55


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 08:31
Рейтинг@Mail.ru


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