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

 
 
> Компилятор С for PIC
phantom
сообщение Dec 14 2007, 10:39
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 13-05-05
Пользователь №: 4 986



Подскажите плиз, какой нынче С-компилятор для PIC-ов "в моде" и где его найти-ть. Давно уже с PIC-ами не работал, все как-то на АВР-ках. Помню раньше MPLAB был,но там с С не сложилось в свободной версии.. Заранее спасибо! tort.gif


--------------------
О сколько нам открытий чудных ...
Go to the top of the page
 
+Quote Post
5 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 61)
Сергей Борщ
сообщение Dec 14 2007, 10:55
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



sdcc можно глянуть. Слегка глючный, но бесплатный.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
phantom
сообщение Dec 14 2007, 11:52
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 13-05-05
Пользователь №: 4 986



А MPLAB полный случаем нигде не пробегал?


--------------------
О сколько нам открытий чудных ...
Go to the top of the page
 
+Quote Post
vanner
сообщение Dec 14 2007, 13:02
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 23-10-05
Пользователь №: 10 016



MPLAB - полнее не бывает smile.gif. Сейчас с ней поставляется lite версия комплятора Hi-Tech. Правда что в нем поддерживается не знаю. Все си-компиляторы к нему прикручиваются отдельно.
Для PIC18 и PIC24 можно использовать студенческие версии компиляторов Microchip С18 и С30 соответственно. От полной отличаются отключением оптимизации по истечению триала.
Go to the top of the page
 
+Quote Post
Alex B._
сообщение Dec 14 2007, 13:10
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 943
Регистрация: 6-07-04
Из: Санкт-Петербург
Пользователь №: 274



MPLAB - он вообще по жизни бесплатный.
Под какое семейство-то компилер нужен?
PIC16 - альтернативы Hi-Tech-у нет, есть на местном фтп в папке у Иваныча.
PIC18 - в общем-то тоже хай-тек рулит, хотя есть люди, успешно пользующиеся родным MCC18 - если нужен программный стек и реентерабельность (хай тек этого не умеет)
PIC24/dsPIC - только родный C30, без вариантов.
PIC32 - родной C32, GreenHills-а пока в сети нет

Как вариант под PIC16 и PIC18 - CCS (не путать с тексасовской средой =) - на фтп есть
http://www.ccsinfo.com/

SDCC - кроме того что он бесплатный ничего про него хорошего не слышал =)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 14 2007, 13:50
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Alex B._ @ Dec 14 2007, 15:10) *
SDCC - кроме того что он бесплатный ничего про него хорошего не слышал =)
Сравнивал с MCC18. Препроцессор MCC18 не смог правильно обработать макросы, за что и был забракован.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
volodya
сообщение Dec 17 2007, 06:08
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 194
Регистрация: 14-02-07
Из: УКРАИНА
Пользователь №: 25 344



Цитата(Сергей Борщ @ Dec 14 2007, 15:50) *
Сравнивал с MCC18. Препроцессор MCC18 не смог правильно обработать макросы, за что и был забракован.

Нормально работают макросы, препроц. великолепно все отрабатывает. Работал достаточно долго. Даже подумываю купить "честную" лицензию у МЕЛКОЧИПА biggrin.gif .


--------------------
"Для того чтобы избежать критики, надо ничего не делать, ничего не говорить и никем не быть"
"Каждый из нас бывает дураком по крайней мере пять минут в день; мудрость заключается в том, чтобы не превысить лимит." Элберт Хаббард
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 17 2007, 11:18
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(volodya @ Dec 17 2007, 08:08) *
Нормально работают макросы,
Код
#define  LED    A, 1, H
#define _setH(port,bit)         LAT##port |= (1 << bit)
#define _clrH(port,bit)         LAT##port &= ~(1 << bit)
#define _set(port,bit,val)      _set##val(port,bit)
#define on(x)                   _set (x)
#define _clr(port,bit,val)      _clr##val(port,bit)
#define off(x)                  _clr (x)

void Test()
{
   on(LED);
   off(LED);
}
Не компилится. Путается в количестве аргументов.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
phantom
сообщение Dec 17 2007, 12:25
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 13-05-05
Пользователь №: 4 986



Надо под PIC16 - PIC18. Посмотрел на ФТП там в разделе PUB\MCs\_PIC_ в каталогах - пусто (HI-Tech..) это что за штучки? Я вообще Тotal Commander-om смотрю...


--------------------
О сколько нам открытий чудных ...
Go to the top of the page
 
+Quote Post
DL36
сообщение Dec 17 2007, 14:01
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006



Цитата(phantom @ Dec 17 2007, 16:25) *
Надо под PIC16 - PIC18. Посмотрел на ФТП там в разделе PUB\MCs\_PIC_ в каталогах - пусто (HI-Tech..) это что за штучки? Я вообще Тotal Commander-om смотрю...

Иваныча смотри
Go to the top of the page
 
+Quote Post
volodya
сообщение Dec 18 2007, 07:16
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 194
Регистрация: 14-02-07
Из: УКРАИНА
Пользователь №: 25 344



Цитата(Сергей Борщ @ Dec 17 2007, 13:18) *
void Test()
{
on(LED);
off(LED);
}[/code]Не компилится. Путается в количестве аргументов.


Действительно! К сожалению для МСС Вы правы!
Сам таких вложений не использовал. = Особенности системы. 07.gif

Сообщение отредактировал volodya - Dec 18 2007, 07:20


--------------------
"Для того чтобы избежать критики, надо ничего не делать, ничего не говорить и никем не быть"
"Каждый из нас бывает дураком по крайней мере пять минут в день; мудрость заключается в том, чтобы не превысить лимит." Элберт Хаббард
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 18 2007, 14:25
Сообщение #12


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(volodya @ Dec 18 2007, 09:16) *
Действительно!
Сам таких вложений не использовал.
А у меня это основной макрос доступа к портам. Поэтому более глубоко MCC тестировать не стал, хотя по описанию он действительно мощный.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
oran-be
сообщение Dec 19 2007, 11:58
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 30-03-07
Из: Одесса
Пользователь №: 26 621



Цитата(Alex B._ @ Dec 14 2007, 17:10) *
MPLAB - он вообще по жизни бесплатный.
Под какое семейство-то компилер нужен?
PIC16 - альтернативы Hi-Tech-у нет, есть на местном фтп в папке у Иваныча.
PIC18 - в общем-то тоже хай-тек рулит, хотя есть люди, успешно пользующиеся родным MCC18 - если нужен программный стек и реентерабельность (хай тек этого не умеет)
PIC24/dsPIC - только родный C30, без вариантов.
PIC32 - родной C32, GreenHills-а пока в сети нет

Как вариант под PIC16 и PIC18 - CCS (не путать с тексасовской средой =) - на фтп есть
http://www.ccsinfo.com/

SDCC - кроме того что он бесплатный ничего про него хорошего не слышал =)

А ИАР для дсПИКов? Такой ацтой, что и упоминать не стоит? Кто нить пробовал?
Go to the top of the page
 
+Quote Post
Alex B._
сообщение Dec 20 2007, 11:25
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 943
Регистрация: 6-07-04
Из: Санкт-Петербург
Пользователь №: 274



Цитата(Сергей Борщ @ Dec 18 2007, 17:25) *
А у меня это основной макрос доступа к портам. Поэтому более глубоко MCC тестировать не стал, хотя по описанию он действительно мощный.

Обертка функций в макросы вообще нехорошо с микрочипом. Просто потому, что и симулятор и дебаггер MPLAB не умеют в них входить (то же относится к инлайновым функциям) - несмотря на компилер.

Цитата
А ИАР для дсПИКов? Такой ацтой, что и упоминать не стоит? Кто нить пробовал?

Просто забыл. Вполне хороший и быстрый код. До кучи EC++, чего ни один другой компилер для микрочипа пока не имеет. НО! Без плагина к MPLAB-у использовать IAR нет смысла, потому как с железными отладчиками его среда не работатет, да и симулятор там откровенно поганый. А плагин есть только к старой версии IAR (1.20), которая знает только о старых контроллерах. Нового плагина к 1.30 я не нашел, поэтому =(((
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 20 2007, 13:28
Сообщение #15


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Alex B._ @ Dec 20 2007, 13:25) *
Обертка функций в макросы вообще нехорошо с микрочипом. Просто потому, что и симулятор и дебаггер MPLAB не умеют в них входить
Возможно. У меня дебаггера нет. А объявить ногу в одном месте, и потом при необходимости в одном месте ее изменить - это гораздо удобнее и ошибкоустойчивее, чем во всем исходнике явно указывать порт и ногу.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
evc
сообщение Dec 20 2007, 14:50
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 17-03-07
Из: Москва
Пользователь №: 26 266



Цитата(Сергей Борщ @ Dec 20 2007, 16:28) *
...объявить ногу в одном месте, и потом при необходимости в одном месте ее изменить - это гораздо удобнее и ошибкоустойчивее, чем во всем исходнике явно указывать порт и ногу.


тогда в *.h файле просто запишите (MCC30):

Код
#define MyPin PORTB4 // (например)


и потом везде где вам нужно обращаться к PORTB4, будете писать MyPin. Если нужно изменить, будете менять только в хедере.


--------------------
УЭР
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 20 2007, 15:31
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(evc @ Dec 20 2007, 16:50) *
Код
#define MyPin PORTB4 // (например)
Заманчиво, не знал.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Alex B._
сообщение Dec 20 2007, 18:20
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 943
Регистрация: 6-07-04
Из: Санкт-Петербург
Пользователь №: 274



Цитата(Сергей Борщ @ Dec 20 2007, 18:31) *
Заманчиво, не знал.

это шутка?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 20 2007, 19:11
Сообщение #19


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Alex B._ @ Dec 20 2007, 20:20) *
это шутка?
Нет, просто не обратил внимания, что он умеет работать с битовыми переменными и что ноги портов объявлены как битовые переменные. Поскольку я пользуюсь компиляторами, в которых нет такого расширения, и часто приходится таскать код между разными платформами - привык пользоваться стандартными конструкциями типа port |= (1 << bit); В случае с битовыми переменными-выводами портов переносимости можно добиться, обернув их в макросы #define on(pin) pin = 1. Возьму на заметку. Но МСС18 использовать все равно не буду - этот проект уже закончен в SDCC, а новых на пиках, надеюсь, не будет. А если и будут - SDCC уже освоен и к эклипсе прикручен.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Baser
сообщение Dec 20 2007, 20:06
Сообщение #20


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(Сергей Борщ @ Dec 20 2007, 17:31) *
Заманчиво, не знал.

Встроенные макросы для прямого побитного объявления портов и других SFR-ов есть и в компиляторах HTPICC, HTPIC18 для ПИКов. Пример:
Код
#define pin_PFail       RB5
#define pin_1w_in       RE2
#define pin_1w_out      RA5

И в ИАРовских компиляторах, в частности IAR AVR 4.21. Пример:
Код
#define poGreenLED      PORTB_Bit6
#define poRedLED        PORTB_Bit7

Вот цитата из файла iom128.h:
Код
/* Examples of how to use the expanded result:
* TCCR2 |= (1<<5);
* or if ENABLE_BIT_DEFINITIONS is defined  
* TCCR2 |= (1<<COM21);
* or like this:
* TCCR2_Bit5 = 1;
* or like this:
* TCCR2_COM21 = 1;
*/
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 20 2007, 20:20
Сообщение #21


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Baser @ Dec 20 2007, 22:06) *
И в ИАРовских компиляторах, в частности IAR AVR 4.21.
Да, вспомнил, что мне не понравилось в таком подходе - объявив таким образом конкретный пин, я могу с ним делать только два действия - on и off. А через свои чудо-макросы - on, off, читать, менять направление, читать направление и прочее. При использовании битовых полей универсальности не получается - невозможно будет сделать if(signal(SCLK)) { dir_out(SCLK); off(SCLK); } if(dir(SCLK) { on(SCLK); dir_in(SCLK); } - придется отдельно объявлять SCLK_PIN, SCLK_DIR, SCLK_OUT. В общем: если макросы дают больше удобств - зачем от них отказываться?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Baser
сообщение Dec 21 2007, 11:53
Сообщение #22


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(Сергей Борщ @ Dec 20 2007, 22:20) *
...

Да, к слову, нет ли под рукой ссылочки, где описывается макропроцессор с применением двойных ##.
Сложные макросы никогда не применял и до сих пор не понимаю значения ## smile.gif , хотя они широко применяются в хидерах компиляторов.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 21 2007, 12:58
Сообщение #23


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Baser @ Dec 21 2007, 13:53) *
Да, к слову, нет ли под рукой ссылочки, где описывается макропроцессор с применением двойных ##.
Гугля дает много ссылок по запросу "c preprocessor". Я обычно пользуюсь вот этой, разделы 3.4, 3.5


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Baser
сообщение Dec 21 2007, 13:59
Сообщение #24


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(Сергей Борщ @ Dec 21 2007, 14:58) *
Гугля дает много ссылок по запросу "c preprocessor". Я обычно пользуюсь вот этой, разделы 3.4, 3.5

Спасибо, теперь буду знать умные слова stringification (#) и token pasting or token concatenation (##).
Раньше мне везде попадалось только описание Traditional macros, ISO макросы всеми замалчивались smile.gif
Go to the top of the page
 
+Quote Post
evc
сообщение Dec 21 2007, 15:50
Сообщение #25


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 17-03-07
Из: Москва
Пользователь №: 26 266



Цитата(Сергей Борщ @ Dec 20 2007, 22:11) *
Нет, просто не обратил внимания, что он умеет работать с битовыми переменными и что ноги портов объявлены как битовые переменные...


Знаете, это не совсем так... Это особенность адресации в майкрочиповских контроллерах - у них каждый пин (вообще бит SFR) имеет свой адрес, как регистр (напр. адрес PORTB4 = @PORTB + 4). Вот поэтому, объявляя "#define MyPin PORTB4", указываете препроцессору, что значение этикетки MyPin будет равно адресу пина PORTB4. Это все равно записать

Код
          unsigned char* MyPin;
          MyPin = @PORTB4;// = @PORTB + 4

(только это уже будет переменная в памяти процессора)

Пользуясь подобными выражениями (#define ...), можете не только выставлять или обнулять данного пина, но и читать его состояние. Направление пина не можете менять, поскольку в ПИК-е этим обязан совсем другой регистр (TRIS).


--------------------
УЭР
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 21 2007, 17:25
Сообщение #26


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(evc @ Dec 21 2007, 17:50) *
Это особенность адресации в майкрочиповских контроллерах - у них каждый пин (вообще бит SFR) имеет свой адрес,
Это что-то новенькое. С х51 не путаете?

А существо вопроса в том, что в макросе я указываю не конкретный регистр (PORTx, TRISx, LATx), а имя порта (A, B, C) и уже внутри макроса из него получается имя нужного регистра в зависимости от необходимого действия. При использовании битовых полей такое невозможно.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
evc
сообщение Dec 21 2007, 20:40
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 17-03-07
Из: Москва
Пользователь №: 26 266



Цитата(Сергей Борщ @ Dec 21 2007, 20:25) *
Это что-то новенькое. С х51 не путаете?...


Нет не новенькое (наверно я не очень, так, объяснил). У х51 немножко по-другому. У них регистр направления порта нет. Что бы настроит на вход нужно просто на порт выставить 1. В ПИК-ах есть регистр направления - именно TRIS (конечно, это вам хорошо известно). Дело в том, что вы о макросах говорите, а та конструкция, о которой я - обыкновенная директива препроцессора. Объявление константы "MyPin" со значением "адрес PORTB4".
Мне, в принципе, макросы не нравятся, потому что они съедают програмную память. Но это стоит учитывать только на маленьких процессорах. Зато код выполняется (если пользуетесь макросами) быстрее.


--------------------
УЭР
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 21 2007, 21:52
Сообщение #28


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(evc @ Dec 21 2007, 22:40) *
Нет не новенькое (наверно я не очень, так, объяснил). У х51 немножко по-другому. У них регистр направления порта нет.
Это-то понятно. С каких пор у ПИКов каждый бит порта имеет свой адрес?
Цитата(evc @ Dec 21 2007, 22:40) *
Мне, в принципе, макросы не нравятся, потому что они съедают програмную память.
Тоже чудеса рассказываете. Используемый мной (приведенный выше) макрос on(LED) преобразуется препроцессором(!) в С-выражение LATx |= ( 1<< bit), что, в свою очередь, компилируется в команду BSF LATx, bit. Где съедание памяти?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Alex B._
сообщение Dec 21 2007, 22:21
Сообщение #29


Знающий
****

Группа: Свой
Сообщений: 943
Регистрация: 6-07-04
Из: Санкт-Петербург
Пользователь №: 274



Цитата(Сергей Борщ @ Dec 22 2007, 00:52) *
Это-то понятно. С каких пор у ПИКов каждый бит порта имеет свой адрес?
Тоже чудеса рассказываете. Используемый мной (приведенный выше) макрос on(LED) преобразуется препроцессором(!) в С-выражение LATx |= ( 1<< bit), что, в свою очередь, компилируется в команду BSF LATx, bit. Где съедание памяти?

чего-то он путает конечно =) Все там как обычно
Но макросы все равно зло в любом виде, хоть микрочип, хоть не микрочип. Тогда уж лучше инлайновые функции - компилер хотя бы тело функции сформирует если она явно по указателю будет вызвана
Go to the top of the page
 
+Quote Post
Baser
сообщение Dec 21 2007, 22:47
Сообщение #30


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(evc @ Dec 21 2007, 17:50) *
Это особенность адресации в майкрочиповских контроллерах - у них каждый пин (вообще бит SFR) имеет свой адрес, как регистр (напр. адрес PORTB4 = @PORTB + 4). Вот поэтому, объявляя "#define MyPin PORTB4", указываете препроцессору, что значение этикетки MyPin будет равно адресу пина PORTB4

Ну, если так рассуждать, то любой бит регистрового файла в пределах одной страницы у ПИК-ов имеет уникальный адрес, состоящий из адресов байта+бита. Это поддерживается на уровне системы команд. Побитовая адресация части SFR-ов на уровне системы команд есть и у AVR и у MCS51 семейства.

Но на самом деле адрес регистра и адрес бита находятся в разных адресных пространствах и мешать их нельзя. В ANSI С нет операций с отдельными битами, поэтому разработчики компиляторов изголяются кто как может. Приведенный вами пример с PORTB4 это уже фича компилятора. Например, вот выдержка из мануала на HTPICC:
Цитата
PICC supports bit integral types which can hold the values 0 or 1. The bit variable facility may be combined with absolute variable declarations (see page 153) to access bits at specific addresses. Absolute bit objects are numbered from 0 (the least significant bit of the first byte) up. Therefore, bit number 3 (the fourth bit in the byte since numbering starts with 0) in byte number 5 is actually absolute bit number 43 (that is 8bits/byte * 5 bytes + 3 bits).

For example, to access the power down detection flag bit in the RCON register, declare RCON to be a C
object at absolute address 03h, then declare a bit variable at absolute bit address 27:

static unsigned char RCON @ 0xFD0;
static near bit PD @ (unsigned)&RCON*8+2;


Note that all standard registers and bits within these registers are defined in the header files provided.

Поэтому, когда мы пишем PORTB4, мы используем встроенный макрос и просто даем прямую команду компилятору применить специфическую для данного процессора команду битовой адресации. В общем случае компилятор имеет право это не поддерживать.

Цитата(evc @ Dec 21 2007, 22:40) *
Мне, в принципе, макросы не нравятся, потому что они съедают програмную память. Но это стоит учитывать только на маленьких процессорах. Зато код выполняется (если пользуетесь макросами) быстрее.

Вы говорите о inline macro, которые каждый раз, когда встречаются в тексте, заменяются на одинаковые куски кода.
Сергей же приводит пример макросов переопределения синтаксиса. При этом все равно каждая строка транслируется в одну команду работы с портами. Смысл таких макросов в том, что куски кода можно без исправлений переносить с одного компилятора и процессора на другой. Переписать нужно будет только макросы.
Go to the top of the page
 
+Quote Post
evc
сообщение Dec 24 2007, 12:08
Сообщение #31


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 17-03-07
Из: Москва
Пользователь №: 26 266



Цитата(Сергей Борщ @ Dec 22 2007, 00:52) *
...С каких пор у ПИКов каждый бит порта имеет свой адрес?...


Сергей, сразу хочу уточнить, что я с вами не спорю. Вы нашли себе способ делать "переносимые" программы, вот и хорошо! Я просто хотел вам напомнить, что есть и другие способы обращаться к битам в ПИК-ах. Мне кажется, что так легче "общаться" с ними, но это только (одно) мнение.
Насчет адреса у каждого бита - конечно есть. Вся память ПИК-ов побитово адресируемая. Каждому биту можно присвоит этикетку. Адрес каждого бита получается, как комбинация из адреса байта и номер бита. А номер бита это и есть его адрес в рамках байта. Вот поэтому, думаю, вполне справедливо сказать, что у каждого бита есть собственный, уникальный адрес. Что нельзя сказать, например, о х51-ых, т.к. у них нельзя выше определенного адреса обращаться напрямую к битам.
Насчет макросов, если ваш компилятор такой "умный", то да, вы правы. Но я видел как не настолько "умный" компилятор транслирует setPin(Port, pin) = Port |= (1<<pin) как movlw 4; iorwf PORTB,f, а это уже две инструкции.

Цитата(Alex. B_ @ Dec 20 2007, 21:20) *
это шутка?

Цитата(Alex. B_ @ Dec 22 2007, 01:21) *
чего-то он путает конечно =)

Это вы зря Alex B._, к людям так, с пренебрежением относитесь ...

Сообщение отредактировал evc - Dec 24 2007, 12:10


--------------------
УЭР
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 26 2007, 18:43
Сообщение #32


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(evc @ Dec 24 2007, 14:08) *
Адрес каждого бита получается, как комбинация из адреса байта и номер бита. А номер бита это и есть его адрес в рамках байта. Вот поэтому, думаю, вполне справедливо сказать, что у каждого бита есть собственный, уникальный адрес.
Сказать-то так можно, но точно так же через пару {адрес байта, номер бита} можно обратиться к любому отраженному на память биту любого контроллера, и микрочип здесь никакой не особенный. Более того, он самый обычный, ибо команды bcf, bsf являются read-modify-write для всего байта, т.е. происходит чтение-запись всех битов регистра. С этим связана их особенность, когда такая команда, выполненная для одного из битов PORTx может изменить содержимое битов, выводы которых настроены на ввод. Т.е. фактически команда реализуется тремя действиями - чтение, наложение маски по И/ИЛИ, запись результата. То, что это выполняется одной командой, а не тремя - в контексте "адресуемости" несущественно.
Цитата(evc @ Dec 24 2007, 14:08) *
Что нельзя сказать, например, о х51-ых, т.к. у них нельзя выше определенного адреса обращаться напрямую к битам.
Можно точно также делать чтение-наложение маски-запись. Зато до этого адреса можно обращаться действительно к конкретному биту, никоим образом не "задевая" соседние. Вот именно это (насколько я понимаю) называется "каждый бит имеет собственный адрес".
Цитата(evc @ Dec 24 2007, 14:08) *
Насчет макросов, если ваш компилятор такой "умный", то да, вы правы. Но я видел как не настолько "умный" компилятор транслирует setPin(Port, pin) = Port |= (1<<pin) как movlw 4; iorwf PORTB,f, а это уже две инструкции.
Я обычно смотрю в листинг. Такое поведение тоже встречал, но в довольно старых компиляторах и при отключенной оптимизации. При включении оптимизации все опробованные в последнее время компиляторы делают все как надо, а я всегда компилирую с включенной оптимизацией.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Alex B._
сообщение Dec 26 2007, 20:55
Сообщение #33


Знающий
****

Группа: Свой
Сообщений: 943
Регистрация: 6-07-04
Из: Санкт-Петербург
Пользователь №: 274



Цитата(evc @ Dec 24 2007, 15:08) *
Насчет адреса у каждого бита - конечно есть. Вся память ПИК-ов побитово адресируемая.

Что за бред? Память пиков не адресуема побитово, шина адреса - 8 бит + переключение банков. Это чисто фича хай-тека, за счет которой первые версии компилятора при использовании битовых переменных уделали старинный микрочиповский компилер, о котором сейчас никто не помнит. Обращение к битовой переменной компилируется в bsf/bcf/btfss/btfsc, вот и все. Хай-тек просто облегчил себе задачу, усложнив жизнь программистам, которые сейчас потихоньку перетаскивают код на более современные архитектуры.
С точки зрения хай-тека у каждого микрочиповского бита адрес есть, но говорить так нельзя. Некоторые и MCC18 и IAR-ом пользуются.

Вот вам другой пример - Cortex-M3. Тут уже можно сказать, что у каждого бита есть свой адрес, потому как есть адресуемые "bit-bang" области. Запись по выровненному адресу 1 устанавливает соответствующий бит, запись 0 - сбрасывает, аналогично чтение. И это фича архитектуры а не компилятора, которая позволяет с битами работать атомарно
Цитата(evc @ Dec 24 2007, 15:08) *
Это вы зря Alex B._, к людям так, с пренебрежением относитесь ...

угу... смайлика crying.gif только не хватает...
Go to the top of the page
 
+Quote Post
evc
сообщение Dec 27 2007, 16:36
Сообщение #34


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 17-03-07
Из: Москва
Пользователь №: 26 266



Цитата(Сергей Борщ @ Dec 26 2007, 21:43) *
...точно так же через пару {адрес байта, номер бита} можно обратиться к любому отраженному на память биту любого контроллера, и микрочип здесь никакой не особенный...


В том то и дело, что нельзя (одной инструкцией). Не смотря на то, что у него инструкция выполняется за 12(и до 48) тактов, в 89C52 нельзя написать: SETB register.3 (например), если register находится за адрес 0х2F. Можно, конечно, организовать что-то подобное RMW, но это уже будут как минимум 3 инструкции. В связи с этим я могу получить на выходе ПИК-а 5МГц при 10МГц такт (системный), но это невыполнимо у АРМ-ах, например...

Цитата(Alex B._ @ Dec 26 2007, 23:55) *
...Это чисто фича хай-тека, за счет которой первые версии компилятора при использовании битовых переменных уделали старинный микрочиповский компилер, о котором сейчас никто не помнит...

Читайте внимательнее, HI-TECH здесь ни при чем и это именно архитектурная "фича".
О, и Алекс, а м.п.ф! laughing.gif (вот и смайлик, должно хватить уже!)


--------------------
УЭР
Go to the top of the page
 
+Quote Post
Alex B._
сообщение Dec 28 2007, 08:54
Сообщение #35


Знающий
****

Группа: Свой
Сообщений: 943
Регистрация: 6-07-04
Из: Санкт-Петербург
Пользователь №: 274



Цитата(evc @ Dec 27 2007, 19:36) *
Читайте внимательнее, HI-TECH здесь ни при чем и это именно архитектурная "фича".

еще раз - наличие битовых операций во всей адресуемой памяти нельзя называть "побитовой адресуемостью", нет такого термина. Это именно инструкции работы с битами и ничего больше.
Я вам привел хороший пример с Cortex-ом - вот там биты адресуются
Go to the top of the page
 
+Quote Post
evc
сообщение Dec 28 2007, 15:08
Сообщение #36


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 17-03-07
Из: Москва
Пользователь №: 26 266



Цитата(Alex B._ @ Dec 28 2007, 11:54) *
...наличие битовых операций во всей адресуемой памяти нельзя называть "побитовой адресуемостью", нет такого термина...


Выходит у вас не читать внимательно это рецидив. smile.gif
Вот вам объяснение этого "несуществующего" термина:
Цитата
Дефиниция за: Адресуемость
Достижимость. Когда что-то бывает адресуемое, его можно распознать и манипулировать, не трогая его окружения. Например, пикселы экрана и РАМ память адресуемые. Каждого элемента картинки на экране можно включать/выключать (засветит/затемнить), и каждую ячейку (каждого байта) памяти тоже можно записать и читать независимо от остальных.

Оригинал на английском здесь.
А если еще сомневаетесь в (не)существованием этого термина, напишите в поисковике "bit-addressable". Может быть и удивитесь ...
Что еще сказать? С наступающим праздником! beer.gif


--------------------
УЭР
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 28 2007, 18:34
Сообщение #37


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(evc @ Dec 28 2007, 17:08) *
Вот вам объяснение этого "несуществующего" термина:
Термин существует. Но то, что есть у ПИКов - не битово-адресуемая память. Я вам уже приводил пример, когда доступ к такому "битово-адресуемому" биту приводит к порче соседних. Именно потому, что память - байтово-адресуемая. Попробую еще такой аргумент: раз каждый бит имеет адрес, значит можно завести указатель на бит и работать с конкретным битом через такой указатель?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
evc
сообщение Dec 29 2007, 06:10
Сообщение #38


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 17-03-07
Из: Москва
Пользователь №: 26 266



Цитата(Сергей Борщ @ Dec 28 2007, 21:34) *
...


Да, я согласен, что они это криво сделали. Скорее всего отмазались...
И да, я согласен, что в других процессорах это сделано по-настоящему. Но в сравнение с х51-ой серии, для меня доступность каждого бита - плюс. Будь осторожным при работе с портами и все!
Вот поэтому (и не только, но с большим сожалением!) в свое время и перешел на ПИК-ах.


--------------------
УЭР
Go to the top of the page
 
+Quote Post
DL36
сообщение Mar 1 2009, 16:20
Сообщение #39


Местный
***

Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006



Цитата(Сергей Борщ @ Dec 21 2007, 20:25) *
А существо вопроса в том, что в макросе я указываю не конкретный регистр (PORTx, TRISx, LATx), а имя порта (A, B, C) и уже внутри макроса из него получается имя нужного регистра в зависимости от необходимого действия. При использовании битовых полей такое невозможно.

Действительно очень удобно, и С30 прекрасно все понимает.
Вопрос такого плана третий параметр в #define LED A, 1, H определяет направление передачи вход/выход я правильно понял? Или это способ коммутации выхода с помощью LATx или TRISx
Go to the top of the page
 
+Quote Post
Baser
сообщение Mar 1 2009, 21:20
Сообщение #40


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(DL36 @ Mar 1 2009, 18:20) *
Действительно очень удобно, и С30 прекрасно все понимает.
Вопрос такого плана третий параметр в #define LED A, 1, H определяет направление передачи вход/выход я правильно понял? Или это способ коммутации выхода с помощью LATx или TRISx

Этот параметр определяет активный уровень сигнала
H - активный уровень высокий,
L - активный уровень низкий.

Соответственно макросы, которые оперируют АКТИВНЫМ или ПАССИВНЫМ уровнями порта, будут ориентироваться на этот параметр.

Пример:
Код
#define  LED    A, 1, L

On(LED); // Установить порт RA1 в НИЗКИЙ уровень (перевести в АКТИВНЫЙ уровень).


Вот вам для примера мой файл макросов для AVR-ок. Переделать под ПИКи не сложно.
Авторство не мое, я только под свои пристрастия кое-что изменил. Авторы указаны в шапке, народ их должен знать a14.gif
Прикрепленный файл  portmacros.txt ( 3.72 килобайт ) Кол-во скачиваний: 1347

(расширение поменяйте на portmacros.h)
Go to the top of the page
 
+Quote Post
DL36
сообщение Mar 2 2009, 06:10
Сообщение #41


Местный
***

Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006



Цитата(Baser @ Mar 2 2009, 01:20) *
Этот параметр определяет активный уровень сигнала
H - активный уровень высокий,
L - активный уровень низкий.

Соответственно макросы, которые оперируют АКТИВНЫМ или ПАССИВНЫМ уровнями порта, будут ориентироваться на этот параметр.

Пример:
Код
#define  LED    A, 1, L

On(LED); // Установить порт RA1 в НИЗКИЙ уровень (перевести в АКТИВНЫЙ уровень).


Вот вам для примера мой файл макросов для AVR-ок. Переделать под ПИКи не сложно.
Авторство не мое, я только под свои пристрастия кое-что изменил. Авторы указаны в шапке, народ их должен знать
Конечно должен, спасибо.

Вот ... сразу не догадался что Н это высокий.

Я еще использую режим работы по типу открытого стока записав в защелку порта 0 и переключая его с выхода на вход и обратно. Букву тогда надо написать наверно OD.

А вообще спасибо, давно искал нечто подобное но не мог определится с тем, что нужно.
Мой вариант добавил работу с открытым стоком и аналоговыми входами.
Go to the top of the page
 
+Quote Post
DL36
сообщение Mar 3 2009, 15:56
Сообщение #42


Местный
***

Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006



Атомарная работа с портами в С30 статья
и откорректированный макрос для атомарной работы с портами в С30

Тема началась тут.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 26 2010, 16:02
Сообщение #43


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(DL36 @ Mar 3 2009, 19:56) *
Атомарная работа с портами в С30

Я вот подумал, раз С30 по своей природе ГЦЦ-шный, можно туда притянуть конструкции атомарного доступа из WinAVR (atomic.h) - как образец самого элегантного решения. smile.gif
Go to the top of the page
 
+Quote Post
DL36
сообщение Mar 26 2010, 17:36
Сообщение #44


Местный
***

Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006



Цитата(_Pasha @ Mar 26 2010, 19:02) *
Я вот подумал, раз С30 по своей природе ГЦЦ-шный, можно туда притянуть конструкции атомарного доступа из WinAVR (atomic.h) - как образец самого элегантного решения. smile.gif

Попробуйте.
Хотя макросы Алекса и мои тоже не самоделка, и вполне прилично работают. Если интересно на сахаре год назад бурное обсуждение было.
Go to the top of the page
 
+Quote Post
_Макс
сообщение Feb 26 2011, 15:56
Сообщение #45


Знающий
****

Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945



Что можно использовать для PIC10? IAR и MPLAB его не поддерживают sad.gif
Go to the top of the page
 
+Quote Post
andron86
сообщение Feb 26 2011, 16:44
Сообщение #46


Местный
***

Группа: Участник
Сообщений: 406
Регистрация: 1-03-06
Пользователь №: 14 821



Цитата(Сергей Борщ @ Dec 17 2007, 12:18) *
Код
#define  LED    A, 1, H
#define _setH(port,bit)         LAT##port |= (1 << bit)
#define _clrH(port,bit)         LAT##port &= ~(1 << bit)
#define _set(port,bit,val)      _set##val(port,bit)
#define on(x)                   _set (x)
#define _clr(port,bit,val)      _clr##val(port,bit)
#define off(x)                  _clr (x)

void Test()
{
   on(LED);
   off(LED);
}
Не компилится. Путается в количестве аргументов.

Даа... , я как понимаю влезь в ухо и вылези через ж..у. cranky.gif Это так буквально программисты понимают слово кодирование. :-) Не обижайтесь Сергей, просто зачем так, даже если это только пример?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 26 2011, 17:03
Сообщение #47


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (andron86 @ Feb 26 2011, 19:44) *
Даа... , я как понимаю влезь в ухо и вылези через ж..у.

Незабвенная Эллочка-людоедка тоже не смогла-бы оценить ни одно литературное произведение - уж больно у нее словарный запас и круг потребностей был мал.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
andron86
сообщение Feb 27 2011, 17:02
Сообщение #48


Местный
***

Группа: Участник
Сообщений: 406
Регистрация: 1-03-06
Пользователь №: 14 821



Цитата(zltigo @ Feb 26 2011, 18:03) *
Незабвенная Эллочка-людоедка тоже не смогла-бы оценить ни одно литературное произведение - уж больно у нее словарный запас и круг потребностей был мал.

:-) Ваш юмор понятен:-). Просто когда программисты, в этих трёх строчках, ошибки ищут по три месяца, тогда да.... Кстати, в двоичном кодировании 2 знака и всё прекрасно, а можно было и все 33 буквы русского могучего использовать - представляете, как бы выглядели эти сочинения! :-) Имхо, чем проще написан код, тем работоспособнее он, отпадает зависимость от своеобразностей разных компиляторов, повышается читаемость итд. итп.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 27 2011, 17:14
Сообщение #49


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (andron86 @ Feb 27 2011, 20:02) *
Просто когда программисты, в этих трёх строчках, ошибки ищут по три месяца

