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

 
 
> 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
Ответов
ukpyr
сообщение Jan 23 2011, 15:17
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



синхронзировать запись в DAC с таймером не получается ?
Go to the top of the page
 
+Quote Post
pr0m
сообщение Jan 23 2011, 15:37
Сообщение #3


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

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



Цитата(ukpyr @ Jan 23 2011, 18:17) *
синхронзировать запись в DAC с таймером не получается ?

Не вижу смысла, тем более что в даташите написано, что при записи с использованием триггера по таймеру задержка записи - до 3 тактов, а напрямую - 1. Если Вы имеете ввиду - в обработчике прерывания от таймера - не годится, т.к. это очень медленно - у меня желательно период обновления значения DAC уложить в 20 тактов максимум, чтоб сохранить достаточно высокую частоту дискретизации и макс. частоты генерируемого сигнала соответсно.


Цитата(aaarrr @ Jan 23 2011, 18:06) *
Значит что-то не так сделали. Скрипт линкера и map-файл покажите.


main и __main совсем не одно и то же.

ага, зашёл в __main. Там уже что-то интетесное происходит до вызова main. Сбрасываю скаттер-файл и map.

А вот содержимое файла .lnp
--cpu Cortex-M3 ".\debug\main.o" ".\debug\dss.o" ".\debug\stm32f10x_it.o" ".\debug\system_stm32f10x.o" ".\debug\startup_stm32f10x_hd.o" ".\debug\stm32f10x_tim.o" ".\debug\stm32f10x_gpio.o" ".\debug\stm32f10x_rcc.o" ".\debug\misc.o" ".\debug\stm32f10x_dac.o" ".\debug\stm32f10x_exti.o" --library_type=microlib --strict --scatter ".\Debug\NAU.sct"
--autoat --summary_stderr --info summarysizes --map --xref --callgraph --symbols
--info sizes --info totals --info unused --info veneers
--list ".\LST\NAU.map" -o ".\Debug\NAU.axf"

Сообщение отредактировал pr0m - Jan 23 2011, 15:46
Прикрепленные файлы
Прикрепленный файл  NAU.rar ( 7.17 килобайт ) Кол-во скачиваний: 20
 


--------------------
Правильно поставленный вопрос - половина ответа...
Go to the top of the page
 
+Quote Post

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


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

 


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


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