|
как в winavr сделать так чтоб в прерывании вместо push/pop было st/ld, ... |
|
|
|
May 20 2008, 07:06
|
Участник

Группа: Участник
Сообщений: 44
Регистрация: 11-03-08
Пользователь №: 35 811

|
есть проблема с компилятором WinAVR-20071221 в прерываниях он ставит push/pop, в результате стека не хватает, хочу заменить на st/ld, кто знает как это зделать, перейти на iar нет возможности.
|
|
|
|
|
 |
Ответов
|
Aug 17 2008, 10:16
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Совершенно согласен defunct. с Я бы добавил ещё следующее. В IAR сумма стеков примерно будет равна с той же программе (С учётом эффективности компиляторов).
Таким образом нельзя говорить о вариантах реализации стека PUSH/STD, а можно говорить лишь о недостаточности памяти в целом. Либо о вашем непонимании. Вы поймите если переменная должна оказаться в стеке, то не имеет значения каким образом и в какой именно стек она будет положена! Главное, что она займёт место в памяти.
Другое дело - объявление переменных и параметров. Это может сказаться на эффективности и объёме занимаемой памяти. Например при увеличении числа параметров передаваемом в ф-цию, вероятнее всего у вас увеличится объём занимаемой памяти (стека). Если в рекурсивной ф-ции вы объявите локальную переменную, то она будет размещена на стеке, а если вы её объявите static, то будет создан лишь один экземпляр переменной в памяти (Правда надо осмыслить логику работы).
Я бы вообще попытался бы отказаться от рекурсии. Например в пользу бинарного перебора либо дерева. Очень неэффективна рекурсия в большенстве своём.
|
|
|
|
|
Aug 17 2008, 19:09
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(SasaVitebsk @ Aug 17 2008, 14:16)  Если в рекурсивной ф-ции вы объявите локальную переменную, то она будет размещена на стеке, а если вы её объявите static, то будет создан лишь один экземпляр переменной в памяти (Правда надо осмыслить логику работы). А чего осмысливать - рекурсивная функция должна быть реентерабельной, т.е. никаких static-ов в ней быть не должно.
|
|
|
|
Сообщений в этой теме
Kibi как в winavr сделать так чтоб в прерывании вместо push/pop было st/ld May 20 2008, 07:06 Kuzmi4 Цитата(Kibi @ May 20 2008, 10:06) есть пр... May 20 2008, 07:49 MrYuran Цитата(Kibi @ May 20 2008, 10:06) есть пр... May 20 2008, 08:03 singlskv Цитата(Kibi @ May 20 2008, 11:06) есть пр... May 20 2008, 08:08 Kibi Цитата(singlskv @ May 20 2008, 12:08) Пря... May 20 2008, 09:50  VladimirYU Цитата(Kibi @ May 20 2008, 13:50) когда с... May 20 2008, 10:01  defunct Цитата(Kibi @ May 20 2008, 12:50) когда с... May 20 2008, 10:04   Kibi Цитата(defunct @ May 20 2008, 14:04) Вы з... May 20 2008, 10:29    Непомнящий Евгений Цитата(Kibi @ May 20 2008, 14:29) нет, ло... May 20 2008, 10:47     Qwertty Цитата(Непомнящий Евгений @ May 20 2008, 14... May 20 2008, 10:54     Kibi Цитата(Непомнящий Евгений @ May 20 2008, 14... May 20 2008, 10:59      aesok Цитата(Kibi @ May 20 2008, 14:59) просьба... May 20 2008, 11:04      Qwertty Цитата(Kibi @ May 20 2008, 14:59) если ес... May 20 2008, 11:33       VladimirYU Цитата(Qwertty @ May 20 2008, 15:33) Реше... May 20 2008, 11:47        galjoen Мне кажется, что первопричина тут в том, что один ... May 20 2008, 12:04        Непомнящий Евгений Цитата(VladimirYU @ May 20 2008, 15:47) Р... May 20 2008, 12:12       aesok Цитата(Qwertty @ May 20 2008, 15:33) Цита... May 20 2008, 15:57    777777 Цитата(Kibi @ May 20 2008, 14:29) нет, ло... May 20 2008, 10:53    defunct Цитата(Kibi @ May 20 2008, 13:29) нет, ло... Aug 17 2008, 02:41 VladimirYU Все дело IMHO в разных способах организации стека.... May 20 2008, 11:25 Kibi Цитата(VladimirYU @ May 20 2008, 15:25) В... May 20 2008, 11:44  singlskv Цитата(Kibi @ May 20 2008, 15:44) думаю ч... May 20 2008, 18:37
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|