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

 
 
> Кривизна 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, 13:12
Сообщение #2


Местный
***

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



Да, конечно же.
Вот си:
Код
#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;
}
Вот асм:
Код
---  C:\D\Projects\MB start\with PIC10F200\C\main.c  ---------------------------------------------
1:                 #include <htc.h>
2:                 #define _XTAL_FREQ 4000000
3:                 __CONFIG(WDT_OFF&CP_ON&MCLRE_OFF);
4:                 void main(void){
5:                     __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
6:                     GP1=1;
    0E     526     BSF 0x6, 0x1
7:                     TRIS=0b1101;
    0F     C0D     MOVLW 0xd
    10     006     TRIS 0x6
8:                     while(GP0==1){};
    11     A13     GOTO 0x13
    12     A13     GOTO 0x13
    13     606     BTFSC 0x6, 0
    14     A16     GOTO 0x16
    15     A17     GOTO 0x17
    16     A13     GOTO 0x13
    17     A18     GOTO 0x18
9:                     __delay_ms(4000);
    18     C15     MOVLW 0x15
    19     032     MOVWF 0x12
    1A     C4B     MOVLW 0x4b
    1B     031     MOVWF 0x11
    1C     CD1     MOVLW 0xd1
    1D     030     MOVWF 0x10
    1E     2F0     DECFSZ 0x10, F
    1F     A1E     GOTO 0x1e
    20     2F1     DECFSZ 0x11, F
    21     A1E     GOTO 0x1e
    22     2F2     DECFSZ 0x12, F
    23     A1E     GOTO 0x1e
    24     004     CLRWDT
10:                    GP1=0;
    25     426     BCF 0x6, 0x1
11:                    __delay_ms(300);
    26     C02     MOVLW 0x2
    27     032     MOVWF 0x12
    28     C86     MOVLW 0x86
    29     031     MOVWF 0x11
    2A     C99     MOVLW 0x99
    2B     030     MOVWF 0x10
    2C     2F0     DECFSZ 0x10, F
    2D     A2C     GOTO 0x2c
    2E     2F1     DECFSZ 0x11, F
    2F     A2C     GOTO 0x2c
    30     2F2     DECFSZ 0x12, F
    31     A2C     GOTO 0x2c
12:                    GP1=1;
    32     526     BSF 0x6, 0x1
13:                }
    33     A02     GOTO 0x2
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
- - 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 Текстовая версия Сейчас: 4th July 2025 - 07:09
Рейтинг@Mail.ru


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