kentawrik

Target Board 78f1146 И Qb-mini2

8 сообщений в этой теме

kentawrik    0

Приобрел QB-MINI2 и сделал сам платку типа таргетбоард на 1146. Плата прилагается

post-45024-1218429386_thumb.jpg

Kit.rar

встала необходимость просмотреть время выполнения определенной процедуры.

void fill()

{

for( i = 0; i < 3; i++)

{

for( j = 0; j< 3072;j++)

{

buffer[j]='2';

}

}

}

инициализация:

void init_hard()

{

// инициализация тактовых частот

OSMC = 0x01; // xxxxxxx0

// +---- (FSEL) частота для памяти: 1 - выше 10 МГЦ / 0 - ниже 10 Мгц(экономия питания)

OSTS = 0x07; // xxxxx000

// +++---- время стабилизации (OSTS2, OSTS1, OSTS0)

// 000 - 2^8/fx

// 001 - 2^9/fx

// 010 - 2^10/fx

// 011 - 2^11/fx

// 100 - 2^13/fx

// 101 - 2^15/fx

// 110 - 2^17/fx

// 111 - 2^18/fx

CMC = 0x51; // 00x0xxx0

// || | +---- (AMPH) частота: 0 от 2 до 10 МГц / 1 - от 10 до 20 МГц

// || +-------- (OSCSELS) XT1,2: 0 - порт, 1 - кристалл

// |+---------- (OSCSEL) X1: 0 - порт / 1 вход(ы) генератора

// +----------- (EXCLK) генератор 0 - внутренний / 1 - внешний вход

CKC = 0x08; // 00001000

// |||||||+----(MDIV0):

// ||||||+-----(MDIV1):

// |||||+------(MDIV2):

// ||||+------- всегда 1

// |||+--------(MCM0) источник для fclk: 0 - fih / 1 - fmx

// ||+---------(MCS) (т.чтение) статус fmain: 0 - fih / 1 - fmx

// |+----------(CSS) источник для fclk: 0 - зависит от MDIV и MCM0 / 1 - fsub/2

// +-----------(CLS) (т.чтение) статус fclk: 0 - fmain/ 1 - fsub

CSC = 0x00; // 00xxxxx0

// || +----(HIOSTOP) fhi внутренний генератор: 0 - запустить / 1 - остановить

// |+----------(XTSTOP) fsub: 0 - запустить / 1 - остановить

// +-----------(MSTOP) fmx внешний: 0 - запустить / 1 - остановить

while(OSTC < 0xFF) // ожидаем пока содержимое регистра достигнет значения в зависимости

{ // от OSTS (в битах отличается)

__no_operation();

}

// генераторы запустили и подождали

CKC = 0x18; // здесь установили источник для fclk на fmx

CSC = 0x01; // остановили внутренний генератор

PER0=0x81; // 0x0000x0

// | |||| +---- (TAUEN) подать тактовую частоту на массив таймеров

// | |||+------ (SAU0EN) подать тактовую частоту на массив 0 последовательных портов

// | ||+------- (SAU1EN) подать тактовую частоту на массив 1 последовательных портов

// | |+-------- (IIC0EN) подать тактовую частоту на IIC0

// | +--------- (ADCEN) подать тактовую частоту на АЦП

// +----------- (RTCEN) подать тактовую частоту на часы реального времени

// частоты проиницализировали и на устройства подали

// инициализация портов

}

запускаю через симулятор -

смотрю через Profiling (Code Coverage не работает на qb-mini2 поэтому использую этот плагин)

время выполнения заливки чуть больше 433000 тактов

запускаю через отладчик - время выполнения 22600000 тактов

исходя из ассемблерного кода и размера массива я больше склоняюсь к тому что отладчик брешет, а симулятор говорит правду.

А вот как заставить отладчик говорить правду - не пойму...

Может неправильно что настроил в IAR?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
kentawrik    0

Прошу прощения у модераторов но добавлю отдельным сообщением.

Да и еще у меня стоит как описано в даташите (в памяти при просмотре располагается как надо)

#pragma location = "OPTBYTE"

__root const unsigned char opbytes[4]={0x00,0xFF,0xFF,0x85};

хотя в CoolIt! стоит следующее (78F1166):

#pragma location = "OPTBYTE"

__root const unsigned char opbytes[3]={0x00,0xFF,0x85};

хотя ведут себя программы одинаково и при таком и при таком расскладе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Migray    5

В режиме отладки, когда идет работа с OCD естественно время выполнения будет больше.

Правда не на порядок.

Уточним, посмотрим

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
kentawrik    0

прошу прощения - панику поднял...

в настройках оборудования к отладчику - есть пункт Time Unit.

он как раз и задает величины по которым отсчитывается время.

так вот для симулятора считаются циклы, а для OCD выводится время в величинах которые мы установили...

у меня стояли наносекунды значит время выполнения процедуры fill в тактах 433233, а по времени 22600000 нс или 22,6 мс (миллисекунды).

все это даже лучше чем я ожидал...

:unsure:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Migray    5

Вообще следовало ожидать.

В этом процессоре есть конвеер, и однозначно сказать что столько-то команд=столько-то тактов не всегда можно.

В сложно-запутанной программе с кучей переходов, когда конвеер не работает, что-то подсчитать можно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
kentawrik    0

так а как опытный человек что скажите по поводу OPTION?

почему такая разница?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Migray    5

Вечером гляну в даташит.

Там должно быть побитовое описание.

Возможно что различающиеся биты в твоей программе не затрагиваются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас