10.09.2012, 23:35
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Sergi_alc
|
Вот почему получилось 6 тактов вместо 4, не пойму?
|
А где Вы читаете?
Я залез на ARM ( http://infocenter.arm.com/help/index.../CHDIJAFG.html) (собственно, а кудаж ещё?) и читаю
LDR R1,[R0] - 3 такта, STRB R1,[R4,#0x1] - 2[c] такта, где [c] - Neighboring load and store single instructions can pipeline their address and data phases. This enables these instructions to complete in a single execution cycle.
( http://infocenter.arm.com/help/index.../CHDDIGAC.html). Итого - 6, что у Вас и получается.
===
Но вопрос ведь не в этом. Ещё раз отмечаю - вылизывание проги до такта при серии выше 10000 штук абсолютно безперспективное дело. Примените аппаратное решение, которое будет на децл дороже (что не факт) и обеспечит требуемое.
Прога должна быть максимально независима!!!!
|
|
|
|
10.09.2012, 23:53
|
|
Частый гость
Регистрация: 30.10.2011
Сообщений: 28
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Фраза LDR R0,[R1,R2]; STR R0,[R3,#20] - normally three cycles total подразумевает всего! 3 цикла на 2 команды. Это как раз мой вариант.
Пусть даже по отдельности
Load Word LDR Rd, [Rn, ‹op2›] 2[c]
Store Word STR Rd, [Rn, ‹op2›] 2[c]
всего 4.
|
|
|
|
10.09.2012, 23:58
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от SasaVitebsk
|
А где Вы читаете?
Но вопрос ведь не в этом. Ещё раз отмечаю - вылизывание проги до такта при серии выше 10000 штук абсолютно безперспективное дело.
|
Насчёт тактов согласен - не нужно и порой невозможно их сосчитать.
А вот мнение насчёт серии в 10к показалось странным - как раз тот случай, где нужно вылизывать с целью понизить себестоимость, в ущерб независимости программы.
|
|
|
|
11.09.2012, 03:05
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Sergi_alc
|
Фраза LDR R0,[R1,R2]; STR R0,[R3,#20] - normally three cycles total подразумевает всего! 3 цикла на 2 команды. Это как раз мой вариант.
Пусть даже по отдельности
Load Word LDR Rd, [Rn, ‹op2›] 2[c]
Store Word STR Rd, [Rn, ‹op2›] 2[c]
всего 4.
|
Ну от части соглашусь. Насколько я понял, если идут подряд команды загрузки сохранения, то возможна экономия одного цикла. Иными словами 3+2-1 = 4. Но это в общем-то касается только кода. У вас ещё есть выборка из флэши. Попробуйте выполнить этот код из ОЗУ.
Честно говоря я не разбирался в этом. Нет желания. Примерно я могу оценить производительность контролера, а вылизыванием тайминга на ARMе я никогда не занимался. Ввиду непреднозначенности контролера с конвеером, для таких дел. Во-первых будет сильный джитер, за счёт работы конвеера и выборки. Во-вторых, в реальной задаче у вас будут прерывания, что вообще рубит на корню такие вещи. Обрабтчик, всёже достаточно громоздкий получается.
Работа с флэш:
zero wait state, if 0 ‹ SYSCLK 24 MHz
one wait state, if 24 MHz ‹ SYSCLK 48 MHz
two wait states, if 48 MHz ‹ SYSCLK 72 MHz
Сложно посчитать. Задержки частично компенсируются выборкой 64 бита. Но возможно во время ввода ещё шина приостанавливается, хотя и говорят о независимости.
Видно по тестам. Время выполнения из флэши на реальной проге всёже больше, чем из ОЗУ, хотя и незначительно. Понятно, что зависит от конкретной проги. Что говорит, о сложности предсказания как грузится, как конвеер и шины работают.
Симулятор даже не показывает по тактам. Говорят, есть проги, которые позволяют показать и посчитать время выполнения реального куска программы.
Только зачем? Раз вы определили, что кусок исполняется за 6, то чем это можно изменить?
Надо просто убедится что вы верно настроили шины и PLL.
Последний раз редактировалось SasaVitebsk; 11.09.2012 в 03:08.
|
|
|
|
11.09.2012, 10:18
|
|
Прописка
Регистрация: 20.02.2006
Сообщений: 284
Сказал спасибо: 9
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Hives
|
EXIS интересно, готовые это какие?
|
Ну если быть точнее готовые функции библиотеки stm32f10x_flash.c
Пока просто счетчик запусков сделал как-то так:
Код:
|
Data=(*(__IO int32_t*) 0x08003C00);
Data++;
FLASH_UnlockBank1();
NbrOfPage = (BANK1_WRITE_END_ADDR - BANK1_WRITE_START_ADDR) / FLASH_PAGE_SIZE;
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
for(EraseCounter = 0; (EraseCounter ‹ NbrOfPage) && (FLASHStatus == FLASH_COMPLETE); EraseCounter++)
{
FLASHStatus = FLASH_ErasePage(BANK1_WRITE_START_ADDR + (FLASH_PAGE_SIZE * EraseCounter));
}
Address = BANK1_WRITE_START_ADDR;
FLASHStatus = FLASH_ProgramWord(Address, Data);
FLASH_LockBank1(); |
|
|
|
|
11.09.2012, 11:24
|
|
Частый гость
Регистрация: 24.08.2010
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
[QUOTE=Left Radio;554181]Привет, интересные фото ![Улыбка](images/smilies/icon_smile.gif) Это с помощью моей граф. библиотеки делали? Уж больно похож интерфейс
Сообщение от dosikus
|
Можно посмотреть вашу либу ?
|
Если после некоторого более-менее длительного испытательного срока удается задрать еще необследованную подюбочное пространство,то выявляется у всех интерфейс, уж больно одинакова и похожа, но в общем-то с учетом и скидкой на сроки эксплуатации. (Шутка)
Экран LS020 (S65) имеет более 4-х раз меньше пикс. 176 Х 132 против 400 Х 240 и это есть самое жесткое ограничение.Графической библиотекой не пользовался, смотрел кто - что лепил, а вот общее фото использовал мне, уже давным-давно запало в душу синий фон на LS020 еще представленным "FUSION 2000" на мега8 на асм-е около 2006-2007 годов, позволяющий обходиться без подсветки при дневном свете или со слабой до пару мА при слабом, правда чем новее по выпуску дисплей тем больше требует тока.Вероятная причина подметают в изоляторе брака и спрос рождает предложение, а в безрыбье и рак будет рыбой. Этот дисплей на
сегодняшний день можно использовать если ничего другого нет, достать его трудновато и дорого, лучше доплатить на 50% и больше и взять уже на макетке дисплей покруче с описанием может уже и с тачскреном.
Последний раз редактировалось Arpad1; 11.09.2012 в 11:27.
|
|
|
|
12.09.2012, 18:26
|
|
Прописка
Регистрация: 21.03.2011
Сообщений: 107
Сказал спасибо: 15
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Вопрос скорее по С.
(работаю с IAR).
Как бы слово 32бита положить в 4 байта массива, не сдвигая 3 раза на 8бит.
u8 BufferIN[]. Например затолкать WORD32 в BufferIN[3]-BufferIN[6]??
Чую можно же... Одним махом... Или наоборот 4 соседние байта массива "рассмотреть" как слово, не двигая биты и суммируя?
Последний раз редактировалось pasipaka; 12.09.2012 в 18:31.
|
|
|
|
12.09.2012, 18:33
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от pasipaka
|
Как бы слово 32бита положить в 4 байта массива, не сдвигая на 8бит.
u8 BufferIN[]. Например затолкать WORD32 в BufferIN[3]-BufferIN[6]??
|
Код:
|
*((uint32_t *)&BufferIN[3])=0x12345678; |
Сообщение от pasipaka
|
Или наоборот 4 соседние байта массива "рассмотреть" слово, не двиная биты и суммируя?
|
Код:
|
uint32_t word_var=*((uint32_t *)&BufferIN[3]); |
Можно ещё через union-ы, но не чревато ли это всё fault-ами?
Если чревато, то где и когда?
Последний раз редактировалось _Артём_; 12.09.2012 в 18:45.
|
|
|
Сказали "Спасибо" _Артём_
|
|
|
12.09.2012, 19:14
|
|
Прописка
Регистрация: 21.03.2011
Сообщений: 107
Сказал спасибо: 15
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Спасибо. Сам бы не догадался в каком порядке разыменователи и & и приведения типа ставить... Особенно еще одна звезда в приведении типа ![Учучь на ошибках](images/smilies/icon_fingal.gif)
А гугль на спонтанный запрос не ответил.
union не катит, т.к. слово в разные места массива ложится...
Грубо гря слово (счетчик) в кольцевой буфер запихаю периодически в купе с пакетом инфы.
А чего, когда fault светить может???
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:19.
|
|