777777 0 29 октября, 2009 Опубликовано 29 октября, 2009 (изменено) · Жалоба Где прочитать правила передачи параметров и возврата результатов? Изменено 29 октября, 2009 пользователем 777777 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 29 октября, 2009 Опубликовано 29 октября, 2009 · Жалоба В Compiler Reference Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kamil_yaminov 1 29 октября, 2009 Опубликовано 29 октября, 2009 · Жалоба Где прочитать правила передачи параметров и возврата результатов? Если для техасщины, то вот есть кое-что, а именно для С2000: http://focus.ti.com.cn/cn/lit/an/spra590/spra590.pdf http://focus.ti.com/lit/an/spra806/spra806.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
777777 0 30 октября, 2009 Опубликовано 30 октября, 2009 · Жалоба Если для техасщины, <...> Извиняюсь, забыл написать, что нужен BF537 В Compiler Reference Не смешно. И вообще, вопрос адресовался тем, кто знает ответ. Что касается Compiler Reference, то там есть например такие сообщения: The run-time model defines some registers as scratch registers and others as preserved or dedicated registers. Scratch registers can be used within the assembly language program without worrying about their previous contents. If more room is needed (or an existing code is used) and you wish to use the preserved registers, you must save their contents and then restore those contents before returning. Это, конечно, очень важно, но хотелось бы знать, какие именно регистры являются scratch, а какие preserved or dedicated. По поводу передачи параметров вообще перл: A good way to explore how arguments are passed between a C/C++ program and an assembly language subroutine is to write a dummy function in C/C++ and compile it using the IDDE’s Save temporary files option (or the -save-temps command-line switch). Ну и, типа, посмотреть какой пераметр куда попал. А нет ли в природе более строгого документа, где всё это описано? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vik0 0 30 октября, 2009 Опубликовано 30 октября, 2009 · Жалоба А нет ли в природе более строгого документа, где всё это описано? Так там же эти регистры и описываются: C/C++ run-time model and environmnt. Начиная со стр. 1-343 в pdf версии мануала. Если кратко, то: dedicated: p6, p7, l0-l3 call preserved: p3-p5, r4-r7 scratch: p0-p2, r0-r3, lb0-lb1, lc0-lc1, lt0-lt1, astat, a0, a1, i0-i3, b0-b3, m0-m3 В функцию первые три аргумента передаются в r0-r2, последующие на стеке, начиная с fp+0x14. Возвращаемые значения: r0, если <=32 бит, r0:r1 если >32 и <=64 бит. Если больше 64-х бит - на стеке и указатель на них в p0. PS. Решили таки изобрести велосипед, и написать свой fir на ассемблере? ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
777777 0 30 октября, 2009 Опубликовано 30 октября, 2009 · Жалоба Так там же эти регистры и описываются: C/C++ run-time model and environmnt. Начиная со стр. 1-343 в pdf версии мануала. Спасибо, действительно есть. А я искал в "C/C++ and Assembly Interface" PS. Решили таки изобрести велосипед, и написать свой fir на ассемблере? ;) Да, только не fir, а iir. Я нашел функцию iir() но во-первых, матлаб приводит коэффициенты в диапазон -2...+2, что не влазит в fract16. А во-вторых он выдает еще масштабирующий коэффициент, на который надо умножать результат, а он в функции iir() вообще отсутствует. Кроме того, ему нужен один входной массив и один выходной, а мне хотелось бы обрабатывать данные на месте. Кстати, никто не знает, можно ли в эту функцию подсунуть один и тот же массив и в input и в output? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DPL 0 1 ноября, 2009 Опубликовано 1 ноября, 2009 · Жалоба Немного не в тему, но, возможно, информация пригодится... ...матлаб приводит коэффициенты в диапазон -2...+2, что не влазит в fract16. К сожалению матлаба сейчас под рукой нет, так что не могу подробно расписать что и где. Но совершенно точно, что матлаб (я использовал FDA Tool) умеет приводить коэффициенты к диапазону [-1...+1[. Проверено неоднократно :) (правда для FIR). Кстати, никто не знает, можно ли в эту функцию подсунуть один и тот же массив и в input и в output? Мне нужно было подсовывать по одному отсчету (т.е. массивы input и output содержали по одному элементу). Так вот, указание одной и той же переменной на вход и на выход работало нормально. Опять же, это делалось для fir_fr16, но, я думаю, способ работы с параметрами у сходных библиотечных функций одинаков. А вообще реализация IIR на ассемблере есть в VDSPшных исходниках (VDSP50\Blackfin\lib\src\libdsp\iir_fr16.asm). Очень удобно взять это за основу (сам так поступил, когда понадобилось iir_fr32). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Абырвалг 0 2 декабря, 2009 Опубликовано 2 декабря, 2009 · Жалоба К сожалению матлаба сейчас под рукой нет, так что не могу подробно расписать что и где. Но совершенно точно, что матлаб (я использовал FDA Tool) умеет приводить коэффициенты к диапазону [-1...+1[. Проверено неоднократно :) (правда для FIR). Edit/Reorder and Scale Second-Order Sections Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться