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

 
 
> Компилятор С 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
 
Start new topic
Ответов
Alex B._
сообщение Dec 14 2007, 13:10
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 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
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 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
Сообщение #4


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

Группа: Свой
Сообщений: 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
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 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
volodya
сообщение Dec 18 2007, 07:16
Сообщение #6


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

Группа: Свой
Сообщений: 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
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 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
Alex B._
сообщение Dec 20 2007, 11:25
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 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
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 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
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 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
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 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
Сообщение #12


Знающий
****

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



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

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


Гуру
******

Группа: Модераторы
Сообщений: 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
evc
сообщение Dec 21 2007, 15:50
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 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
Сообщение #15


Гуру
******

Группа: Модераторы
Сообщений: 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
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 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
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 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
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 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

Сообщений в этой теме
- phantom   Компилятор С for PIC   Dec 14 2007, 10:39
- - Сергей Борщ   sdcc можно глянуть. Слегка глючный, но бесплатный.   Dec 14 2007, 10:55
- - phantom   А MPLAB полный случаем нигде не пробегал?   Dec 14 2007, 11:52
|- - vanner   MPLAB - полнее не бывает . Сейчас с ней поставляет...   Dec 14 2007, 13:02
|||||- - evc   Цитата(Сергей Борщ @ Dec 22 2007, 00:52) ...   Dec 24 2007, 12:08
|||||- - Сергей Борщ   Цитата(evc @ Dec 24 2007, 14:08) Адрес ка...   Dec 26 2007, 18:43
||||||- - evc   Цитата(Сергей Борщ @ Dec 26 2007, 21:43) ...   Dec 27 2007, 16:36
||||||- - Alex B._   Цитата(evc @ Dec 27 2007, 19:36) Читайте ...   Dec 28 2007, 08:54
||||||- - evc   Цитата(Alex B._ @ Dec 28 2007, 11:54) ......   Dec 28 2007, 15:08
||||||- - Сергей Борщ   Цитата(evc @ Dec 28 2007, 17:08) Вот вам ...   Dec 28 2007, 18:34
||||||- - evc   Цитата(Сергей Борщ @ Dec 28 2007, 21:34) ...   Dec 29 2007, 06:10
|||||- - Alex B._   Цитата(evc @ Dec 24 2007, 15:08) Насчет а...   Dec 26 2007, 20:55
||||- - DL36   Цитата(Сергей Борщ @ Dec 21 2007, 20:25) ...   Mar 1 2009, 16:20
||||- - Baser   Цитата(DL36 @ Mar 1 2009, 18:20) Действит...   Mar 1 2009, 21:20
||||- - DL36   Цитата(Baser @ Mar 2 2009, 01:20) Этот па...   Mar 2 2009, 06:10
||||- - DL36   Атомарная работа с портами в С30 статья и откоррек...   Mar 3 2009, 15:56
||||- - _Pasha   Цитата(DL36 @ Mar 3 2009, 19:56) Атомарна...   Mar 26 2010, 16:02
||||- - DL36   Цитата(_Pasha @ Mar 26 2010, 19:02) Я вот...   Mar 26 2010, 17:36
|||- - Baser   Цитата(Сергей Борщ @ Dec 20 2007, 17:31) ...   Dec 20 2007, 20:06
|||- - Сергей Борщ   Цитата(Baser @ Dec 20 2007, 22:06) И в ИА...   Dec 20 2007, 20:20
|||- - Baser   Цитата(Сергей Борщ @ Dec 20 2007, 22:20) ...   Dec 21 2007, 11:53
|||- - Сергей Борщ   Цитата(Baser @ Dec 21 2007, 13:53) Да, к ...   Dec 21 2007, 12:58
|||- - Baser   Цитата(Сергей Борщ @ Dec 21 2007, 14:58) ...   Dec 21 2007, 13:59
||- - andron86   Цитата(Сергей Борщ @ Dec 17 2007, 12:18) ...   Feb 26 2011, 16:44
||- - zltigo   QUOTE (andron86 @ Feb 26 2011, 19:44) Даа...   Feb 26 2011, 17:03
||- - andron86   Цитата(zltigo @ Feb 26 2011, 18:03) Незаб...   Feb 27 2011, 17:02
||- - zltigo   QUOTE (andron86 @ Feb 27 2011, 20:02) Про...   Feb 27 2011, 17:14
||- - andron86   Цитата(zltigo @ Feb 27 2011, 18:14) именн...   Feb 27 2011, 17:25
|||- - Сергей Борщ   QUOTE (andron86 @ Feb 27 2011, 19:25) Как...   Feb 27 2011, 18:19
||- - andron86   Цитата(zltigo @ Feb 27 2011, 18:14) интер...   Feb 27 2011, 18:29
||- - Сергей Борщ   QUOTE (andron86 @ Feb 27 2011, 20:29) мож...   Feb 28 2011, 10:06
|- - oran-be   Цитата(Alex B._ @ Dec 14 2007, 17:10) MPL...   Dec 19 2007, 11:58
- - phantom   Надо под PIC16 - PIC18. Посмотрел на ФТП там в раз...   Dec 17 2007, 12:25
|- - DL36   Цитата(phantom @ Dec 17 2007, 16:25) Надо...   Dec 17 2007, 14:01
- - Baser   Цитата(evc @ Dec 21 2007, 17:50) Это особ...   Dec 21 2007, 22:47
- - _Макс   Что можно использовать для PIC10? IAR и MPLAB его ...   Feb 26 2011, 15:56
|- - testerplus   Цитата(_Макс @ Feb 26 2011, 19:56) Что мо...   Mar 5 2011, 05:56
- - loghir   Подскажите ПЛЗ простейший исходник для тестировани...   Mar 13 2011, 18:46
|- - Ruslan1   Цитата(loghir @ Mar 13 2011, 20:46) Подск...   Mar 13 2011, 20:52
- - loghir   Ruslan1, спасибо! МК - PIC16F628 В MPLAB IDE...   Mar 14 2011, 09:41
|- - Ruslan1   Цитата(loghir @ Mar 14 2011, 11:41) Rusla...   Mar 14 2011, 21:19
|- - Bronislav   Цитата(Ruslan1 @ Mar 15 2011, 01:19) 4. А...   Mar 15 2011, 00:46
|- - Ruslan1   Цитата(Bronislav @ Mar 15 2011, 02:46) Во...   Mar 15 2011, 07:56
- - loghir   Поставил MPLAB IDE v8.30. (перезагрузил комп) В ок...   Mar 14 2011, 11:18
- - xemul   Цитата(loghir @ Mar 14 2011, 14:18) Созда...   Mar 14 2011, 13:02


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

 


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


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