|
Компилятор С for PIC |
|
|
|
 |
Ответов
|
Dec 14 2007, 13:10
|

Знающий
   
Группа: Свой
Сообщений: 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 - кроме того что он бесплатный ничего про него хорошего не слышал =)
|
|
|
|
|
Dec 17 2007, 06:08
|

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

|
Цитата(Сергей Борщ @ Dec 14 2007, 15:50)  Сравнивал с MCC18. Препроцессор MCC18 не смог правильно обработать макросы, за что и был забракован. Нормально работают макросы, препроц. великолепно все отрабатывает. Работал достаточно долго. Даже подумываю купить "честную" лицензию у МЕЛКОЧИПА  .
--------------------
"Для того чтобы избежать критики, надо ничего не делать, ничего не говорить и никем не быть" "Каждый из нас бывает дураком по крайней мере пять минут в день; мудрость заключается в том, чтобы не превысить лимит." Элберт Хаббард
|
|
|
|
|
Dec 17 2007, 11:18
|

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

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

|
Цитата(Сергей Борщ @ Dec 17 2007, 13:18)  void Test() { on(LED); off(LED); }[/code]Не компилится. Путается в количестве аргументов. Действительно! К сожалению для МСС Вы правы! Сам таких вложений не использовал. = Особенности системы.
Сообщение отредактировал volodya - Dec 18 2007, 07:20
--------------------
"Для того чтобы избежать критики, надо ничего не делать, ничего не говорить и никем не быть" "Каждый из нас бывает дураком по крайней мере пять минут в день; мудрость заключается в том, чтобы не превысить лимит." Элберт Хаббард
|
|
|
|
|
Dec 20 2007, 11:25
|

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

|
Цитата(Сергей Борщ @ Dec 18 2007, 17:25)  А у меня это основной макрос доступа к портам. Поэтому более глубоко MCC тестировать не стал, хотя по описанию он действительно мощный. Обертка функций в макросы вообще нехорошо с микрочипом. Просто потому, что и симулятор и дебаггер MPLAB не умеют в них входить (то же относится к инлайновым функциям) - несмотря на компилер. Цитата А ИАР для дсПИКов? Такой ацтой, что и упоминать не стоит? Кто нить пробовал? Просто забыл. Вполне хороший и быстрый код. До кучи EC++, чего ни один другой компилер для микрочипа пока не имеет. НО! Без плагина к MPLAB-у использовать IAR нет смысла, потому как с железными отладчиками его среда не работатет, да и симулятор там откровенно поганый. А плагин есть только к старой версии IAR (1.20), которая знает только о старых контроллерах. Нового плагина к 1.30 я не нашел, поэтому =(((
|
|
|
|
|
Dec 20 2007, 14:50
|

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

|
Цитата(Сергей Борщ @ Dec 20 2007, 16:28)  ...объявить ногу в одном месте, и потом при необходимости в одном месте ее изменить - это гораздо удобнее и ошибкоустойчивее, чем во всем исходнике явно указывать порт и ногу. тогда в *.h файле просто запишите (MCC30): Код #define MyPin PORTB4 // (например) и потом везде где вам нужно обращаться к PORTB4, будете писать MyPin. Если нужно изменить, будете менять только в хедере.
--------------------
УЭР
|
|
|
|
|
Dec 20 2007, 15:31
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Dec 20 2007, 19:11
|

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

Местный
  
Группа: Свой
Сообщений: 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).
--------------------
УЭР
|
|
|
|
|
Dec 21 2007, 17:25
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Dec 21 2007, 20:40
|

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

|
Цитата(Сергей Борщ @ Dec 21 2007, 20:25)  Это что-то новенькое. С х51 не путаете?... Нет не новенькое (наверно я не очень, так, объяснил). У х51 немножко по-другому. У них регистр направления порта нет. Что бы настроит на вход нужно просто на порт выставить 1. В ПИК-ах есть регистр направления - именно TRIS (конечно, это вам хорошо известно). Дело в том, что вы о макросах говорите, а та конструкция, о которой я - обыкновенная директива препроцессора. Объявление константы "MyPin" со значением "адрес PORTB4". Мне, в принципе, макросы не нравятся, потому что они съедают програмную память. Но это стоит учитывать только на маленьких процессорах. Зато код выполняется (если пользуетесь макросами) быстрее.
--------------------
УЭР
|
|
|
|
Сообщений в этой теме
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 21 2007, 22:40) Нет не н... Dec 21 2007, 21:52                Alex B._ Цитата(Сергей Борщ @ Dec 22 2007, 00:52) ... Dec 21 2007, 22:21                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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|