реклама на сайте
подробности

 
 
> Как бороться с внезапной ассемблерной вставкой?
Apik
сообщение Jan 8 2012, 16:35
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 30-04-10
Пользователь №: 56 995



Есть программа, написанная на Си, рабочая.
Для отладки программы использовал 16х2-дисплей. Т.к. программа написана, необходимо убрать этот дисплей.
Чтобы это можно было сделать быстро, везде, где он используется, писал так:

Код
if (LCD_YES)
{
   lcd_puts("Не важно что")
}


и в самом начале листинга соотвественно

Код
define LCD_YES   1


где можно быстро включать-выключать дисплей.

Суть вот в чем - ни разу я его не отключал (да и зачем было?), программа написана, пришло время поставить вместо единицы нолик, что и было сделано. И тут программа перестала работать.


Код
int main(void)
{
   Init();                  // инициализация портов, таймеров и др.
   RecipientComplete = 0;      // обнуляем флаг приемки данных
   PORTC &= ~(1<<SIM900D_ON);      // Включаем SIM900D - сажаем на "0" выход для открытия транзистора
   PORTC |= (1<<PWR_KEY);
   PORTC &= ~(1<<PWR_KEY);
   while(1)
   {
      nop();
      if (RecipientComplete == 1)               // Если пришла посылка от SIM900D
      {
         ReceiveAnalysis(rx_buffer);            // Анализируем
      }
      nop();
   }
}


Шерстя по ассемблерному коду, увидел, что перед while(1) появился такой код:

Код
945:         PORTC &= ~(1<<PWR_KEY);
+0000059C:   98AF        CBI       0x15,7         Clear bit in I/O register
952:            nop();
+0000059D:   0000        NOP                      No operation
953:            nop();
+0000059E:   0000        NOP                      No operation
958:            nop();
+0000059F:   0000        NOP                      No operation
+000005A0:   CFFC        RJMP      PC-0x0003      Relative jump
958:            nop();


самого while() нету, да собственно и не нужен, т.к. RJMP PC-0x0003 зацикливает программу на месте между nop'ами.

Почему такое происходит, и как от этого избавиться?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Apik   Как бороться с внезапной ассемблерной вставкой?   Jan 8 2012, 16:35
- - Палыч   Цитата(Apik @ Jan 8 2012, 20:35) Почему т...   Jan 8 2012, 16:47
- - Xenia   Компилятор совершенно прав! Он видит, что пере...   Jan 8 2012, 16:54
- - Apik   Гениально Всем спасибо, помогло.   Jan 8 2012, 18:06
- - sasamy   Цитата(Apik @ Jan 8 2012, 20:35) Есть про...   Jan 9 2012, 10:37
|- - Сергей Борщ   QUOTE (sasamy @ Jan 9 2012, 12:37) иначе ...   Jan 9 2012, 12:58
|- - sasamy   Цитата(Сергей Борщ @ Jan 9 2012, 16:58) Д...   Jan 9 2012, 14:28
|- - Сергей Борщ   QUOTE (sasamy @ Jan 9 2012, 16:28) А это ...   Jan 9 2012, 15:05
|- - sasamy   Цитата(Сергей Борщ @ Jan 9 2012, 19:05) Я...   Jan 9 2012, 15:14
|- - aaarrr   Цитата(sasamy @ Jan 9 2012, 19:14) а нето...   Jan 9 2012, 16:00
||- - sasamy   Цитата(aaarrr @ Jan 9 2012, 20:00) Угу, п...   Jan 9 2012, 17:14
||- - aaarrr   Цитата(sasamy @ Jan 9 2012, 21:14) На люб...   Jan 9 2012, 17:34
||- - neiver   Цитата(sasamy @ Jan 9 2012, 21:14) На люб...   Jan 9 2012, 18:00
||- - sasamy   Цитата(neiver @ Jan 9 2012, 22:00) Вариан...   Jan 9 2012, 18:46
|- - Сергей Борщ   QUOTE (sasamy @ Jan 9 2012, 17:14) Вообще...   Jan 9 2012, 16:30
- - aaarrr   Кстати, конструкция Кодif(something) {...}...   Jan 9 2012, 14:04


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 21:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01373 секунд с 7
ELECTRONIX ©2004-2016