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

 
 
> Кривизна 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
Ответов
ViKo
сообщение Sep 12 2011, 21:22
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Тот же код, MPLAB 8.76, Hi-Tech 9.82.
Код
12:                #include <htc.h>
13:                #define _XTAL_FREQ 4000000
14:                __CONFIG(WDT_OFF & CP_ON & MCLRE_OFF);
15:                
16:                void main(void){
17:                    __delay_ms(50);
    05     C41     MOVLW 0x41
    06     031     MOVWF 0x11
    07     CEE     MOVLW 0xee
    08     030     MOVWF 0x10
    09     2F0     DECFSZ 0x10, F
    0A     A09     GOTO 0x9
    0B     2F1     DECFSZ 0x11, F
    0C     A09     GOTO 0x9
    0D     004     CLRWDT
18:                    GP1=1;
    0F     526     BSF 0x6, 0x1
19:                    TRIS=0b1101;
    0E     C0D     MOVLW 0xd
    10     006     TRIS 0x6
20:                    while(GP0==1){};
    11     606     BTFSC 0x6, 0
    12     A11     GOTO 0x11
21:                    __delay_ms(4000);
    13     C15     MOVLW 0x15
    14     032     MOVWF 0x12
    15     C4B     MOVLW 0x4b
    16     031     MOVWF 0x11
    17     CD1     MOVLW 0xd1
    18     030     MOVWF 0x10
    19     2F0     DECFSZ 0x10, F
    1A     A19     GOTO 0x19
    1B     2F1     DECFSZ 0x11, F
    1C     A19     GOTO 0x19
    1D     2F2     DECFSZ 0x12, F
    1E     A19     GOTO 0x19
    1F     004     CLRWDT
22:                    GP1=0;
    21     426     BCF 0x6, 0x1
23:                    __delay_ms(300);
    20     C02     MOVLW 0x2
    22     032     MOVWF 0x12
    23     C86     MOVLW 0x86
    24     031     MOVWF 0x11
    25     C99     MOVLW 0x99
    26     030     MOVWF 0x10
    27     2F0     DECFSZ 0x10, F
    28     A27     GOTO 0x27
    29     2F1     DECFSZ 0x11, F
    2A     A27     GOTO 0x27
    2B     2F2     DECFSZ 0x12, F
    2C     A27     GOTO 0x27
24:                    GP1=1;
    2D     526     BSF 0x6, 0x1
25:                }
    2E     A02     GOTO 0x2

Ответ - в настройках. У топикстартера явно не используется PRO режим компилятора.
Насчет ассемблерного представления, еще один вариант View -> Program Memory.
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   Я не тягаюсь, Вы что =) Просто непонятно, где тут ...   Sep 12 2011, 09:02
|- - Ruslan1   Цитата(kt368 @ Sep 12 2011, 12:02) Я не т...   Sep 12 2011, 10:20
- - 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
- - 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 Текстовая версия Сейчас: 22nd July 2025 - 18:00
Рейтинг@Mail.ru


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