Технический Портал Левши Четверг, 02.05.2024, 14:43
| RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: terpelivi, VasylYE  
ТЕХНИЧЕСКИЙ ФОРУМ » ЭЛЕКТРОНИКА » МИКРОКОНТРОЛЛЕРЫ » Особенности Си для микроконтроллеров (Особенности компиляторов)
Особенности Си для микроконтроллеров
OlegacityДата: Воскресенье, 26.10.2008, 10:59 | Сообщение # 1
Лейтенант
Группа: Проверенные
Сообщений: 50
Награды: 0
Статус: Offline
Доброго всем здоровья.
Часто встречается синтаксическая конструкция типа code usb_device_descriptor usb_dev_desc = { ну т. д. ....
Вопрос касается идентификатора code. В "Практике программирования USB" Агуров П. В. пишет, что это означает размещение переменной в памяти программ.
Однако не могу найти прямого и явного описания правильного применения таких идентификаторов, как code, data, idata, xdata, в документации
от производителей компиляторов. Если же просто употребить, как написано, то GCC, например, не понимает.
В программных примерах от Atmel, таких фрагментов тоже полно. Подскажите где поискать-почитать.
http://src.ucoz.net/sm/1/deal.gif
[deal]


Недостаток знаний сужает кругозор до точки зрения
 
VasylYEДата: Понедельник, 27.10.2008, 18:37 | Сообщение # 2
Рядовой
Группа: Проверенные
Сообщений: 263
Награды: 1
Статус: Offline
Для AVR контроллеров наилучшим компилятором считается IAR, ссылку на версию 5.11 с всем что надо я давал в разделе технические программы. для 51-ых - нет равных Keil-у
И в иаре, и в кеиле переменные автоматически размещаются в памяти данных, на то они и переменные.
чтобы разместить константу в памяти программ, используют в кеиле идент. code, в иар - например -
__flash unsigned char message[] = "ATmega16 powered"; (что то типа этого, потом к константе можно доступиться через указатель)
советую почитать аппноут AVR035 Efficient C Coding for AVR
он также есть переведен на русский язык
с GCC сложнее, он все пихает в оперативку, для работы с памятью програм у него есть специальные функции


А нам своє робить!
 
OlegacityДата: Понедельник, 27.10.2008, 20:11 | Сообщение # 3
Лейтенант
Группа: Проверенные
Сообщений: 50
Награды: 0
Статус: Offline
Спасибо.
Да, да. Аппноут-то я как-то не почитал.
Однако нашел-таки в фирменных исходниках .h файл, где так прям и написано:#define code и т. д.
А AVR035 непременно изучу.
P. S.
а для AT90xxxx Си шный IAR есть?


Недостаток знаний сужает кругозор до точки зрения
 
VasylYEДата: Среда, 29.10.2008, 17:02 | Сообщение # 4
Рядовой
Группа: Проверенные
Сообщений: 263
Награды: 1
Статус: Offline
Quote (Olegacity)
а для AT90xxxx Си шный IAR есть?

Вышеупомянутая версия поддерживает AT90xxxx, ATMega, ATXmega - все мк с авр ядром
Quote (Olegacity)
Однако нашел-таки в фирменных исходниках .h файл, где так прям и написано:#define code и т. д.

для какого мк файл?


А нам своє робить!
 
OlegacityДата: Понедельник, 26.01.2009, 23:25 | Сообщение # 5
Лейтенант
Группа: Проверенные
Сообщений: 50
Награды: 0
Статус: Offline
Quote (VasylYE)
для какого мк файл?

Для AT90USB1287

Добавлено (26.01.2009, 23:25)
---------------------------------------------
Есть вопрос про препроцессор. Пытаю многих, но что-то пока никак.
Вот есть строки:
#ifndef _CONF_USB_H_
#define _CONF_USB_H_
Что это может значить?
То есть именно вторая строка. Помогите. huh


Недостаток знаний сужает кругозор до точки зрения
 
VasylYEДата: Вторник, 27.01.2009, 11:40 | Сообщение # 6
Рядовой
Группа: Проверенные
Сообщений: 263
Награды: 1
Статус: Offline
_CONF_USB_H_ - это константа (может быть пустой, т.е. не принимать никакого значения)

первой строчкой мы проверяем, определена ли уже такая константа
если не определена, то вторая строчка ее определяет
(в указаном случае с пустым значением).

Эта константа может использоваться (если она пустая) где то дальше в программе для так называемой условной компиляции, то есть где то ниже может быть следующее

<код>
#ifdef _CONF_USB_H_
<код>
#endif
<код>

участок, выделенный синим, будет скомпилирован только в том случае, если определена константа _CONF_USB_H_

это один из возможных применений.

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


А нам своє робить!
 
OlegacityДата: Вторник, 27.01.2009, 13:20 | Сообщение # 7
Лейтенант
Группа: Проверенные
Сообщений: 50
Награды: 0
Статус: Offline
Quote (VasylYE)
_CONF_USB_H_ - это константа (может быть пустой, т.е. не принимать никакого значения)

Да уж... Скрипучие у меня мозги.
Я-то думал, что этим #define, как пишут, только подменяется одно другим и все.
Ан вон оно, что... Ладно, поскрипим дальше.

Большое спасибо! book


Недостаток знаний сужает кругозор до точки зрения
 
ТЕХНИЧЕСКИЙ ФОРУМ » ЭЛЕКТРОНИКА » МИКРОКОНТРОЛЛЕРЫ » Особенности Си для микроконтроллеров (Особенности компиляторов)
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2024