|
Instruction pipelining, STM8 |
|
|
|
Nov 4 2011, 07:02
|
Участник

Группа: Участник
Сообщений: 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, не нашёл. Помогите, я мозг сломал...
|
|
|
|
|
 |
Ответов
|
Nov 4 2011, 14:02
|
Участник

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

|
scifi, я бы и рад поискать, да я с этими контроллерами общаюсь сравнительно недавно и толком не знаю, где могла вкрасться ошибка. Казалось бы, ничего необычного - есть код, циклически выполняющий команду NOP. Если перед ним поставить переключение тактовой на 125 кГц - таймер считает по 2 такта на команду. Если оставить как есть, 2 МГц (после ресета) - считает по 1 такту на ноп. Чудеса  У Вас есть какие-нибудь предположения? Есть два предположения: либо это связано с отладчиком (т. е. он добавляет какие-то свои промежуточные инструкции в код), либо это связано с непониманием мной процессов декодирования команд и прочих тонкостей работу ЦПУ. Как выяснилось, мой даташит CPU Programming Manual был неполным, в Сети нашёл такой же, но с дополнительным обширным разделом "Instruction pipelining", где на добрый десяток страниц рассказано, как осуществляются все эти decode, fetch, execute и прочее. Причём в зависимости от порядка следования команд время на исполнение может быть разным. Предстоит всё это понять, может, и найду, где загвоздка. А пока послушаю, может, кто что посоветует...
Сообщение отредактировал evil_laugh - Nov 4 2011, 14:03
|
|
|
|
|
Nov 4 2011, 14:41
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(evil_laugh @ Nov 4 2011, 18:02)  Казалось бы, ничего необычного - есть код, циклически выполняющий команду NOP. Если перед ним поставить переключение тактовой на 125 кГц - таймер считает по 2 такта на команду. Если оставить как есть, 2 МГц (после ресета) - считает по 1 такту на ноп. Чудеса  У Вас есть какие-нибудь предположения? Предположения есть. Вопрос первый: откуда Вы знаете, что тактовая переключилась именно на 125 кГц? Требуется независимое подтверждение. Вопрос второй: откуда Вы знаете частоту таймера для расчёта времени выполнения программы? Требуется независимое подтверждение. Вопрос третий: как измеряем время выполнения NOP? Я бы сделал так: цикл с большим числом итераций, в теле цикла - 100 NOP подряд. В начале и конце цикла дёргаем ножку. Тогда время выполнения цикла можно измерить осциллографом, а не таймером (насчёт рабочей частоты которого, как сказано выше, есть сомнения).
|
|
|
|
Сообщений в этой теме
evil_laugh Instruction pipelining, STM8 Nov 4 2011, 07:02 scifi Цитата(evil_laugh @ Nov 4 2011, 11:02) Эк... Nov 4 2011, 11:01 evil_laugh Спасибо, это солидная пища для размышлений.
Такто... Nov 4 2011, 14:59 scifi Цитата(evil_laugh @ Nov 4 2011, 18:59) Та... Nov 4 2011, 15:16 ZiB Отладка - зло.
Оптимальнее сделать как предложил s... Nov 4 2011, 15:11 evil_laugh ZiB, благодарю за информацию, документ весьма поле... Nov 4 2011, 16:33 scifi Цитата(evil_laugh @ Nov 4 2011, 20:33) А ... Nov 4 2011, 17:04 evil_laugh Мне казалось, что и таймер, и процессор тактируютс... Nov 4 2011, 22:37 evil_laugh Добрый день всем.
Руки снова дошли до изучения ST... Nov 16 2011, 20:22
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|