Микроконтроллеры | Ликбез по С для микроконтроллеров PIC |
|
---|---|---|
Шикарно! Попробую. |
|
|
Ув picmaniac, "функциональной" записью в С используются по двум причинам - во-первых, это хорошо укладывается в идеологию С, а, во-вторых, в такой нотации программируются препроцессорые макросы. Можно реально получить переносимый (почти) код - просто под каждый микроконтроллер разработчиком этого микроконтроллера пишется свой *.h, а уж какие он там регистры вместо этого вызова подставит - на то пользователю наплевать. В таком варианте и с AVR на PIC можно без проблем переехать, а если у Вас явно расписаны присваивания регистрам, как Вы привели в примере, все это придется потом руками переписывать. Переносимость программ на С не возникает сама по себе, как пытаются уверить некоторые участники форума, для этого все-таки требуется соблюдение некоторых правил при написании программ. Во многих книгах по С присутствует раздел, посвященный тому, как правильно писать программы, от которых требуется переносимость. Использование препроцессорных макросов - одна из типовых рекомендаций. |
|
|
chav1961: Можно реально получить переносимый (почти) код Вот именно, что почти. Всё равно периферия у контроллеров разная, и с ней разбираться придётся. |
|
|
АНТОХА, в том, что приходится разбираться с периферией и читать даташиты, по большому счету, сами производители микроконтроллеров и виноваты. В стандарте С для нормальных компьютеров ведь оговорены не только правила языка, но и набор стандартных функций. На любой платформе можно употребить malloc, printf, getc, strcmp (если она там вообще реализована) и получится именно то, что от них ожидают. Разработчикам же микроконтроллеров было просто влом собраться вместе и оговорить более-менее типичный набор функций, требуемых для работы с микроконтроллерами. Что, трудно было напридумывать функций навроде getPort(имя порта), setPort(имя порта,значение), startTimer(номер таймера) и тому подобные? Что, есть какие-то уникальные способы работы с портом, например, которые никакими силами невозможно унифицировать? Народ бы пользовался этим набором функций во всех программах для всех микроконтроллеров, и горя бы не знал ни с переносимостью, ни с пониманием смысла написанного. Одна из задач любого языка программирования высокого уровня как раз в том и заключается, чтобы по возможности абстрагироваться от конкретной вычислительной среды. |
|
|
chav1961: Разработчикам же микроконтроллеров было просто влом собраться вместе и оговорить более-менее типичный набор функций, требуемых для работы с микроконтроллерами. Видимо, они в этом не заинтересованы? Привязывают пользователя к своему продукту? С другой стороны, если что-то можно решить не уходя от стандарта (а запись TRISA=xxx - стандарту соответствует), то наверное не надо городить что-то своё? Кстати, для доступа к ногам процессоров есть замечательный набор макросов. Объявляется нога:
(порт, номер бита в порту, активное состояние (L/H)) в программе пишем:
для настройки ноги как выхода, или
- как входа. И потом работаем с ней:
Этот набор макросов портирован для MSP, AVR, Fujitsu, x51... файл для АВР прилагается |
|
|
От конкретики нам никуда не деться даже при написании проги на Си. Не стоит забывать что стартовый размер оперативы 128 байт и с памятью программ негусто. Вот пример:мне нужна была функция itoa, если кто не знает, это перевод IntegerToAscii. В хайтеке ее вообще сделать не потрудились, пришлось самому писать. Так вот, в стандартных библиотеках еще идет проверка на правильность значения основания. Поскольку мне нужно было переводить только десятичные числа, я проверку значения основания благополучно опустил чем выиграл бару байт и сократил время выполнения на несколько циклов. Не, ну если скорость в приложении не очень требуется то в принципе можно стандартной пользоваться. Ресурсов мало, поетому я считаю что лучше знать всю эту конкретику, чтобы расходовать ресурсы оптимально. По этому поводу есть рассказик на сахаре http://www.caxapa.ru/story/1byte.html |
|
|
Ура! Корифеи подключились. Отлично, так держать! |
|
|
Присоединяюсь Язык С действительно существует не как замена ассемблеру. На языки программирования высокого уровня перешли не потому, что всем вдруг захотелось писать медленные и жадные до ресурсов программы, а для того, чтобы не истекать кровью на разработке каждой новой системы, и не трястись в ней за каждый байт и каждую микросекунду. Зарплаты у зарубежных (да и у некоторых наших) программеров измеряются уже десятком килобаксов. Если такой программер потратит на систему хотя бы на полмесяца меньше, на сэкономленные пять килобаксов можно столько нормальных микроконтроллеров накупить... А на серьезных проектах таких людей не по одному человеку сидит. |
|
|
picmaniac: Zandy, как успехи в борьбе против глюков? Надо мне вот сейчас один дивайсик простенький сделать. Думал, на С буду писать, потренируюсь заодно. Но, времени мало, придется писать на асме. Так что, у меня все наоборот, не как у нормальных людей. |
|
|
Zаndy, а что за девайсик, если не секрет? |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |