jcxz 242 5 марта, 2019 Опубликовано 5 марта, 2019 · Жалоба В 02.03.2019 в 18:28, __inline__ сказал: Ну BF532 осилил же :) C6745 аналогично хочу. Вопрос не в том "сможете или нет", вопрос - ЗАЧЕМ??? Заказали пачку плат, процессоров, а на самый дешёвый XDS100 нет денег? Даже если это для себя. Хотя раз пачка, а не один экземпляр - то явно не для себя, тогда тем более: время - деньги. Зачем тратить в разы больше времени, если можно сделать в разы быстрее? В своё время так же занимался ерундой (т.е. программил без JTAG-а) TMS320VC5502. Сейчас отчётливо понимаю, что потратил впустую кучу времени. Т.к. всё можно было сделать в разы быстрее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 6 марта, 2019 Опубликовано 6 марта, 2019 · Жалоба как же люди обожают навязывать свое мнение. Ну хочет он так, ЗАТЕМ!! И я так тоже часто поступаю. Да хотя бы потому, что пойдя трудным путем узнаешь много чего нового. А то.. купил готовый программатор. Ок. А чего сразу не устройство, которое делаешь? Все сделано до нас. А зачем нужно это устройство? Денег заработать? А может лучше коноплей торговать? Денег больше будет. Ну не для смелых можно просто арбузами торговать. И не надо тратить кучу времени впустую, и делать что то там в разы быстрее. Сорри за офф Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 6 марта, 2019 Опубликовано 6 марта, 2019 · Жалоба 15 минут назад, DASM сказал: как же люди обожают навязывать свое мнение. Ну хочет он так, ЗАТЕМ!! И я так тоже часто поступаю. Да хотя бы потому, что пойдя трудным путем узнаешь много чего нового. Ну так что-ж вы идёте лёгким путём - зачем покупаете готовые чипы? Начните с разработки песка в карьере и выплавки кристаллов. 15 минут назад, DASM сказал: Ну не для смелых можно просто арбузами торговать. И не надо тратить кучу времени впустую Ну так может вам действительно стоит попробовать? чем тратить время тут впустую... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 6 марта, 2019 Опубликовано 6 марта, 2019 · Жалоба 8 minutes ago, jcxz said: вам действительно стоит попробовать? Пробовал, не арбузами. Скучно. Поэтому и развелкаемся как можем, программаторы ваяем, иногда даже получается, иногда продается даже неплохо. А мог бы и готовое купить и сидеть на попе ровно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 6 марта, 2019 Опубликовано 6 марта, 2019 · Жалоба 17 минут назад, DASM сказал: Пробовал, не арбузами. Скучно. Поэтому и развелкаемся как можем, программаторы ваяем, иногда даже получается, иногда продается даже неплохо. А мог бы и готовое купить и сидеть на попе ровно. Если начинать строить дворец с добывания песка и известняка в карьере и камней в каменоломне, то до уровня архитектурных шедевров можно никогда не подняться. А так и остаться на уровне постройки бараков. PS: Надеюсь моя аллегория понятна. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 6 марта, 2019 Опубликовано 6 марта, 2019 (изменено) · Жалоба Как можно заставить Bootloader C6745 грузить код в SDRAM? Посмотрел CMD - но там объявлены только адреса по которым линковщик размещает секции. А вот как толкнуть AIS в SDRAM? Возможно ли это сделать AISgen-ом? Или курить описание AIS формата надо и ваять самому AIS? Или самому надо писать код копирования бинарника в сдрам? Изменено 6 марта, 2019 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 6 марта, 2019 Опубликовано 6 марта, 2019 · Жалоба И кстати, техасцы назвиздели по поводу создания AIS в виде H-файла для встраивания в другие C-программы. Создаётся бинарник в любом случае! Речь об этом: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 6 марта, 2019 Опубликовано 6 марта, 2019 · Жалоба 46 минут назад, __inline__ сказал: Возможно ли это сделать AISgen-ом? Можно. У меня бОльшая часть кода туда и грузится. 46 минут назад, __inline__ сказал: Или самому надо писать код копирования бинарника в сдрам? Нет конечно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 6 марта, 2019 Опубликовано 6 марта, 2019 (изменено) · Жалоба 4 hours ago, jcxz said: Можно. У меня бОльшая часть кода туда и грузится. Всё, разобрался. Оказывается UART Boot Host каким-то чудом понимает, что если все секции слинкованы в SDRAM, то и грузит туда. Получилось запустить код в SDRAM. Попробовал включить 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 ? с кешем и без Изменено 6 марта, 2019 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 6 марта, 2019 Опубликовано 6 марта, 2019 · Жалоба 1 час назад, __inline__ сказал: Всё, разобрался. Оказывается UART Boot Host каким-то чудом понимает, что если все секции слинкованы в SDRAM, то и грузит туда. Получилось запустить код в SDRAM. Не чудом. Адрес для каждого фрагмента загружаемого .ais-образа указан в .ais-файле. Весь загружаемый образ - это набор отдельных регионов в памяти, произвольно расположенных. Почитайте - у TI есть документ с подробным описанием этого формата. Цитата Но вот прироста в скорости выполнения кода я не особо заметил. Странно. Может он у вас так остался во внутренней ОЗУ? Цитата Как можно проверить что кеш кода (L1P) включен и он приносит пользу? 32 миллиона нопов заставить делать в SDRAM ? с кешем и без Возможно причина в том, что ваш тестовый цикл довольно короткий, и компилятор его ужал в один аппаратный цикл. Который целиком грузится и выполняется внутри prefetch-буфера DSP. Тогда медленным будет только первый проход. Попробуйте написать что-то реальное и тяжёлое, а не тест памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 6 марта, 2019 Опубликовано 6 марта, 2019 (изменено) · Жалоба Всё, я разобрался в чём дело. Когда в 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-карты писать чтобы переходить на загруженную программу. Изменено 6 марта, 2019 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 7 марта, 2019 Опубликовано 7 марта, 2019 · Жалоба 8 часов назад, __inline__ сказал: Есть ли способ жестко задать программе точку входа в main() или _c_int00() ? Точка входа задаётся не адресом main() или _c_int00(), а адресом в векторе сброса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 7 марта, 2019 Опубликовано 7 марта, 2019 · Жалоба Пытаюсь в 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 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 7 марта, 2019 Опубликовано 7 марта, 2019 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 3 7 марта, 2019 Опубликовано 7 марта, 2019 · Жалоба 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) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться