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

 
 
> Кривизна HI-TECH C
kt368
сообщение Sep 12 2011, 04:35
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 454
Регистрация: 13-10-10
Из: Киев
Пользователь №: 60 135



Здравствуйте!
Пытался скомпилировать простенькую програмку на С для ПИК10, вот её листинг:
Код
#include <htc.h>
#define _XTAL_FREQ 4000000
__CONFIG(WDT_OFF&CP_ON&MCLRE_OFF);
void main(void){
    __delay_ms(50);
    GP1=1;
    TRIS=0b1101;
    while(GP0=1){}
    __delay_ms(4000);
    GP1=0;
    __delay_ms(300);
    GP1=1;
}

После компиляции просмотрел дизассембилованый листинг и не понял зачем копилятор проверку while(GP0=1){} заменил на 8 строчек кода:
Код
    11     A13     GOTO 0x13
    12     A13     GOTO 0x13
    13     506     BSF 0x6, 0
    14     606     BTFSC 0x6, 0
    15     A17     GOTO 0x17
    16     A18     GOTO 0x18
    17     A13     GOTO 0x13
    18     A19     GOTO 0x19
Хотя по моему пониманию можно было обойтись двумя
Код
    11     606     BTFSC 0x6, 0
    12     A11     GOTO 0x11
И зачем он в коде делает операцию BSF 0x6, 0 ?
И заодно можно ли в MPLAB'е удобно вытянуть дизассемблированый листинг (не так как я привёл выше, а чисто ассемблер без обозначений номера
строки и кода)? Чтоб мои предположения быстренько на асме проверить.
Заранее спасибо за комментарии и ответы.

Сообщение отредактировал kt368 - Sep 12 2011, 04:50
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kt368
сообщение Sep 12 2011, 09:02
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 454
Регистрация: 13-10-10
Из: Киев
Пользователь №: 60 135



Я не тягаюсь, Вы что =)
Просто непонятно, где тут идеальность? Почему нельзя было просто сделать как я написал в первом сообщении:
Код
    11     606     BTFSC 0x6, 0
    12     A11     GOTO 0x11
Это ж две строчки выходят, и, как я понимаю, они полностью соответствуют
Код
while(GP0==1){}
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Sep 12 2011, 10:20
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(kt368 @ Sep 12 2011, 12:02) *
Я не тягаюсь, Вы что =)
Просто непонятно, где тут идеальность? Почему нельзя было просто сделать как я написал в первом сообщении:
Код
    11     606     BTFSC 0x6, 0
    12     A11     GOTO 0x11
Это ж две строчки выходят, и, как я понимаю, они полностью соответствуют
Код
while(GP0==1){}

нет, они полностью соответствуют
Код
while(GP0==1){};

или
Код
while(GP0==1);

Найдите разницу.

На будущее, если вы склонны делать ошибки типа "=" вместо "==" и не обращать внимание на варнинги, лучше в операторах сравнения слева пишите константу а справа переменную, тогда компилятор сразу покажет плохое место. то есть
Код
while(1==GP0){};

Общее замечание: каждый возникший при компиляции варнинг должен быть рассмотрен и по возможности исправлен. Часто встречал случаи, когда неправильно работающая программа после "работы над варнингами" начинала работать так как хотелось автору этой программы, и компилятор тут не виноват.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- kt368   Кривизна HI-TECH C   Sep 12 2011, 04:35
- - Allregia   Цитатаи не понял зачем копилятор проверку while(GP...   Sep 12 2011, 05:24
- - kt368   А как включить оптимизацию?   Sep 12 2011, 05:27
|- - volodya   Цитата(kt368 @ Sep 12 2011, 08:27) А как ...   Sep 12 2011, 06:13
- - DpInRock   Цитатаwhile(GP0=1) Это вовсе не проверка. И компил...   Sep 12 2011, 06:21
- - kt368   Точно! Блин, перепутал! Спасибо большое...   Sep 12 2011, 07:18
- - DpInRock   Код просто идеальный. Идеальнее не придумаешь. В...   Sep 12 2011, 08:58
- - kt368   Не понял про Кодwhile(GP0==1); и Кодwhile...   Sep 12 2011, 12:05
|- - Ruslan1   Цитата(kt368 @ Sep 12 2011, 15:05) Не пон...   Sep 12 2011, 13:06
|- - xemul   Цитата(kt368 @ Sep 12 2011, 16:05) Разжуй...   Sep 12 2011, 13:19
- - kt368   Да, конечно же. Вот си: Код#include <htc.h...   Sep 12 2011, 13:12
- - ViKo   Тот же код, MPLAB 8.76, Hi-Tech 9.82. Код12: ...   Sep 12 2011, 21:22
- - kt368   Что-то не получается включить 45-day evaluation HI...   Sep 13 2011, 07:21
|- - ViKo   Цитата(kt368 @ Sep 13 2011, 10:21) Что-то...   Sep 13 2011, 09:26
|- - Allregia   Цитата(kt368 @ Sep 13 2011, 09:21) Что-то...   Sep 13 2011, 13:32
||- - ViKo   Цитата(Allregia @ Sep 13 2011, 16:32) Не ...   Sep 13 2011, 18:11
|- - volodya   По поводу глюков - в любом компиляторе можно найти...   Sep 14 2011, 05:25
- - kt368   Хм...а приведите, пожалуйста принтскрин окно, в ко...   Sep 13 2011, 12:12


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

 


RSS Текстовая версия Сейчас: 30th June 2025 - 20:06
Рейтинг@Mail.ru


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