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

 
 
> 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
pr0m
сообщение Jan 23 2011, 14:21
Сообщение #4


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

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



Цитата(aaarrr @ Jan 23 2011, 16:17) *
Существует. Почитайте в хелпе про __main.

Неа. Добрался до железки, дёрнул питание - перестала работать.
Делаю вывод - нужно в начале программы самому копировать код в ОЗУ.
По поводу main вроде всё понятно - в стартапе вызывается из обработчика RESET-а, после SystemInit.
RESET_HANDLER
LDR R0,=SYSTEMINIT
BLX R0
LDR R0,=__main
BX R0
ENDP


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


Гуру
******

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



Цитата(pr0m @ Jan 23 2011, 17:21) *
Неа. Добрался до железки, дёрнул питание - перестала работать.

Значит что-то не так сделали. Скрипт линкера и map-файл покажите.

Цитата(pr0m @ Jan 23 2011, 17:21) *
По поводу main вроде всё понятно - в стартапе вызывается из обработчика RESET-а, после SystemInit.

main и __main совсем не одно и то же.
Go to the top of the page
 
+Quote Post

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


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

 


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


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