Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Зарезервированные слова IAR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Syber
Начинаю вникать в MSP430G2, купил LAunchPad и решил начать с осмысливания программы "моргающий светодиод", разбирая прошитую программу. Насколько понял, WDTCTL, WDTPW, WDTHOLD - зарезервированные слова. Нашел их описание. К зарезервированным, насколько понял, относятся CCTL0, CCIE, TACTL ну и наверно другие. Где найти перечень всех зарезервированных слов для IAR и их описание?
scifi
Сам я MSP430 не занимался, но то, что Вы называете "зарезервированными словами" таковыми не являются, строго говоря. Это похоже на регистры микроконтроллера. Обычно они определяются как макросы или специальные переменные. Определения содержатся в заголовочном файле (например, msp430x21x2.h). Описание регистров обычно находится в справочном руководстве микроконтроллера.
Syber
Зарезервированными словами в языках программирования называют слова, имеющее специальное значение. Идентификаторы с такими именами запрещены. WDTCNT - это счетчик таймера. Это слово я не имею право использовать как переменую. Самый простой пример: попробуйте в виндозе создать файл с именем lpt. Скорее всего у вас ничего не получится, поскольку это слово зарезервировани под параллельный порт. Зато я могу в командах и программах при помощи этого слова обращаться к параллельному порту и наоборот, увидев слово lpt я знаю, что это не имя переменной, а конкретное оборудование.
На моем этапе познания двойная задача: понять смысл слов, которые используются в программе, а с другой стороны надо бы знать какими словами мне в программе мне называть внутренние ресурсы микроконтроллера.
Наверняка такой список есть, но где?
ut1wpr
Цитата(Syber @ Dec 27 2011, 23:07) *
Начинаю вникать в MSP430G2, купил LAunchPad и решил начать с осмысливания программы "моргающий светодиод", разбирая прошитую программу. Насколько понял, WDTCTL, WDTPW, WDTHOLD - зарезервированные слова. Нашел их описание. К зарезервированным, насколько понял, относятся CCTL0, CCIE, TACTL ну и наверно другие. Где найти перечень всех зарезервированных слов для IAR и их описание?
В хелпах к нему. И в хидерных файлах, относящимся к МК проекта. Сам IAR не может знать все мыслимые и немыслимые буквосочетания. Эти слова называются предопределенными, и их дефайны не в IAR-е находятся.

Сергей Борщ
QUOTE (Syber @ Dec 28 2011, 07:38) *
Зарезервированными словами в языках программирования называют слова, имеющее специальное значение.
Вы объявили переменную A. Стало ли "A" от этого зарезервированым словом компилятора? Нет, не стало. Так же как и перечисленные вами имена макроопределений. Список зарезервированых слов языка Си описан в стандарте:
QUOTE
6.4.1 Keywords
Syntax
1 keyword: one of

auto enum restrict unsigned
break extern return void
case float short volatile
char for signed while
const goto sizeof _Bool
continue if static _Complex
default inline struct _Imaginary
do int switch
double long typedef
else register union

Semantics
2 The above tokens (case sensitive) are reserved (in translation phases 7 and 8) for use as keywords, and shall not be used otherwise.
Вот эти ключевые слова вы не можете использовать в качестве идентификаторов. Все остальные легальные буквосочетания разрешены. Другое дело, что кто-то мог уже использовать их до вас - в заголовочных файлах, например. Чтобы снизить вероятность конфликтов приняты некоторые соглашения. Например: имена идентификаторов, начинающиеся с подчеркивания, зарезервированы за разработчиками библиотк компилятора. Пример таких имен - __disable_interrupt(), __no_operation(). Также есть соглашение, что имена макроопределенний пишутся заглавными буквами.

QUOTE (Syber @ Dec 28 2011, 07:38) *
На моем этапе познания двойная задача: понять смысл слов, которые используются в программе, а с другой стороны надо бы знать какими словами мне в программе мне называть внутренние ресурсы микроконтроллера.
Наверняка такой список есть, но где?
Имена регистров конкретного контроллера вы найдете в заголовочном файле от вашего конкретного контроллера. Там они почти всегда совпадают с именами из даташита. Поскольку каждый производитель выдумывает свои имена для регистров, битов и их сочетаний даже для почти одинаковых контроллеров одного семейства - единого списка нет и быть не может, ибо он будет отличаться для каждого конкретного контроллера.

Просто используйте для ваших переменных и макроопределений осмысленные имена и с большой долей вероятности вы не пересечетесь с именами регистров или битов.
IgorKossak
Цитата(Сергей Борщ @ Dec 28 2011, 09:22) *
Пример таких имен - __disable_interrupt(), __no_operation().

Да, есть такие слова. Это так называемые интринсики (прошу прощения за вольную транскрипцию), которым соответствует вполне определённый код и перечень которых можно найти в одноимённом заголовочном файле у IAR.
Но есть ещё слова, которым не соответствует код, но которые оказывают влияние на его генерацию. И в этом плане IAR весьма плодовит. Информацию о таких словах (__task, __interrupt, __x_z, и т. д., для каждого семейства МК - свой набор) как правило в pdf описаниях можно найти, но не всю. Нужно также листать различные chahge notes с их сайта или из установочной директории.
Надо сказать, что все эти примочки не соответствуют никаким стандартам, что затрудняет написание переносимого кода.
Syber
По поводу зарезервированных слов. Си имеет такие слова, но их (зарезервированные слова) должны иметь и файлы, которые дают понять IAR тип устройства, с которым он работает. Слово А резервирует программист, а специфичные слова для конкретного устройства резервируются каким-то другим файлом и для пользователя уже нет разницы на каком уровне произошло резервирование. Подозреваю, что в моем случае это msp430g2231.h. Чей он? Ведь его я получил с IAR.
Сам изобретать имена для ресурсов микроконтроллера не хочу, иначе трудно будет читать чужие программы.
Цитата(ut1wpr @ Dec 28 2011, 10:02) *
В хелпах к нему. И в хидерных файлах, относящимся к МК проекта. Сам IAR не может знать все мыслимые и немыслимые буквосочетания. Эти слова называются предопределенными, и их дефайны не в IAR-е находятся.

Документации слишком много. Это и сайт TI, и документы в директории установленной IAR. Пока в хелпах ничего не нашел, пороюсь еще. Что такое хидерные файлы? Это то, что подгружается:
#include <msp430g2231.h>
Может подскажите хотя бы имена файлов.
ViKo
Цитата(Syber @ Dec 28 2011, 18:05) *
Что такое хидерные файлы? Это то, что подгружается:
#include <msp430g2231.h>

Это именно оно. Поиском в компьютере найдете этот файл (в одном из подкаталогов IAR, я думаю), а в нем все эти определения регистров, битов, и т.п, относящиеся к вашему конкретному микроконтроллеру.
Syber
Спасибо, нашел. Там дефиниций на 13 листов вордовского текста.
KRS
Цитата(Syber @ Dec 28 2011, 19:05) *
Чей он? Ведь его я получил с IAR.

Простоквашино смотрели?
Цитата
-А вот интересно, чей он?



Цитата
Спасибо, нашел. Там дефиниций на 13 листов вордовского текста.

так меняя настройки шрифта и страницы можно получить практически любое число страниц wink.gif

все эти слова не являются зарезервированными, зарезервированы только те, которые нельзя определить/переопределить в тексте программы!
у IAR обычно имена регистров и их битов совпадают с даташитом, поэтому лучше смотреть в даташит, и достаточно посмотреть пару примеров из комплекта IAR.

Топикстартеру бы рекомендовал для начала попробовать написать на С что то для обычного компа не используя Visual Studio, Broland..., а например GNUC и обычный текстовый редактор. Может быть придет понимание некоторых терминов... откуда .h файлы берутся...





Syber
А что там в Простоквашино?

По поводу зарезервированных слов можно море копий сломать, но это не принципиально, поскольку суть сказанного меня поняли и помогли.
По поводу 13 листов. Для налоговой могу напечатать шрифтом 5 пунктов. Для себя и в деловой переписке использую Times, 12 пунктов, одинарный межстрочный. Не знаю, утвержденный ли это стандарт, но пользуются многие. Именно в этом стандарте 13 листов.
Но вот поднял документацию на IAR, получилось что эти 13 листов сущие пустяки.

По поводу программирования. Скарябал на ассемблере для Электроники 60, а это PDP-11 DEC. Для нее же писал на кроссассемблере разработки Протвино. Но пока позволят ресурсы, хочу попрактиковать на С. На нем тоже писал, но тут начались непонятки. Я понимаю вот такую конструкцию:
a = b & c
Но не могу понять строки из примера с моргающим диодом:
LED_OUT &= ~(LED_0 + LED_1)
Описание С нашел в EW430_CompilerReference.pdf. Там много интересного, но нет описания операторов применительно к IAR.
Палыч
Цитата(Syber @ Jan 12 2012, 22:17) *
... но нет описания операторов применительно к IAR.

В трансляторах бывают расширения стандарта... Но, чтобы были нестандартные операторы - не слышал laughing.gif
Описание операторов Вы найдёте в любом учебнике по языку Си!
KRS
Цитата(Syber @ Jan 12 2012, 22:17) *
Я понимаю вот такую конструкцию:
a = b & c

а такую конструкцию
a &= b;
вы понимаете?

Xenia
Цитата(Syber @ Jan 12 2012, 22:17) *
Но не могу понять строки из примера с моргающим диодом:
LED_OUT &= ~(LED_0 + LED_1)

Это типаж, когда устанавливают биты по маске. Маска - это определение набора битов в виде двоичного числа, в котором нужные биты установлены в 1.
Например, маски для каждого из пинов 8-битного порта будут такими:
#define PIN1 1
#define PIN2 2
#define PIN3 4
#define PIN4 8
#define PIN5 16
#define PIN6 32
#define PIN7 64
#define PIN8 128

Если к пину PIN3 присоединен светодиод LED_0, то LED_0=8 будет маской, его зажигающей.
Чтобы зажечь этот светодиод, надо подать напряжение на этот пин, а для этого нужно эту маску установить в порту:
LED_OUT |= PIN3;
или
LED_OUT |= LED_0;
Это тоже типаж, т.к. операция |=осуществляет логическое сложение. А поскольку у нас в маске только один бит, то только он и ДОБАВИТСЯ!
Присваивать напрямую
LED_OUT = LED_0;
в таких случаях нельзя, т.к. тогда обнулятся другие биты, а вместе с этим исчезнут напряжения на остальных пинах.
А вот если надо СТЕРЕТЬ какой-то один бит, то стирают его так:
LED_OUT &= ~LED_0;
Выглядит вычурно sm.gif, но делает то, что нужно. Т.е. сначала инвертирует маску, а потом "фильтрует" через нее старое значение. В результате чего из LED_OUT сотрется только бит LED_0, а остальные биты в нем сохранятся неизменными.

Тот же механизм работает, если в маске более одного бита. Например, выражение LED_0+LED_1 - это маска обоих светодиодов. Ее можно записать и так LED_0|LED_1.
Поэтому, если надо зажечь СРАЗУ оба светодиода, то зажигают их так:
LED_OUT |= (LED_0+LED_1);
а гасят так:
LED_OUT &= ~(LED_0+LED_1);

Но так светодиоды зажигаются, если они горят на напряжении, выдаваемом контроллером. Но можно (и даже лучше) зажигать светодиод, присоединяя один из его выводов через гасящий резитор к плюсу питания, а другой его вывод заземлять через пин контроллера. В этом случае наши операции станут работать наоборот.
LED_OUT |= (LED_0+LED_1); будет гасить, а LED_OUT &= ~(LED_0+LED_1); будет зажигать.
Syber
Цитата(Палыч @ Jan 12 2012, 23:02) *
Но, чтобы были нестандартные операторы - не

Что же вы так за слова цепляетесь. Мне что, полстраницы тратить на то, что вы компилятор IAR назвали транслятором? Не буду на это отвлекаться.
Я сказал не о нестандартных операторах а о каком-то нестандартном их применении, о нестандартных комбинациях. И даже привел пример. Меня всегда учили делать программу наглядной и легко читаемой.
Цитата(KRS @ Jan 12 2012, 23:44) *
а такую конструкцию
a &= b;
вы понимаете?

Такого не видел. Это эквивалент a = a & b ? Если да, то он менее нагляден. Зачем так писать? Код экономится или причина другая?

Xenia, у меня вопрос не о механизме управления портам, вопрос о синтаксисе языка С IAR. Правильно ли я понимаю, что конструкцию
LED_OUT &= ~(LED_0 + LED_1)
Можно записать как:
LED_OUT = LED_OUT & ~(LED_0 + LED_1)

Аналогично побитовое включающее ИЛИ:
LED_OUT |= LED_0
Можно записать:
LED_OUT = LED_OUT | LED_0

scifi
Цитата(Syber @ Jan 13 2012, 10:42) *
Такого не видел. Это эквивалент a = a & b ?

Зачем Вы так подставляетесь? Следующий очевидный вопрос: Вы хоть одну книжку про язык Си читали? Ну неприлично просто, ей-богу.

Цитата(Syber @ Jan 13 2012, 10:42) *
Если да, то он менее нагляден.

Вам - менее нагляден. Мне и, осмелюсь предположить, большинству других программистов - более нагляден.
Syber
Что значит подставться? Я за себя спокоен, а перед снобами и поподставляться не грех - забавляет. Мне важно суть понять. В книги залезаю изредка, а С мне преподавали в одной из контор Рязани. Вот влез в учебник С++ Kris Jamsa. Подобных конструкций там не нашел
И вопрос по существу. Эти две конструкции допустимы:
LED_OUT &= ~(LED_0 + LED_1)
LED_OUT =& ~(LED_0 + LED_1)

Сергей Борщ
QUOTE (Syber @ Jan 13 2012, 08:42) *
Что же вы так за слова цепляетесь. Мне что, полстраницы тратить на то, что вы компилятор IAR назвали транслятором? Не буду на это отвлекаться.
Потому что в любой области знания существует своя терминология. И если вы хотите изучить эту область и хотите, чтобы вас понимали - надо применять именно эту терминологию. А не придумывать свои значения существующим терминам и пытаться навязать их остальным. Компилятор IAR является таки компилятором, полстраницы тратить не надо.
QUOTE (Syber @ Jan 13 2012, 08:42) *
Такого не видел. Это эквивалент a = a & b ? Если да, то он менее нагляден. Зачем так писать? Код экономится или причина другая?
О чем и речь. Прежде чем писать программу, надо изучить инструмент. В данном случае - язык Си. Для этого существуют книги. Форум предназначен для другого. "Чтение информации из интернета вслух - $200/час".
Syber
Цитата(Сергей Борщ @ Jan 13 2012, 11:43) *
Прежде чем писать программу, надо изучить инструмент. В данном случае - язык Си. Для этого существуют книги. Форум предназначен для другого.

Я так понимаю, идет развод на амбиции, но это не для меня, я себе цену знаю. Именно поэтому я не стесьняюсь здесь говорить о том, что мне непонятно в конкретном компиляторе. Я уже говорил, что приходилось программировать для PDP-11 и с тех пор пауз в программировании не было. Чтобы не было ля-ля с вашей стороны, я привел название книги, которая есть под рукой. Дайте номер страницы, где были бы комбинации операторов |= или &=. Нет там такого. Я рад, что вы освоили компилятор IAR с его спецификой и могли бы вместо амбиций и старческого брюзжания дать ссылку на описание СИ для IAR. В комплекте документации IAR я такого не нашел.
Еще раз скажу, что если вы заявляете, что приведенные комбинации операторов свойственны С, то это говорит о том, что вы знаете только конкретную модификацию, осваивали С по фирменным образцам, но не С в классическом виде.
Палыч
Цитата(Syber @ Jan 13 2012, 10:42) *
Я сказал не о нестандартных операторах а о каком-то нестандартном их применении, о нестандартных комбинациях.
О каком стандарте идёт речь?

Цитата(Syber @ Jan 13 2012, 10:42) *
Такого не видел. Это эквивалент a = a & b ? Если да, то он менее нагляден. Зачем так писать? Код экономится или причина другая?
Для простейшего случая (например, приведенного Вами) - возможно, что и менее нагляден (что, впрочем, не факт). А, вот, если вместо "b" - давольно длинное выражение - то, такая конструкция более наглядна.

Цитата(Syber @ Jan 13 2012, 10:42) *
Правильно ли я понимаю, что конструкцию... Можно записать как...
Аналогично побитовое включающее ИЛИ...
Совершенно правильно.

Цитата(Syber @ Jan 13 2012, 11:41) *
И вопрос по существу. Эти две конструкции допустимы:
LED_OUT &= ~(LED_0 + LED_1)
LED_OUT =& ~(LED_0 + LED_1)
Первая - да. Вторая - нет. Обратите внимание, что "&" - 1) поразрядное логическое И; 2) определение адреса переменной. Поэтому, в некоторых случаях допустимы как "a&=b", так и "a=&b". Вот, только эти записи имеют совсем разный смысл.

Присоединюсь к мнению тов. Сергей Борщ: знания по языку Си у Вас - поверхностные и нужно их основательно пополнить...


Цитата(Syber @ Jan 13 2012, 15:47) *
Еще раз скажу, что если вы заявляете, что приведенные комбинации операторов свойственны С, то это говорит о том, что вы знаете только конкретную модификацию, осваивали С по фирменным образцам, но не С в классическом виде.
Высказывания некоторых товарищей в Ваш адрес основаны на том, что приведенные выше конструкции - как раз и есть классический (стандартный) язык Си.
Сергей Борщ
QUOTE (Syber @ Jan 13 2012, 13:47) *
Я так понимаю, идет развод на амбиции
Вам пытаются объяснить, что сначала надо прочитать книги, а потом пытаться программировать.
QUOTE (Syber @ Jan 13 2012, 13:47) *
я привел название книги, которая есть под рукой. Дайте номер страницы, где были бы комбинации операторов |= или &=. Нет там такого.
Значит это очень плохая книга, и вам надо взять другую. У Кернигана и Ритчи, в его втором издании "Языка программирования Си" это есть в разделе 2.10 "Операторы и выражения присваивания". Страницу, как и саму книгу в интернете, найдите сами. Хотя, учитывая что
QUOTE (Syber @ Jan 13 2012, 09:41) *
В книги залезаю изредка,
остается лишь пожелать вам успехов в вашем нелегком пути познания методом тыка.

QUOTE (Syber @ Jan 13 2012, 13:47) *
Я рад, что вы освоили компилятор IAR с его спецификой и могли бы вместо амбиций и старческого брюзжания дать ссылку на описание СИ для IAR.
А, так это вы искали в магазинах чернила для второго класса? Описание Си есть в стандарте языка и у Кернигана с Ритчи. В документации на компилятор описываются дополнения и поведение в тех случаях, которые в стандарте описаны как "определяется реализацией".
QUOTE (Syber @ Jan 13 2012, 13:47) *
Еще раз скажу, что если вы заявляете, что приведенные комбинации операторов свойственны С, то это говорит о том, что вы знаете только конкретную модификацию, осваивали С по фирменным образцам, но не С в классическом виде.
Нет, вы ошибаетесь. И это ваше заявление говорит о том, что вы понятия не имеете о том, о чем пытаетесь судить, но это не мешает вам раскидываться громкими заявлениями. Общение с такими людьми мне, как, пожалуй, и большинству участников, неинтересно. На этом закругляюсь. Еще раз повторю: "Чтение документации из интернета вслух - $200/час".
mdmitry
Цитата(Сергей Борщ @ Jan 13 2012, 15:38) *
Еще раз повторю: "Чтение документации из интернета вслух - $200/час".

Ссылки бесплатны для вопрошающегоbiggrin.gif :
1
2
3
4
sparcmaster
Цитата(Syber @ Jan 13 2012, 15:47) *
Чтобы не было ля-ля с вашей стороны, я привел название книги, которая есть под рукой. Дайте номер страницы, где были бы комбинации операторов |= или &=. Нет там такого.

Как раз-таки тут ля-ля с вашей стороны. В книжках для чайников много чего не приводится в силу способностей целевой аудитории таких книг. А составные операторы используются повсеместно, не зависимо от того, написано ли про это в вашей книге.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.