Пн ноя 07, 2016 22:01:00
Нет, хайтека не имеем. Уже давно. Перешёл на XC8.botchin писал(а):А если вас не затрудняет и имеете 9,71 - проиграйте.
Пн ноя 07, 2016 22:27:56
Пн ноя 07, 2016 22:35:58
#include <xc.h>
char *s1,*s2,*s3, ss [10];
void main(void){
s1 = ss ;
s2 = ss ;
s3 = ss ;
#asm
movlw _s3
#endasm
*s2=10;
*s3=10;
while(1);
}
1: #include <xc.h>
2:
3: char *s1,*s2,*s3, ss [10];
4:
5: void main(void){
07ED 3070 MOVLW 0x70
6: s1 = ss ;
7: s2 = ss ;
07EE 00FC MOVWF s2
8: s3 = ss ;
07EF 3070 MOVLW 0x70
07F0 00FA MOVWF s3
07F1 3000 MOVLW 0
07F2 00FB MOVWF 0x7b
9:
10: #asm
11: movlw _s3
07F3 307A MOVLW 0x7a
12: #endasm
13:
14: *s2=10;
07F4 087C MOVF s2, W
07F5 0086 MOVWF FSR1L
07F6 300A MOVLW 0xa
07F7 0187 CLRF FSR1H
07F8 0081 MOVWF INDF1
15: *s3=10;
07F9 087A MOVF s3, W
07FA 0086 MOVWF FSR1L
07FB 087B MOVF 0x7b, W
07FC 0087 MOVWF FSR1H
07FD 300A MOVLW 0xa
07FE 0081 MOVWF INDF1
16:
17: while(1);
07FF 2FFF GOTO 0x7ff
Пн ноя 07, 2016 22:38:43
Пн ноя 07, 2016 22:47:04
07EF 3070 MOVLW 0x70
07F0 00FA MOVWF s3
07F1 3000 MOVLW 0
07F2 00FB MOVWF 0x7b
Пн ноя 07, 2016 22:59:04
Вт ноя 15, 2016 10:26:54
Вт ноя 15, 2016 19:22:33
Пт ноя 18, 2016 08:15:35
Zhuk72 писал(а):хочется освоить структуры, юнионы. Как вы думаете, логично ли использовать их для ....
Пт ноя 18, 2016 09:40:03
КРАМ писал(а):То есть на самом деле имеет место быть лишь улучшение читабельности кода, а не получение неких новых его свойств.
Пт ноя 18, 2016 09:53:38
Пт ноя 18, 2016 10:48:20
Пт ноя 18, 2016 10:51:27
Пт ноя 18, 2016 11:42:13
ARV писал(а):а еще плюс структур и объединений в том, что при использовании качественных IDE требуется помнить меньше имен переменных, т.к. IDE подсказывает их.
Пт ноя 18, 2016 11:55:04
Пт ноя 18, 2016 12:21:33
если вас не прижмет реальность так сильно, что невозможно будет обойтись без НЕСТАНДАРТНЫХ типов для Си, - никогда их не используйте! bit - это нестандартный тип, в Си его не существует.Zhuk72 писал(а):структуры не поддерживают тип bit
Пт ноя 18, 2016 12:26:58
Аlex писал(а):Поле можно сделать любого размера, хоть 1 бит, хоть 5, хоть 25 ....
main.c:30: error: (192) undefined identifier "pos"
main.c:30: error: (196) struct/union required
struct {
unsigned lo : 1;
unsigned dummy : 6;
unsigned hi : 1;
} foo;
ARV писал(а):bit - это нестандартный тип, в Си его не существует.
Пт ноя 18, 2016 12:55:14
Zhuk72 писал(а):Стало быть и с пользовательскими объединениями так же будет? Надо заюзать, спасибо, хорошая наводка!
Zhuk72 писал(а):В хелпе на ХС8 написано, что структуры не поддерживают тип bit, возможно только использование битовых полей.
struct iS { int i : 1; } // sizeof(iS) == sizeof(int)
struct cS { char i : 1; } // sizeof(cS) == sizeof(char)
Zhuk72 писал(а):main.c:30: error: (192) undefined identifier "pos"
Zhuk72 писал(а):Я в курсе этого. Но тем не менее жить без них не могу
Пт ноя 18, 2016 13:00:37
Siarzhuk писал(а):bit - в печку. Про битовые поля имейте ввиду, что под структуру будет выделено целое число байт даже если задействован один бит
Siarzhuk писал(а):Ну и помните, что при оптимизации битовыми полями сегмента данных - страдает сегмент кода (читай производительность), за счёт большего количества операций по доступу к полям. Мало того - в зависимости от позиции битового поля в структуре - размер операций тоже может быть разным.
Пт ноя 18, 2016 13:01:54
это на самом деле так? не 1 байт?Siarzhuk писал(а):struct iS { int i : 1; } // sizeof(iS) == sizeof(int)
скорее всего он задействует для этой цели аппаратные фичи кристалла. про PIC не скажу, а в MCS51 есть особые области ОЗУ с побитовой адресацией, и соответствующие однобитовые команды ассемблера. так что и тут речь скорее всего об этом - линкер отдыхает.Siarzhuk писал(а):Кстати, компилятор склеивает глобальные переменные типа bit в несколько более заметные для линкера сущности. Т.е. обращение с ними несёт такие-же накладные расходы как и с битовыми полями.