Нет, хайтека не имеем. Уже давно. Перешёл на XC8.botchin писал(а):А если вас не затрудняет и имеете 9,71 - проиграйте.
Програмирование pic на СИ.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Програмирование pic на СИ.
- Реклама
- botchin
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Чт дек 27, 2012 20:46:09
- Откуда: Болгария, г. Лом
Re: Програмирование pic на СИ.
Ну, я написал то, что наблюдал, делал и т.д. Уверяю вас, указатели могут иметь разнъе размеръ в HI-TECH 9-71a. И для меня ето бъло непонятно.
Если кто-то попробует - пусть напишет.
Если кто-то попробует - пусть напишет.
Лом - ето город в Болгарии, а не инструмент юстировки електроники.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Програмирование pic на СИ.
Попробовал XC8. Да, действительно 
Кот:
Дизасм :
Очевидно, что для s3 используется 2 байта под адрес.
Причём, если убрать АСМ-вставку - используется 1 байт
Добавлено after 5 minutes 18 seconds:
Шайтанамэ
Кот:
Код: Выделить всё
#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
Причём, если убрать АСМ-вставку - используется 1 байт
Добавлено after 5 minutes 18 seconds:
Шайтанамэ
- botchin
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Чт дек 27, 2012 20:46:09
- Откуда: Болгария, г. Лом
Re: Програмирование pic на СИ.
Я подумал, что хорошо будеть, если знаем об етой особености.
И как решают когда 1 байт и когда 2?
Да еще и не дали програмисту возможность указать каким бъть указателя!!!!
И как решают когда 1 байт и когда 2?
Да еще и не дали програмисту возможность указать каким бъть указателя!!!!
Лом - ето город в Болгарии, а не инструмент юстировки електроники.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Програмирование pic на СИ.
Меня вот ещё что смущает.
До этого момента, в аккумуляторе находится значение 0x70, зачем его ещё раз туда загонять ?
И для очистки 0x7B - две команды, вместо одной.
Вот тебе и PRO-оптимизация
Старый добрый хайтек STD-версий и то оптимизировал лучше.
Код: Выделить всё
07EF 3070 MOVLW 0x70
07F0 00FA MOVWF s3
07F1 3000 MOVLW 0
07F2 00FB MOVWF 0x7b
И для очистки 0x7B - две команды, вместо одной.
Вот тебе и PRO-оптимизация
Старый добрый хайтек STD-версий и то оптимизировал лучше.
- Реклама
- botchin
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Чт дек 27, 2012 20:46:09
- Откуда: Болгария, г. Лом
Re: Програмирование pic на СИ.
Ето "не PRO" програмер сделает одной командой, а "PRO" двумя.
Лично я видел одно умножение на 1,2 (НДС) расписанное на 22 (двадцать две) страниц кода. А програмер написавшии ето бъл хорошим програмером.
Лично я видел одно умножение на 1,2 (НДС) расписанное на 22 (двадцать две) страниц кода. А програмер написавшии ето бъл хорошим програмером.
Лом - ето город в Болгарии, а не инструмент юстировки електроники.
- Zhuk72
- Сверлит текстолит когтями
- Сообщения: 1231
- Зарегистрирован: Ср янв 29, 2014 08:41:31
- Откуда: Баку
- Контактная информация:
Re: Програмирование pic на СИ.
Доброго дня, коты!
Спаял я себе испытательный стенд на базе 18F14K50 в виде платы с МК, так называемым дисплеем от Nokia 3310 (который конечно же им не является), энкодер, фоторезистор и прочая мелочевка. В МК сидит загрузчик, соответственно прошивку гружу прямо с USB со смещением 0х1000. Все работает, дисплей рисуется, энкодер декодится, кнопки нажимаются.
Для чего мне это всё? Просто отработать некоторые навыки и получить алгоритмы, которые помогут и в дальнейшем послужить готовыми кусками, ну и в плане дальнейшего изучения Си.
Вот, например, хочется мне выводить на экран показания фоторезистора в какой-то определенной позиции, данные от ИК диода в другой и т.д. Графику умным образом порисовать. И хочется освоить структуры, юнионы. Как вы думаете, логично ли использовать их для задания знакоместа, координат, для индикации освещенности в виде прогресс-бара? Я пока только собираюсь это расписывать в виде кода и не хочется сразу попасть в тупиковую ветвь.
Спасибо!
Спаял я себе испытательный стенд на базе 18F14K50 в виде платы с МК, так называемым дисплеем от Nokia 3310 (который конечно же им не является), энкодер, фоторезистор и прочая мелочевка. В МК сидит загрузчик, соответственно прошивку гружу прямо с USB со смещением 0х1000. Все работает, дисплей рисуется, энкодер декодится, кнопки нажимаются.
Для чего мне это всё? Просто отработать некоторые навыки и получить алгоритмы, которые помогут и в дальнейшем послужить готовыми кусками, ну и в плане дальнейшего изучения Си.
Вот, например, хочется мне выводить на экран показания фоторезистора в какой-то определенной позиции, данные от ИК диода в другой и т.д. Графику умным образом порисовать. И хочется освоить структуры, юнионы. Как вы думаете, логично ли использовать их для задания знакоместа, координат, для индикации освещенности в виде прогресс-бара? Я пока только собираюсь это расписывать в виде кода и не хочется сразу попасть в тупиковую ветвь.
Спасибо!
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
-
Chettuser
Re: Програмирование pic на СИ.
Задача вывода на дисплей любой информации на самом деле универсальная в плане освоения, так что годится.
Я вот например встроенным отладчиком не пользуюсь, если подключен дисплей - всё что меня интересует вывожу на него.
Я вот например встроенным отладчиком не пользуюсь, если подключен дисплей - всё что меня интересует вывожу на него.
- КРАМ
- Друг Кота
- Сообщения: 25277
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Програмирование pic на СИ.
struct и union удобно использовать там, где имеются данные разных форматов, но относящихся к одному программному объекту и/или области памяти.Zhuk72 писал(а):хочется освоить структуры, юнионы. Как вы думаете, логично ли использовать их для ....
То есть на самом деле имеет место быть лишь улучшение читабельности кода, а не получение неких новых его свойств.
- Zhuk72
- Сверлит текстолит когтями
- Сообщения: 1231
- Зарегистрирован: Ср янв 29, 2014 08:41:31
- Откуда: Баку
- Контактная информация:
Re: Програмирование pic на СИ.
Именно это и интересует, т.к. расписать код длиной с портянку могу и без структур (что, собственно говоря, и делаю пока). Но хочется извращенной компактностиКРАМ писал(а):То есть на самом деле имеет место быть лишь улучшение читабельности кода, а не получение неких новых его свойств.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Програмирование pic на СИ.
Ещё, плюс объединений переменных в структуры - обработка в функциях. Можно передавать указатель, как аргумент, вместо кучи переменных.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Програмирование pic на СИ.
а еще плюс структур и объединений в том, что при использовании качественных IDE требуется помнить меньше имен переменных, т.к. IDE подсказывает их. например, если вы для своего проекта храните какие-то параметры в 10 переменных, вы сами должны помнить их имена, чтобы в нужных местах использовать. если же все они объединены в структуру, предположим, с названием config, то помнить вам надо только это имя, а поля структуры вам подскажет IDE сразу же после того, как введете точку (или стрелочку, если через указатель) после этого имени 
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Програмирование pic на СИ.
Ну да. Остаётся только поработать стрелочками и нажать энтер 
Лень - двигатель прогресса
Лень - двигатель прогресса
- Zhuk72
- Сверлит текстолит когтями
- Сообщения: 1231
- Зарегистрирован: Ср янв 29, 2014 08:41:31
- Откуда: Баку
- Контактная информация:
Re: Програмирование pic на СИ.
Кстати да, я заметил это, когда использовал STATUSbits, сразу после точки мплаб предлагает список.ARV писал(а):а еще плюс структур и объединений в том, что при использовании качественных IDE требуется помнить меньше имен переменных, т.к. IDE подсказывает их.
Стало быть и с пользовательскими объединениями так же будет? Надо заюзать, спасибо, хорошая наводка!
Добавлено after 8 minutes 50 seconds:
Попробовал, мне понравилось
Еще раз спасибо!
Добавлено after 27 minutes 21 second:
Однако поторопился я, не все так просто и радужно, т.к. компиляция не прошла.
В хелпе на ХС8 написано, что структуры не поддерживают тип bit, возможно только использование битовых полей. Углубляюсь в чтение.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Програмирование pic на СИ.
Поле можно сделать любого размера, хоть 1 бит, хоть 5, хоть 25 ....
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Програмирование pic на СИ.
если вас не прижмет реальность так сильно, что невозможно будет обойтись без НЕСТАНДАРТНЫХ типов для Си, - никогда их не используйте! bit - это нестандартный тип, в Си его не существует.Zhuk72 писал(а):структуры не поддерживают тип bit
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Zhuk72
- Сверлит текстолит когтями
- Сообщения: 1231
- Зарегистрирован: Ср янв 29, 2014 08:41:31
- Откуда: Баку
- Контактная информация:
Re: Програмирование pic на СИ.
Можно, но такое struct leds {unsigned char cnt, pause; bit flash;}; написание он не воспринимает. Говорит, что "taking sizeof bit is illegal".Аlex писал(а):Поле можно сделать любого размера, хоть 1 бит, хоть 5, хоть 25 ....
В другом проекте сейчас проверил struct pos {unsigned char x, y;}; у которого только байты.
На это объявление он смотрит благосклонно, а ругается на pos.x = 0 b pos.y = 0:
ХС8 в качестве примера приводит такое написание:main.c:30: error: (192) undefined identifier "pos"
main.c:30: error: (196) struct/union required
И в примечании указывает, что "Accessing bit-fields larger than a single bit can be very inefficient", что вполне логично.struct {
unsigned lo : 1;
unsigned dummy : 6;
unsigned hi : 1;
} foo;
Так что я наверное буду в таких структурах объявлять только битовые флаги.
Я в курсе этого. Но тем не менее жить без них не могуARV писал(а):bit - это нестандартный тип, в Си его не существует.
В Keil приходится обходится без него, но ХС8 с ним в ладах, потому и использую.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Re: Програмирование pic на СИ.
При прочих равных, union использовать кроме как для получения разных представлений для одних и тех-же данных я бы не рекомендовал. Проблема в неявности модификации - когда структуроподобные вызовы u.f1 = 1; и u.f2 = 2; выглядят как модификация разных полей, но на самом деле меняют одни и те-же данные. Если объёмы памяти позволяют - всему должно быть своё место. Даже если оригинальный автор и оптимизировал таким образом свою программу твёрдо зная что данные в union-е не пересекаются по времени - нет никакой гарантии, что в будущем тот-же автор не отрефакторит своё творение и данные пересекутся - подарив ему возможность провести "выходные в отладчике". А уж что и говорить за тех, кто будет рефакторить после него - уж они-то точно не преминут откопать эти грабли.Zhuk72 писал(а):Стало быть и с пользовательскими объединениями так же будет? Надо заюзать, спасибо, хорошая наводка!
bit - в печку. Про битовые поля имейте ввиду, что под структуру будет выделено целое число байт даже если задействован один бит:Zhuk72 писал(а):В хелпе на ХС8 написано, что структуры не поддерживают тип bit, возможно только использование битовых полей.
Код: Выделить всё
struct iS { int i : 1; } // sizeof(iS) == sizeof(int)
struct cS { char i : 1; } // sizeof(cS) == sizeof(char)
Добавлено after 9 minutes 26 seconds:
pos это не переменная, и даже не тип (в С) - а именно что НеизвестнАЯ ИдентификАтыръ.Zhuk72 писал(а):main.c:30: error: (192) undefined identifier "pos"
Кстати, компилятор склеивает глобальные переменные типа bit в несколько более заметные для линкера сущности. Т.е. обращение с ними несёт такие-же накладные расходы как и с битовыми полями.Zhuk72 писал(а):Я в курсе этого. Но тем не менее жить без них не могу
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 
- Zhuk72
- Сверлит текстолит когтями
- Сообщения: 1231
- Зарегистрирован: Ср янв 29, 2014 08:41:31
- Откуда: Баку
- Контактная информация:
Re: Програмирование pic на СИ.
Это я знаю. В принципе если я объявляю bit start1, stop2, wait254, imho323; то в итоге компилятор размещает их в одном байте. Идея объединить их в структур только для того, чтобы помочь склерозу, т.к. иной раз приходится лезть в объявления, чтобы вспомнить имя переменной.Siarzhuk писал(а):bit - в печку. Про битовые поля имейте ввиду, что под структуру будет выделено целое число байт даже если задействован один бит
Ну об этом я писал, вернее цитировал, выше. Но это в случае большего, чем 1, размера поля.Siarzhuk писал(а): Ну и помните, что при оптимизации битовыми полями сегмента данных - страдает сегмент кода (читай производительность), за счёт большего количества операций по доступу к полям. Мало того - в зависимости от позиции битового поля в структуре - размер операций тоже может быть разным.
В случае однобитого поля код скомпилируется в обычные bsf/bcf и btfss/btfsc.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Програмирование pic на СИ.
это на самом деле так? не 1 байт?Siarzhuk писал(а):struct iS { int i : 1; } // sizeof(iS) == sizeof(int)
скорее всего он задействует для этой цели аппаратные фичи кристалла. про PIC не скажу, а в MCS51 есть особые области ОЗУ с побитовой адресацией, и соответствующие однобитовые команды ассемблера. так что и тут речь скорее всего об этом - линкер отдыхает.Siarzhuk писал(а):Кстати, компилятор склеивает глобальные переменные типа bit в несколько более заметные для линкера сущности. Т.е. обращение с ними несёт такие-же накладные расходы как и с битовыми полями.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