Может это на самом деле не программисты???
QUOTE
тем работоспособнее он, отпадает зависимость от своеобразностей разных компиляторов, повышается читаемость итд. итп.

Вот именно с этой целью подобные макросы и пишутся (правда классические ляпы с экономией () в этих присутствуют sad.gif ). Хотя лично я подобными не пользуюсь (интересует обычно более высокие уровни абстракции), но это уже мое личное.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
andron86
сообщение Feb 27 2011, 17:25
Сообщение #50


Местный
***

Группа: Участник
Сообщений: 406
Регистрация: 1-03-06
Пользователь №: 14 821



Цитата(zltigo @ Feb 27 2011, 18:14) *
именно с этой целью

Как раз эта цель и привела к тому, что компилятор оказался не работоспособен.
Цитата(zltigo @ Feb 27 2011, 18:14) *
Может это на самом деле не программисты???

Может.
Не все художнинки аля Малевич.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 27 2011, 18:19
Сообщение #51


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (andron86 @ Feb 27 2011, 19:25) *
Как раз эта цель и привела к тому, что компилятор оказался не работоспособен.
Это тараканы препроцессора. Если он не отвечает стандарту - макросы тут не при чем. Полагаю, вы не поняли всех прелестей этих макросов, поэтому они вам и показались слишком сложными.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
andron86
сообщение Feb 27 2011, 18:29
Сообщение #52


Местный
***

Группа: Участник
Сообщений: 406
Регистрация: 1-03-06
Пользователь №: 14 821



Цитата(zltigo @ Feb 27 2011, 18:14) *
интересует обычно более высокие уровни абстракции

Sorry за флуд :-) я это в этом контексте понимаю:
Цитата
С точки зpения банальной эpудиции, каждый индивидуум, кpитически мотивиpующий абстpакцию, не может игноpиpовать кpитеpии утопического субьективизма, концептуально интеpпpетиpуя общепpинятые дефанизиpующие поляpизатоpы. Поэтому консенсус, достигнутый диалектической матеpиальной классификацией всеобщих мотиваций в паpадогматических связях пpедикатов, pешает пpоблему усовеpшенствования фоpмиpующих геотpансплантационных квазипузлистатов всех кинетически коpеллиpующих аспектов. Исходя из этого, мы пpишли к выводу, что каждый пpоизвольно выбpанный пpедикативно абсоpбиpующий обьект pациональной мистической индукции можно дискpетно детеpминиpовать с аппликацией ситуационной паpадигмы коммуникативно-функционального типа пpи наличии детектоpно-аpхаического дистpибутивного обpаза в Гильбеpтовом конвеpгенционном пpостpанстве, однако пpи паpаллельном коллабоpационном анализе спектpогpафичеких множеств, изомоpфно pелятивных к мультиполосным гипеpболическим паpаболоидам, интеpпpетиpующим антpопоцентpический многочлен Hео-Лагpанжа, и возникает позиционный сигнификатизм гентильной теоpии психоанализа, в pезультате чего надо пpинять во внимание следующее: не только эзотеpический, но и экзистенциальный аппеpцепциониpованный энтpополог антецедентно пассивизиpованный высокоматеpиальной субстанцией, обладает пpизматической идиосинхpацией. Но так как валентностный фактоp отpицателен, то и, соответственно, антагонистический дискpедитизм дегpадиpует в эксгибиционном напpавлении, поскольку, находясь в пpепубеpтатном состоянии, пpактически каждый субьект, меланхолически осознавая эмбpиональную клаустоpофобию, может экстpаполиpовать любой пpоцесс интегpации и диффеpенциации в обоих напpавлениях, отсюда следует, что в pезультате синхpонизации, огpаниченной минимально допустимой интеpполяцией обpаза, все методы конвеpгенционной концепции тpебуют пpактически тpадиционных тpансфоpмаций неоколониализма. Hеоколонии, pазмножающиеся почкованием, имеют вегетационный пеpиод от тpех до восьми фенотипических гомозигот, но все они являются лишь фундаментальным базисом социогенетической надстpойки кpиогенно-кpеативного пpоцесса геpонтологизации. Увеличить этот базис можно с помощью гектаплазменного ускоpителя биоинеpтных коллоидных клеток контагиозной конкpетизации, однако введение конкpетизации влечет за собой пpименение методов теоpии множеств и дистpибутивного анализа, что обусловлено тем, что тpансцендентальная поликонденсация неpоноспоpы в пеpплексном хаосе может инбабулиpовать комплексный моpфоз только тогда, когда конституент доминанты квазитенденциально унивеpсален, и пpоисходит довольно внезапно. Очевидно, что все вышесказанное пpоливает свет на теоpию пpедикативных ощущений субъекта, абсолютно нефункциональных в условиях абстpактного хаоса.


Цитата(Сергей Борщ @ Feb 27 2011, 19:19) *
Это тараканы препроцессора. Если он не отвечает стандарту - макросы тут не при чем. Полагаю, вы не поняли всех прелестей этих макросов, поэтому они вам и показались слишком сложными.

Сергей, да не показалось мне это сложным, просто смотри цитату выше, можно многие элементарные выражения так завуалировать, что это не всем понятно будет, особенно компилятору.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 28 2011, 10:06
Сообщение #53


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (andron86 @ Feb 27 2011, 20:29) *
можно многие элементарные выражения так завуалировать, что это не всем понятно будет, особенно компилятору.
Можно. Но нужно это делать только тогда, когда нужно. В данном случае - нужно, этим достигается необходимая функциональность. Конкретный компилятор не отвечает стандарту. Меня не беспокоит каким образом он будет пытаться понимать, как он должен понять - описано в стандарте.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
testerplus
сообщение Mar 5 2011, 05:56
Сообщение #54


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 7-08-08
Из: SPb
Пользователь №: 39 471



Цитата(_Макс @ Feb 26 2011, 19:56) *
Что можно использовать для PIC10? IAR и MPLAB его не поддерживают sad.gif

