[an error occurred while processing this directive]
ВСЕ! Сдаюсь. Помогите, плз. IAR C +AVR+ Pony. Глюк или ДНК?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
|
Отправлено
EV 13 декабря 2002 г. 23:30
|
|
|
|
Вот уже который час занимаюсь странным занятием.
Отлаживаю програмку в ИАР Ц, вроде бы 1,40 для атмела 2313.
Пишу Понипрогом.
Отладил все процедуры, прерывания, работу с IIC, RS485. Все в порядке.
Тестовая програмка, которая принимает байты с 485 линии, выводит их в ИИС порт, читает ответ ИИС, отвечает на RS485.
Все работает, да еще и прерывания обрабатывает аж 4 штуки.
Теперь написана рабочая программа, которая делает то же самое, но в соответствии с алгоритмом. процедурки старые , ессно.
НЕ РАБОТАЕТ.
Ладно, не в первой, начинаем смотреть, где застревает. Для этого есть два светодиода, подключенных через ключи к портам, в рабочей програмке туда подключены моторчики.
Светодиоды молчат.
Оставляю в main ТОЛЬКО:
#define motor_on PORTD|=0x40
#define motor_off PORTD&=0xbf
//PD 6 Pin 11
#define revers_on PORTB|=0x04
#define revers_off PORTB&=0xfb
//PB2 pin14
main(void) {
DDRB = 0x04;
DDRD = 0x40;
while(1)
{
PORTD|=0x40; // Motor_on;
PORTB|=0x04; // Revers_on;
motor_off; //
revers_off;
}; //while
}
Не работает!
Отключение прерываний, убирание лишних переменных не помогает.
Main начинает работать только после удаления всех подпрограмм.
В самом пухлом варианте код за габариты не выходит.
Что же это за глюк такой???
Составить ответ
|||
Конференция
|||
Архив
Ответы
- Было похоже заменил while(1) for(;;) — MWW (14.12.2002 08:20, пустое)
- Ура, заработало!!! Шучу, конечно. Перелопатил всю программу, в конечном счете ничего не изменил, но работает. По прежнему нифига не понимаю, Где же грабли? Кстати, как можно обезопаситься от переполнения стека ???? — EV (14.12.2002 20:40, пустое)
- Ответ: Так компилятор в листинге показывает сколько ему стека нужно (RSTACK и CSTACK). — Bill (15.12.2002 09:17, пустое)
- Он учитывает самый худший вариант? у меня 4 прерывания плюс максимально третий уровень вложенности обычных подпрограмм, это 7*2=14 байт, так чего он ругался на static переменные?? — EV (15.12.2002 10:24, пустое)
- Ответ: Судя по Вашему предыдущему сообщению тут дело в следующем. — Bill (15.12.2002 11:42, 1126 байт)
- Ответ: У меня подобная хрень, линкер никаких ошибок не пишет но прога виснет,что лечатся подбором CSTACK'a — PVV (15.12.2002 20:34, 420 байт)
- Мне пришлось переписать прерывания, чтобы из них не было вызовов, да и вообще уменьшить вложенность. Это, правда, не CSTACK, а RSTACK облегчился.(+) — EV (16.12.2002 00:55, 202 байт)
- Ответ: Не правильно все это... :-( Тогда проще на Асме сразу писать... — PVV (16.12.2002 07:00, 80 байт)
- ! ВО!!! точно. Я на сях не писал раньше, ассембелем пользовался., х86, С51. Так до сих пор и не доезжаю до многих вещей. Например, почему гланды удаляют через Ж, а не через специально пробитые отверстия. 200 байтная программа обслуживала ввод, обработку и отображение на дисплее Искры 1030 сигналов от4х каналов аппаратуры. А тут 2к ушло на опрос кнопок, + связь по RS485 и IIC. — EV (16.12.2002 20:59, пустое)
- Ответ: Я думаю, что компилятор увеличивает размер кода по сравнению с ассемблером процентов на 10. При условии, что — Bill (16.12.2002 08:04, 642 байт)
- Ответ: Не правильно все это... :-( Тогда проще на Асме сразу писать... — PVV (16.12.2002 06:59, пустое)
- Ответ: может не к месту, но... — outcast (14.12.2002 00:02, 47 байт)
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru