Здравствуйте, Сергей, Вы писали:
С>Здравствуйте, programmater, Вы писали:
P>>С на PIC, на котором нету программного доступа к стеку? Это интересно. Как же там аргументы передаются и организются рекурсивные функции?
С>Если говорить о PIC16, то у него не просто доступа к стеку нет, а вообще нет стека данных, а стек возвратов ограничен всего 8 уровнями.
Ну я именно это и имел в виду, просто видимо неудачно выразился.
С>Тем не менее, компиляторы С с этим вполне справляются. Используется так называемый компилированнный стек, то есть в процессе компиляции строится дерево вызовов, а затем компилятор раскладывает локальные переменные по статической памяти, с учетом порядка вызовов, чтобы они не они не перекрывались. Компилированный стек данных, кстати, более эффективен, чем обычный с точки зрения размера памяти. Ограничение — отсутствие реентерабельности, но это общая беда PIC16, хоть на АSМ пиши, хоть на С.
Спасибо, этого не знал. Хотя на 32 ячейках ОЗУ (да еще и разбитых на 2 страницы — тоже считаю общей бедой пиков) не больно-то размахнешься на выращивания деревьев
. Кстати, как компиляторы с двумя страницами справляются?
С> Лучшим компилятором для PIC16 считается Hi-Tech, пытаться писать на асме лучше чем он компилит — утопия. В смысле, выгадать процентов 30-40 по объему кода можно, но не стоит оно того в 21 веке, когда память дешевая, а зарплата программиста не очень.
Вот с этим я бы поспорил. Насколько мне известно, понятие "память дешевая" к пикам (во всяком случае 16) неприменимо. Почему? Да потому что у них нет внешней шины адреса и шины данных! Или есть? Да не, ножек там мало. Так вот поэтому насколько мне известно, к пику внешнюю память не подключить, а посему втискиваться в ту, которая есть (а насколько я знаю, у самого большого 16 пика объем памяти под код 32килослова). Так что тут речь уже идет о том, влезем мы или не влезем в отведенное количество памяти, и никакой "дешевой памятью" эту ситуацию не исправить. Если не влезем — придется ставить более дорогой контроллер. Это вообще отличительная черта пиков — отсутствие внешней шины. ПИК — это "все в одном". С одной стороны это гуд (не нужна лишняя внешняя обвеска и минимум ног, а значит и габаритов), а с другой стороны не совсем — потому, что я описал выше. Так что я если уж надо писать для пика (кстати, не люблю я это занятие — уж больно спецефический ассемблер у него, а слежение за переключениями страниц вообще убивает), то пишу исключительно на асме и компиляторам не доверяю.
С> А у PIC18 уже полноценный стек есть, на нем и С++ может быть, в частности у IAR есть. Но он, говорят, не очень, по качеству кодогенерации Hi-Tech проигрывает.
Ну 18 — это уже "совершеннолетний"
. Это уже совсем другая песня.