Перейти к содержанию
    

TMS320C6745 Reference board ? Существует?

В 02.03.2019 в 18:28, __inline__ сказал:

Ну BF532 осилил же :) C6745 аналогично хочу.

Вопрос не в том "сможете или нет", вопрос - ЗАЧЕМ??? Заказали пачку плат, процессоров, а на самый дешёвый XDS100 нет денег? Даже если это для себя. Хотя раз пачка, а не один экземпляр - то явно не для себя, тогда тем более: время - деньги.

Зачем тратить в разы больше времени, если можно сделать в разы быстрее?  :fool:

В своё время так же занимался ерундой (т.е. программил без JTAG-а) TMS320VC5502. Сейчас отчётливо понимаю, что потратил впустую кучу времени. Т.к. всё можно было сделать в разы быстрее.

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


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

как же люди обожают навязывать свое мнение. Ну хочет он так, ЗАТЕМ!! И  я так тоже часто поступаю. Да хотя бы потому, что пойдя трудным путем узнаешь много чего нового. А то.. купил готовый программатор. Ок. А чего сразу не устройство, которое делаешь? Все сделано до нас. А зачем нужно это устройство? Денег заработать? А может лучше коноплей торговать? Денег больше будет. Ну не для смелых можно просто арбузами торговать. И не надо тратить кучу времени впустую, и делать что то там в разы быстрее. Сорри за офф

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


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

15 минут назад, DASM сказал:

как же люди обожают навязывать свое мнение. Ну хочет он так, ЗАТЕМ!! И  я так тоже часто поступаю. Да хотя бы потому, что пойдя трудным путем узнаешь много чего нового.

Ну так что-ж вы идёте лёгким путём - зачем покупаете готовые чипы? Начните с разработки песка в карьере и выплавки кристаллов.

15 минут назад, DASM сказал:

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

Ну так может вам действительно стоит попробовать? чем тратить время тут впустую...

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


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

8 minutes ago, jcxz said:

вам действительно стоит попробовать?

Пробовал, не арбузами. Скучно. Поэтому и развелкаемся как можем, программаторы ваяем, иногда даже получается, иногда продается даже неплохо. А мог бы и готовое купить и сидеть на попе ровно. 

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


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

17 минут назад, DASM сказал:

Пробовал, не арбузами. Скучно. Поэтому и развелкаемся как можем, программаторы ваяем, иногда даже получается, иногда продается даже неплохо. А мог бы и готовое купить и сидеть на попе ровно. 

Если начинать строить дворец с добывания песка и известняка в карьере и камней в каменоломне, то до уровня архитектурных шедевров можно никогда не подняться. А так и остаться на уровне постройки бараков.

PS: Надеюсь моя аллегория понятна.

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


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

Как можно заставить Bootloader C6745 грузить код в SDRAM?

Посмотрел  CMD - но там объявлены только адреса по которым линковщик размещает секции.   А вот как толкнуть AIS в SDRAM?  Возможно ли это сделать AISgen-ом?  Или курить описание AIS формата надо и ваять самому AIS?

 

Или самому надо писать код копирования бинарника в сдрам?

Изменено пользователем repstosw

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


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

И кстати, техасцы назвиздели по поводу создания AIS в виде H-файла для встраивания в другие C-программы.  Создаётся бинарник в любом случае!

Речь об этом:

1.jpg.4007da2c934a0a40b222f58eb54c8976.jpg

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


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

46 минут назад, __inline__ сказал:

Возможно ли это сделать AISgen-ом?

Можно. У меня бОльшая часть кода туда и грузится.

46 минут назад, __inline__ сказал:

Или самому надо писать код копирования бинарника в сдрам?

Нет конечно.

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


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

4 hours ago, jcxz said:

Можно. У меня бОльшая часть кода туда и грузится.

Всё, разобрался.  Оказывается UART Boot Host  каким-то чудом понимает, что если все секции слинкованы в SDRAM, то и грузит туда.  Получилось запустить код в SDRAM.

 

11.jpg.3c233690599468f4143c80bf53353489.jpg

 

Попробовал  включить L1P (кеш кода), так:

Quote

#define CACHE_0_REGS 0x01840000u

#define L1PCFG (*(volatile unsigned int*)(CACHE_0_REGS+0x20))

 

void Enable_ICache(void) //Enable I-Cache
{
 L1PCFG=0x07; //Reconfigure L1P to default state (full cache)
}

 

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

Quote

void Delay(volatile u32 ms) //for 456 MHz
{
 volatile u32 i;
 while(ms>0)
 {
  for(i=0;i<32775;i++);
  ms--;
 }
}

 

 while(1)
 {
  GPIO_BANK0_SET_DATA=0x00000001; //set GP0[0]
  Delay(D);

  GPIO_BANK0_CLR_DATA=0x00000001; //clear GP0[0]
  Delay(D);
 }

Диод мигает с одинаковой скоростью - что при выключенном L1P, что при включенном.

А вот ОТключение L1D тормозит выполнение из SDRAM в 10 раз примерно.

 

Что я делаю не так? (с L1P)

Как можно проверить что кеш кода (L1P) включен и он приносит пользу?   32 миллиона нопов заставить делать в SDRAM ? с кешем и без

Изменено пользователем repstosw

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


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

1 час назад, __inline__ сказал:

Всё, разобрался.  Оказывается UART Boot Host  каким-то чудом понимает, что если все секции слинкованы в SDRAM, то и грузит туда.  Получилось запустить код в SDRAM.

Не чудом. Адрес для каждого фрагмента загружаемого .ais-образа указан в .ais-файле. Весь загружаемый образ - это набор отдельных регионов в памяти, произвольно расположенных.

Почитайте - у TI есть документ с подробным описанием этого формата.

Цитата

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

Странно. Может он у вас так остался во внутренней ОЗУ? :wink: 

Цитата

Как можно проверить что кеш кода (L1P) включен и он приносит пользу?   32 миллиона нопов заставить делать в SDRAM ? с кешем и без

Возможно причина в том, что ваш тестовый цикл довольно короткий, и компилятор его ужал в один аппаратный цикл. Который целиком грузится и выполняется внутри prefetch-буфера DSP. Тогда медленным будет только первый проход.

Попробуйте написать что-то реальное и тяжёлое, а не тест памяти.

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


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

Всё, я разобрался в чём дело.  Когда в AISgen включена инициализация PLL и SDRAM и код грузится в SDRAM,  загрузчик сам включает кеширование L1P и L1D. Это и послужило тому, что вначале подумал, что кеш инструкций не даёт выигрыша.  Обнаружил это сперва принудительно записав в L1PCFG=0x0.  А затем считал его значение и узнал, что загрузчик включает L1 на полную: по 32 кБ.

 

А вот L2 остаётся выключенным - загрузчик его не трогает. И ещё он не трогает MAR192, отвечающий за кеширование адресов SDRAM.

 

Программу раздувал так:

#define REPEAT8(x) \
x; \
x; \
x; \
x; \
x; \
x; \
x; \
x; \

#define REPEAT64(x) REPEAT8(REPEAT8(x))

#define REPEAT4096(x) REPEAT64(REPEAT64(x))

void NoOp(void)
{
 __asm("NOP");
}

void main(void)
{
 //.....
 while(1)
 {
  //......

  REPEAT4096(NoOp())

  //.......

 //.....
}

 

Попробовал принудительно отключать кеши и сделал замеры:

 

L1P   L1D   L2    время выполнения

0        0      0      - 30 секунд

1       0       0   - 14 cекунд

0       1       0   - 12  cекунд

1       1       0  -     2 секунды

0       0       1    -   3 cекунды

1       0      1       -     3  cекунды

0       1     1     -    2   секунды

1       1      1     - 2  cекунды

 

Удлинил тест для L2=1   и сделал второй тест:

 

L1P   L1D   L2    время выполнения

0       0       1    -   52 cекунды

1       0      1       -     48  cекунды

0       1     1     -    34   секунды

1       1      1     - 34  cекунды

 

Теперь я вижу, что L1P работает и в некоторых случаях очень сильно ускоряет работу.

 

Есть ли способ жестко задать программе точку входа в main() или _c_int00() ?

Адрес постоянно плавает.  А мне надо свой загрузчик с SD-карты писать чтобы переходить на загруженную программу.

Изменено пользователем repstosw

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


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

8 часов назад, __inline__ сказал:

Есть ли способ жестко задать программе точку входа в main() или _c_int00() ?

Точка входа задаётся не адресом main() или _c_int00(), а адресом в векторе сброса.

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


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

Пытаюсь в CCSv5 скомпилять следующий код:

int read_and_process(int n)
{
    int vals[n];

    for (int i = 0; i < n; ++i)
        vals[i] = vals[2*i]

    return vals[3*i];
}

Ругается на то что размер массива переменный (VLA) и на объявление переменной внутри цыкла.

Если от второго ещё можно избавиться, опустившись на уровень Страуструповщины (переключив на C++), то VLA не хочет варится. Даже при включенном Enable GCC Extentions.

Есть ли способ заставить компилятор варить Variable Length Arrays ? (must have для C99)

Эмуляторописатели любят GNU-шные плюшки и при портировании прийдётся править много кода (к слову Visual DSP 5.1  и Keil ARM могут это).

Выход?  Скачать CSS по-старше чем v.5 ?

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


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

23 minutes ago, __inline__ said:

Пытаюсь в CCSv5 скомпилять следующий код:


int read_and_process(int n)
{
    int vals[n];

    for (int i = 0; i < n; ++i)
        vals[i] = vals[2*i]

    return vals[3*i];
}

Ругается на то что размер массива переменный (VLA) и на объявление переменной внутри цыкла.

Если от второго ещё можно избавиться, опустившись на уровень Страуструповщины (переключив на C++), то VLA не хочет варится. Даже при включенном Enable GCC Extentions.

Есть ли способ заставить компилятор варить Variable Length Arrays ? (must have для C99)

Эмуляторописатели любят GNU-шные плюшки и при портировании прийдётся править много кода (к слову Visual DSP 5.1  и Keil ARM могут это).

Выход?  Скачать CSS по-старше чем v.5 ?

Выход std vector

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


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

2 hours ago, __inline__ said:

Пытаюсь в CCSv5 скомпилять следующий код:


int read_and_process(int n)
{
    int vals[n];

    for (int i = 0; i < n; ++i)
        vals[i] = vals[2*i]

    return vals[3*i];
}

Ругается на то что размер массива переменный (VLA) и на объявление переменной внутри цыкла.

Если от второго ещё можно избавиться, опустившись на уровень Страуструповщины (переключив на C++), то VLA не хочет варится. Даже при включенном Enable GCC Extentions.

Есть ли способ заставить компилятор варить Variable Length Arrays ? (must have для C99)

Эмуляторописатели любят GNU-шные плюшки и при портировании прийдётся править много кода (к слову Visual DSP 5.1  и Keil ARM могут это).

Выход?  Скачать CSS по-старше чем v.5 ?

1. В цикле у вас как минимум две ошибки: очевидный вылет за границу массива и использование неинициализированной переменной в качестве  rvalue.

2. Область видимости переменной i - тело цикла, за его пределами ее не существует, так что в return - undeclared variable.

3. gcc надо явно сказать, что используется C99 (--std=c99)

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


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

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...