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

 
 
> STM32F103ZE - время исполнения кода?, Странности.
pr0m
сообщение Jan 22 2011, 20:12
Сообщение #1


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

Группа: Участник
Сообщений: 183
Регистрация: 22-06-05
Из: Таганрог
Пользователь №: 6 233



Всем привет.
Делаю первые шаги в освоении АРМ-ов. Стоит задача сделать DDS (синтезатор сигналов, до 400кГц, тональные, ЛЧМ). Решил реализовать на этом камне. Всё работает, но! Тот участок кода, к-й и реализует алгоритм DDS (инкремент аккумулятора фазы, выборка значения из таблицы формы сигнала, запись в регистр ЦАП-а) в симуляторе исполняется с абсолютно детерминированным количеством тактов (13), а в реальной железке меняется от 13 до 16 от прошивки к прошивке, причём эти прошивки отличаются в участках кода, не имеющих никакого отношения к основному алгоритму..... wacko.gif Это происходит даже после единственного изменения в исходном коде - изменения начального значения некой переменной в некой процедуре инициализации с одной цифры на другую. Обратил внимание, что при этом ничтожном изменении, содержимое выходного файла прошивки меняется радикально.
DMA, прерывания не использую.
Оптимизации кода выключены, код DDS написан на ассемблере, отдельным модулем! Весь алгоритм основан на точном значении количества тактов кода DDS, а у меня он живёт своей жизнью... Keil 4.14.


Прошу поделиться советами и прочими соображениями!


--------------------
Правильно поставленный вопрос - половина ответа...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
pr0m
сообщение Jan 23 2011, 12:17
Сообщение #2


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

Группа: Участник
Сообщений: 183
Регистрация: 22-06-05
Из: Таганрог
Пользователь №: 6 233



Ещё вопрос знающим - как работает механизм переключения на исполнение из ОЗУ? Вчера ночью не оставалось сил разобраться. Я следовал советам на сайте ARM-овцев - в свойствах проекта вырезал кусок ОЗУ и поместил в ROM, туда же направил в свойствах модуля DDS его код, собрал, прошил. Код в область ОЗУ пишет программатор? Тогда после выключения питания его уже там не будет? Или существует какая-то тайная сила в виде подпрограммы, переписывающей указанный кусок кода из флэш в ОЗУ?
Бегло прошёлся симулятором - в момент входа в main нужный код уже лежит в ОЗУ, а непосредственно перед вызовом моей процедуры в ОЗУ идёт вызов какой-то библиотечной процедуры из 2 инструкций - грузит регистр адресом входа в мою процедуру в ОЗУ и собсно переход.


--------------------
Правильно поставленный вопрос - половина ответа...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 23 2011, 13:17
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(pr0m @ Jan 23 2011, 15:17) *
Или существует какая-то тайная сила в виде подпрограммы, переписывающей указанный кусок кода из флэш в ОЗУ?

Существует. Почитайте в хелпе про __main.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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