HT-PICC и CCS
Go to the top of the page
 
+Quote Post
loghir
сообщение Mar 13 2011, 18:46
Сообщение #55


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 13-03-11
Пользователь №: 63 577



Подскажите ПЛЗ простейший исходник для тестирования компилятора. (Стыкую MPLAB IDE с HT_PICC, толку мало - не компилится.)
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Mar 13 2011, 20:52
Сообщение #56


Гуру
******

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



Цитата(loghir @ Mar 13 2011, 20:46) *
Подскажите ПЛЗ простейший исходник для тестирования компилятора. (Стыкую MPLAB IDE с HT_PICC, толку мало - не компилится.)


Какое семейство и какой компилятор? надеюсь не PRO ?

для PIC18
Код
#include <pic18.h>
void main(void)
{
}


для PIC16:
Код
#include <pic.h>
void main(void)
{
}


ну и конечно в мплабе семейство соответствующее выбрать нужно.
Go to the top of the page
 
+Quote Post
loghir
сообщение Mar 14 2011, 09:41
Сообщение #57


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 13-03-11
Пользователь №: 63 577



Ruslan1, спасибо!

МК - PIC16F628

В MPLAB IDE 8.46 компиляция не идет ни с Hi-Tech PIC C-compiler v9.60 std,
ни с Hi Tech PICC v8.05pl2. (Оба активированы).
Еще у меня есть MPLAB IDE v8.30, буду с ним пробовать.
Go to the top of the page
 
+Quote Post
loghir
сообщение Mar 14 2011, 11:18
Сообщение #58


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 13-03-11
Пользователь №: 63 577



Поставил MPLAB IDE v8.30. (перезагрузил комп)
В окне создания проекта выбрал как на картинке:
Создал файл, подключил к проекту.
Код
#include <pic.h>
void main(void)
{
}

Пишет ошибку:
Цитата
Build D:\Work\C\test_9_6 for device 16F628A
Using driver C:\Program Files\HI-TECH_9.60\bin\picc.exe

Executing: "C:\Program Files\HI-TECH_9.60\bin\picc.exe" -q -g --asmlist --chip=16F628A "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s" -P --char=unsigned -C D:\Work\C\test11.c
Warning [176] D:\Work\C\test11.c; 4.0 missing newline
Warning [337] D:\Work\C\test11.c; 3.1 line does not have a newline on the end

Может, надо было не picc.exe подключать?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
xemul
сообщение Mar 14 2011, 13:02
Сообщение #59



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(loghir @ Mar 14 2011, 14:18) *
Создал файл, подключил к проекту.
Код
#include <pic.h>
void main(void)
{
}

Пишет ошибку:
Цитата
Warning [176] D:\Work\C\test11.c; 4.0 missing newline
Warning [337] D:\Work\C\test11.c; 3.1 line does not have a newline on the end

Warning - предупреждение.
missing newline, line does not have a newline on the end - компилятор предупреждает, что программа не заканчивается символом перевода строки. Эти предупреждения на работе программы точно не скажутся, просто неаккуратненько.
Описания сообщений об ошибках и предупреждениях см. в docs\manual.pdf в каталоге установки компилятора. Не забудьте воспользоваться англо-русским словарём.
Цитата
Может, надо было не picc.exe подключать?

Universal Toolsuite всё делает за Вас, и уже достаточно давно делает это правильно. Если сомневаетесь, ответы в docs\quickstart.pdf и хелпах мплаба.
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Mar 14 2011, 21:19
Сообщение #60


Гуру
******

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



Цитата(loghir @ Mar 14 2011, 11:41) *
Ruslan1, спасибо!

МК - PIC16F628

В MPLAB IDE 8.46 компиляция не идет ни с Hi-Tech PIC C-compiler v9.60 std,
ни с Hi Tech PICC v8.05pl2. (Оба активированы).
Еще у меня есть MPLAB IDE v8.30, буду с ним пробовать.


1. как я понял, у вас уже все идет. поздравляю. sm.gif
2. Если глючит на такой программе- то что-то с установкой компилятора не так. Насколько я помню, у Хайтека есть что-то бесплатное, но с ограничениями. на попробовать вполне хватит.
3. Я сам PIC16 давно не пользовал, PIC18 их покрыли как бык овцу, но нареканий не было, и PIC18 с Хайтеком отлично работает (только не PRO!). Но вот если Вы собираетесь на что-то более современное майкрочиповское переходить в перспективе- наверное лучше сразу Майкрочиповские компиляторы брать, Хайтек это тупик. Но вроде бы как раз для PIC16 и выбора нет, только hi-tech.
4. А чего МПЛАБ такой старый, вроде 8.56 уже есть. Если уж переставляете, то наверное новье не хуже старья будет sm.gif
Go to the top of the page
 
+Quote Post
Bronislav
сообщение Mar 15 2011, 00:46
Сообщение #61


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 23-01-06
Пользователь №: 13 477



Цитата(Ruslan1 @ Mar 15 2011, 01:19) *
4. А чего МПЛАБ такой старый, вроде 8.56 уже есть. Если уж переставляете, то наверное новье не хуже старья будет sm.gif

Вообще-то 8.63 и нормально работает с НТ 9.81 PRO для PIC16
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Mar 15 2011, 07:56
Сообщение #62


Гуру
******

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



Цитата(Bronislav @ Mar 15 2011, 02:46) *
Вообще-то 8.63 и нормально работает с НТ 9.81 PRO для PIC16

А, ну да. 8.63, чего-то глянул на иконку 8.63 на экране, а руки 8.56 отстучали. странно sm.gif
Насчет PRO- я имел неприятности на PIC18 с этими версиями, 9.63 например, они иногда очень революционно оптимизировали, несмотря на volatile, разрушались данные в глобальных переменных (массивы в несколько килобайт). Надеялся что глюк в руках- не нашел. Откатился обратно на STD. Думаю что логика у них одинаково сделана для разных семейств, вот и обхожу PRO стороной, не стоит оно того (ну или может уровень написания моих программ недостаточен для PRO, но в-общем не срослось у нас sm.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 22:50
Рейтинг@Mail.ru


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