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

 
 
> Зарезервированные слова IAR
Syber
сообщение Dec 27 2011, 19:07
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 25-11-11
Пользователь №: 68 522



Начинаю вникать в MSP430G2, купил LAunchPad и решил начать с осмысливания программы "моргающий светодиод", разбирая прошитую программу. Насколько понял, WDTCTL, WDTPW, WDTHOLD - зарезервированные слова. Нашел их описание. К зарезервированным, насколько понял, относятся CCTL0, CCIE, TACTL ну и наверно другие. Где найти перечень всех зарезервированных слов для IAR и их описание?
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
scifi
сообщение Dec 27 2011, 20:37
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Сам я MSP430 не занимался, но то, что Вы называете "зарезервированными словами" таковыми не являются, строго говоря. Это похоже на регистры микроконтроллера. Обычно они определяются как макросы или специальные переменные. Определения содержатся в заголовочном файле (например, msp430x21x2.h). Описание регистров обычно находится в справочном руководстве микроконтроллера.
Go to the top of the page
 
+Quote Post
Syber
сообщение Dec 28 2011, 05:38
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 25-11-11
Пользователь №: 68 522



Зарезервированными словами в языках программирования называют слова, имеющее специальное значение. Идентификаторы с такими именами запрещены. WDTCNT - это счетчик таймера. Это слово я не имею право использовать как переменую. Самый простой пример: попробуйте в виндозе создать файл с именем lpt. Скорее всего у вас ничего не получится, поскольку это слово зарезервировани под параллельный порт. Зато я могу в командах и программах при помощи этого слова обращаться к параллельному порту и наоборот, увидев слово lpt я знаю, что это не имя переменной, а конкретное оборудование.
На моем этапе познания двойная задача: понять смысл слов, которые используются в программе, а с другой стороны надо бы знать какими словами мне в программе мне называть внутренние ресурсы микроконтроллера.
Наверняка такой список есть, но где?
Go to the top of the page
 
+Quote Post
ut1wpr
сообщение Dec 28 2011, 06:02
Сообщение #4


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

Группа: Участник
Сообщений: 98
Регистрация: 20-06-05
Пользователь №: 6 150



Цитата(Syber @ Dec 27 2011, 23:07) *
Начинаю вникать в MSP430G2, купил LAunchPad и решил начать с осмысливания программы "моргающий светодиод", разбирая прошитую программу. Насколько понял, WDTCTL, WDTPW, WDTHOLD - зарезервированные слова. Нашел их описание. К зарезервированным, насколько понял, относятся CCTL0, CCIE, TACTL ну и наверно другие. Где найти перечень всех зарезервированных слов для IAR и их описание?
В хелпах к нему. И в хидерных файлах, относящимся к МК проекта. Сам IAR не может знать все мыслимые и немыслимые буквосочетания. Эти слова называются предопределенными, и их дефайны не в IAR-е находятся.

Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 28 2011, 07:22
Сообщение #5


Гуру
******

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



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) *
На моем этапе познания двойная задача: понять смысл слов, которые используются в программе, а с другой стороны надо бы знать какими словами мне в программе мне называть внутренние ресурсы микроконтроллера.
Наверняка такой список есть, но где?
Имена регистров конкретного контроллера вы найдете в заголовочном файле от вашего конкретного контроллера. Там они почти всегда совпадают с именами из даташита. Поскольку каждый производитель выдумывает свои имена для регистров, битов и их сочетаний даже для почти одинаковых контроллеров одного семейства - единого списка нет и быть не может, ибо он будет отличаться для каждого конкретного контроллера.

Просто используйте для ваших переменных и макроопределений осмысленные имена и с большой долей вероятности вы не пересечетесь с именами регистров или битов.


--------------------
На любой вопрос даю любой ответ
"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
IgorKossak
сообщение Dec 28 2011, 07:42
Сообщение #6


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Сергей Борщ @ Dec 28 2011, 09:22) *
Пример таких имен - __disable_interrupt(), __no_operation().

Да, есть такие слова. Это так называемые интринсики (прошу прощения за вольную транскрипцию), которым соответствует вполне определённый код и перечень которых можно найти в одноимённом заголовочном файле у IAR.
Но есть ещё слова, которым не соответствует код, но которые оказывают влияние на его генерацию. И в этом плане IAR весьма плодовит. Информацию о таких словах (__task, __interrupt, __x_z, и т. д., для каждого семейства МК - свой набор) как правило в pdf описаниях можно найти, но не всю. Нужно также листать различные chahge notes с их сайта или из установочной директории.
Надо сказать, что все эти примочки не соответствуют никаким стандартам, что затрудняет написание переносимого кода.
Go to the top of the page
 
+Quote Post
Syber
сообщение Dec 28 2011, 15:05
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 25-11-11
Пользователь №: 68 522



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

Документации слишком много. Это и сайт TI, и документы в директории установленной IAR. Пока в хелпах ничего не нашел, пороюсь еще. Что такое хидерные файлы? Это то, что подгружается:
#include <msp430g2231.h>
Может подскажите хотя бы имена файлов.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 29 2011, 10:18
Сообщение #8


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Syber @ Dec 28 2011, 18:05) *
Что такое хидерные файлы? Это то, что подгружается:
#include <msp430g2231.h>

Это именно оно. Поиском в компьютере найдете этот файл (в одном из подкаталогов IAR, я думаю), а в нем все эти определения регистров, битов, и т.п, относящиеся к вашему конкретному микроконтроллеру.
Go to the top of the page
 
+Quote Post
Syber
сообщение Dec 29 2011, 17:58
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 25-11-11
Пользователь №: 68 522



Спасибо, нашел. Там дефиниций на 13 листов вордовского текста.
Go to the top of the page
 
+Quote Post
KRS
сообщение Dec 30 2011, 11:52
Сообщение #10


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(Syber @ Dec 28 2011, 19:05) *
Чей он? Ведь его я получил с IAR.

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



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

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

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

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





Go to the top of the page
 
+Quote Post
Syber
сообщение Jan 12 2012, 18:17
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 25-11-11
Пользователь №: 68 522



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

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

По поводу программирования. Скарябал на ассемблере для Электроники 60, а это PDP-11 DEC. Для нее же писал на кроссассемблере разработки Протвино. Но пока позволят ресурсы, хочу попрактиковать на С. На нем тоже писал, но тут начались непонятки. Я понимаю вот такую конструкцию:
a = b & c
Но не могу понять строки из примера с моргающим диодом:
LED_OUT &= ~(LED_0 + LED_1)
Описание С нашел в EW430_CompilerReference.pdf. Там много интересного, но нет описания операторов применительно к IAR.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jan 12 2012, 19:02
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Syber @ Jan 12 2012, 22:17) *
... но нет описания операторов применительно к IAR.

В трансляторах бывают расширения стандарта... Но, чтобы были нестандартные операторы - не слышал laughing.gif
Описание операторов Вы найдёте в любом учебнике по языку Си!
Go to the top of the page
 
+Quote Post
KRS
сообщение Jan 12 2012, 19:44
Сообщение #13


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(Syber @ Jan 12 2012, 22:17) *
Я понимаю вот такую конструкцию:
a = b & c

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

Go to the top of the page
 
+Quote Post
Xenia
сообщение Jan 12 2012, 19:48
Сообщение #14


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(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); будет зажигать.
Go to the top of the page
 
+Quote Post
Syber
сообщение Jan 13 2012, 06:42
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 25-11-11
Пользователь №: 68 522



Цитата(Палыч @ 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

Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 2nd August 2025 - 15:55
Рейтинг@Mail.ru


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