CyberNik 0 25 августа, 2006 Опубликовано 25 августа, 2006 · Жалоба Как можно вставить в исходник на Си asm вставку в несколько строк? Получилось только по одной команде в стиле asm ("nop"), а мне нужно написать целый цикл опроса датчиков, по одной команде оч некрасиво и неудобно, как сделать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
beer_warrior 0 25 августа, 2006 Опубликовано 25 августа, 2006 · Жалоба В докуменации на avr-libc есть достаточно подробное описние. Правда юниксовый формат асма не очень удобен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Diman_ 0 25 августа, 2006 Опубликовано 25 августа, 2006 · Жалоба В книге Шпак Ю.А. Программирование на языке С для AVR и PIC микроконтроллеров. МК-Пресс, Киев, 2006 есть перевод этой главы. А книжка есть на http://lord-n.narod.ru/walla.html. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CyberNik 0 26 августа, 2006 Опубликовано 26 августа, 2006 · Жалоба Спасибо за ссылки. Еще два вопросика: 1 - нужно ли восстанавливать "попорченные" регистры при выходе из asm вставки или компилятор сам за этим следит 2 - а можно ли написать нужный мне кусок кода на asm'e отдельно, в другом файле, а потом при компиляции файлы слинковать и юзать extern объявление в Си? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
beer_warrior 0 26 августа, 2006 Опубликовано 26 августа, 2006 · Жалоба 1.Тут надо смотреть, чтобы не зацепить регистры уже используемые компилятором. В доке есть описание, какие и как используються. Поэому наиболее безопасно пойти путем (2). Как компромис можно сделать функии с С вызовом и ассемблерным телом int foo(char) { asm{.......} } Тогда работу со стеком берет на себя компилятор, а логику работы программист. Впрочем напоследок скажу - gcc оптимизирует достаточно хорошо, и ввязываться в изыски с асмом особой надобности нет. Напишите функцию на С, скомпилируйте и просмотрите листинг - в 90% случаев выкинуть оттуда будет нечего. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CyberNik 0 26 августа, 2006 Опубликовано 26 августа, 2006 (изменено) · Жалоба в 90% случаев выкинуть оттуда будет нечего. Начнем хотябы с этого: Bitwise operations in Standard C will automatically promote their operands to an int, which is (by default) 16 bits in avr-gcc. и зачем мне 16 битная логика когда мне и 8и с головой хватает?... Изменено 26 августа, 2006 пользователем Labinskiy Nikolay Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
beer_warrior 0 26 августа, 2006 Опубликовано 26 августа, 2006 (изменено) · Жалоба Скомпилируйте и посмотрите.Стазу отпадет масса вопросов. Вдогонку: Bitwise operations in Standard C will automatically promote their operands to an int, which is (by default) 16 bits in avr-gcc. Use (u)intN_t if you need exactly N bits. Since these typedefs are mandated by the C99 standard, they are preferred over rolling your own typedefs. Note: If avr-gcc's -mint8 option is used, no 32-bit types will be available for all versions of GCC below 3.5. Изменено 26 августа, 2006 пользователем beer_warrior Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CyberNik 0 26 августа, 2006 Опубликовано 26 августа, 2006 · Жалоба Спасибо, не знал Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться