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

На работе пришлось ковырять чужой проект под DSP BIOS.

Глянул - ничего непонятно. Ранее имел опыт программирования на C.

В идеале хочется найти учебник с простыми примерами. Книгу "Express DSP для чайников" читал. Но в ней только идеология. Подскажите, возможно есть что-то в открытом доступе.

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


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

На работе пришлось ковырять чужой проект под DSP BIOS.

Глянул - ничего непонятно. Ранее имел опыт программирования на C.

В идеале хочется найти учебник с простыми примерами. Книгу "Express DSP для чайников" читал. Но в ней только идеология. Подскажите, возможно есть что-то в открытом доступе.

С чужим кодом почти всегда сложности. Попробуйте задавать конкретные вопросы. Например, "в функции main ничего не делается, а оно работает" :rolleyes:

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


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

С чужим кодом почти всегда сложности. Попробуйте задавать конкретные вопросы. Например, "в функции main ничего не делается, а оно работает" :rolleyes:

да, по сути так оно и есть. Интересный подход применён, когда в функции main ничего не делается, но всё работает. Нигде не могу найти литературу чтобы объяснялись тонкости построения программ на чистом С "когда в main ничего не делается"

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


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

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

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


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

да, по сути так оно и есть. Интересный подход применён, когда в функции main ничего не делается, но всё работает. Нигде не могу найти литературу чтобы объяснялись тонкости построения программ на чистом С "когда в main ничего не делается"

Когда main завершается, в работу вступает DSP/BIOS. Если в main действительно ничего особенного не делается (TSK_create и прочее), то смотреть нужно .tcf файл. Там описываются задачи, программные и аппаратные прерывания, а также многое другое. После изучения этого файла многое должно проясниться.

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


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

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

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


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

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

 

за год можно английский подучить )

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


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

Скачай книгу Kentarnavaz по 6713.

 

Real-Time Digital Signal Processing Based on the TMS320C6000.

 

Либо в картинках семинар по SYS/BIOS DSP/BIOS.

 

http://processors.wiki.ti.com/index.php/C6...shop_Using_BIOS

 

Там всё в картинках и наглядно.

Вообще идеология DSP/Bios - обработка данных в процедурах ("задачах - tasks"), запускаемых во времени или по прерыванию.

Плюс добавлены механизмы разрешения коллизий при одновременном доступе к ресурсам - мьютексы и семафоры.

 

Имхо весьма странная вещь. Уж лучше сделать программу в виде "бесконечного" основного цикла с обработкой прерываний. Либо использовать более "взрослые" операционки.

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


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

Полностью согласен. DSP/Bios крайне странная вещь. Свой проект так и не смог адаптировать под неё. Намного внятнее иметь свой планировщик или нормальную оську. Я остановился на собственном планировщике так как задача делится на части нормально.

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


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

Полностью согласен. DSP/Bios крайне странная вещь. Свой проект так и не смог адаптировать под неё. Намного внятнее иметь свой планировщик или нормальную оську. Я остановился на собственном планировщике так как задача делится на части нормально.

Подскажите пожалуйста как реализовать свой планировщик. Интерересует реализация вытесняющей многозадачности без какой либо ОС.

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


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

На самом деле планировщик как таковой - довольно простая штука. Для реального времени стандартным решением является планировщик в фиксированными приоритетами, с общим числом уровней от 8 до 256 в зависимости от набора задач. Не сказать, что фиксированные приоритеты - это самый правильный алгоритм планирования для реального времени, но он 1) довольно простой в реализации, 2) время перепланирования оценивается как O(1), то есть не зависит от числа задач в системе, 3) для него существуют алгоритмы защиты от т.н. инверсии приоритетов, когда требуется блокирование многопоточности при доступе к общему ресурсу.

 

Вытесняемость - вещь более интересная, поскольку для переключения контекстов требуется написать на ассемблере код, который положит в стек все необходимое, переключит указатель текущего потока, его стек, и снова достанет из нового стека все регистры ядра. Довольно кропотливая работа, но можно ее содрать из DSP/BIOS или linux.

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


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

Крик утопающего.

Ребята помогите!

Как используя BIOS, вывести через UART "Hello World" ?

Процессор TMS320F28069. Я не понимаю принципов работы BIOS. Читаю "TMS320C28x DSP/BIOS 5.x Application Programming Interface (API) Reference Guide", вижу DEV Module, вроде бы это оно, но как эти воспользоваться?

Чего я не понимаю:

1. Как какая-либо функия закрепляется за Task/SWI/IDLE;

2. Как добавить/настроить аппаратное прерывание, например, от UART;

3. Как добавить в систему драйвер периферии, где его взять и какой у него интерфейс.

 

Знаю, вопросы наивные, но RTFM не помог. :smile3046:

 

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


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

Таки "Hello World" вывести получилось. Однако, используя непосредственно регистры SCI. Как то так:

 char *msg;

main ()
{
scia_init();
.....
msg = "hello world\n\0";
scia_msg(msg);
.......
}

void scia_xmit(int a)
{
   while (ScibRegs.SCIFFTX.bit.TXFFST != 0) {}
   ScibRegs.SCITXBUF=a;

}

void scia_msg(char * msg)
{
   int i;
   i = 0;
   while(msg[i] != '\0')
   {
       scia_xmit(msg[i]);
       i++;
   }
}

 

 

Как тоже самое сделать, используя возможности BIOS?

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


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

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

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

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

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

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

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

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

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

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