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

 
 
> Instruction pipelining, STM8
evil_laugh
сообщение Nov 4 2011, 07:02
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 4-10-11
Пользователь №: 67 546



Доброго врем времени суток!

Ковыряю STM8, в данный момент - таймеры. Эксперимент показал, что при разной тактовой частоте ядра команды исполняются за разное количество тактов (отсчитываю по таймеру1 без предделителя). Например, при тактовой 16 МГц выполнение команды nop занимает 1 такт, а если переключить тактовую на 1 МГц, получаем уже 2 такта. Если пойти дальше и использовать LSI осциллятор (38 кГц), то там будем иметь 2, или 3, или даже 4 такта для исполнения команды NOP. Всякий раз, когда я пускаю программу на отладку в STM8L-Discovery, количество тактов разное.

В интернете нашёл только http://we.easyelectronics.ru/STM8/pogovori...yadre-stm8.html вот это, но ответов на мои вопросы это не дало, да и ситуация там несколько иная. Где почитать в даташите про instruction flow, как это сделано в PIC и AVR, не нашёл. Помогите, я мозг сломал...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
evil_laugh
сообщение Nov 4 2011, 14:02
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 4-10-11
Пользователь №: 67 546



scifi, я бы и рад поискать, да я с этими контроллерами общаюсь сравнительно недавно и толком не знаю, где могла вкрасться ошибка. Казалось бы, ничего необычного - есть код, циклически выполняющий команду NOP. Если перед ним поставить переключение тактовой на 125 кГц - таймер считает по 2 такта на команду. Если оставить как есть, 2 МГц (после ресета) - считает по 1 такту на ноп. Чудеса sm.gif У Вас есть какие-нибудь предположения?

Есть два предположения: либо это связано с отладчиком (т. е. он добавляет какие-то свои промежуточные инструкции в код), либо это связано с непониманием мной процессов декодирования команд и прочих тонкостей работу ЦПУ. Как выяснилось, мой даташит CPU Programming Manual был неполным, в Сети нашёл такой же, но с дополнительным обширным разделом "Instruction pipelining", где на добрый десяток страниц рассказано, как осуществляются все эти decode, fetch, execute и прочее. Причём в зависимости от порядка следования команд время на исполнение может быть разным. Предстоит всё это понять, может, и найду, где загвоздка. А пока послушаю, может, кто что посоветует... sm.gif

Сообщение отредактировал evil_laugh - Nov 4 2011, 14:03
Go to the top of the page
 
+Quote Post
scifi
сообщение Nov 4 2011, 14:41
Сообщение #3


Гуру
******

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



Цитата(evil_laugh @ Nov 4 2011, 18:02) *
Казалось бы, ничего необычного - есть код, циклически выполняющий команду NOP. Если перед ним поставить переключение тактовой на 125 кГц - таймер считает по 2 такта на команду. Если оставить как есть, 2 МГц (после ресета) - считает по 1 такту на ноп. Чудеса sm.gif У Вас есть какие-нибудь предположения?

Предположения есть.
Вопрос первый: откуда Вы знаете, что тактовая переключилась именно на 125 кГц? Требуется независимое подтверждение.
Вопрос второй: откуда Вы знаете частоту таймера для расчёта времени выполнения программы? Требуется независимое подтверждение.
Вопрос третий: как измеряем время выполнения NOP?
Я бы сделал так: цикл с большим числом итераций, в теле цикла - 100 NOP подряд. В начале и конце цикла дёргаем ножку. Тогда время выполнения цикла можно измерить осциллографом, а не таймером (насчёт рабочей частоты которого, как сказано выше, есть сомнения).
Go to the top of the page
 
+Quote Post



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

 


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


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