Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: at91
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Страницы: 1, 2
defunct
Цитата(zltigo @ Aug 19 2008, 00:54) *
Вы пользуетесь макросами типа
#define NAME *(struct *)0xXXXXXXX
Это не указатель.

Нет Вы не правы. Макросы вот такие:
((AT91PS_EMAC) 0xFFFDC000)
эквивалентно:
((Struct *) 0xFFFDC000)

т.е. это честные указатели на группы регистров.

Цитата
Настоятельно и, по-моему, обоснованно рекомендую.

Если Вы про Редькина, то я согласен.
aaarrr
Цитата(defunct @ Aug 19 2008, 01:58) *
Если Вы про Редькина, то я согласен.

Нет, как не трудно догадаться, не про Редькина. Хотя его книжкам самое место в печке.

Цитата(zltigo @ Aug 19 2008, 01:57) *
Ошибки я предпочитаю искать глазами и головой а не долгими брождениями в отладчике и перечитываю написанное много.

Я тоже. Мозг требуху типа AT91S_ фильтрует достаточно легко.
zltigo
Цитата(aaarrr @ Aug 18 2008, 23:57) *
А тут пытались ересь впарить невинным душам smile.gif

О чем и речь sad.gif.
defunct
Цитата(aaarrr @ Aug 19 2008, 01:02) *
Нет, как не трудно догадаться, не про Редькина.

Насчет же lib_AT91 я также приводил обоснованные примеры где ее использование сокращает уйму времени - ADCConfigureTimings, PDC_ReceiveFrame (да и все что связано с DMA), все без исключения xx_Configure хотя бы в образовательных целях. Имена функций более вменяемые по-сравнению с названиями регистров "EPRST" и иже с ним.
zltigo
Цитата(defunct @ Aug 18 2008, 23:58) *
т.е. это честные указатели на группы регистров.

smile.gif если это указатели, то запись
pNAME = x присваивает значение УКАЗАТЕЛЮ а не обьекту smile.gif. Посему вычитывайте макросы дальше до прояснения написанного в них.
aaarrr
Цитата(defunct @ Aug 19 2008, 02:09) *
Насчет же lib_AT91 я также приводил обоснованные примеры где ее использование сокращает уйму времени - ADCConfigureTimings, PDC_ReceiveFrame (да и все что связано с DMA), все без исключения xx_Configure хотя бы в образовательных целях.

Какой толк в таком "образовании"? Сами же писали, что можно использовать PDC_ReceiveFrame и забить на чтение документации.
Вот научится человек ADCConfigureTimings вызывать и никогда не узнает, как этот ADC работает.

Я тоже привел обоснованный пример где функция из lib_ содержит 2 ошибки.
defunct
Цитата(zltigo @ Aug 19 2008, 01:10) *
pNAME = x присваивает значение УКАЗАТЕЛЮ а не обьекту smile.gif. Посему вычитывайте макросы дальше до прояснения написанного в них.

это константный указатель.
pBASE_NAME = x - не имеет смысла вообще.


#define X (U32 *)(0xFFFF0000)

X = x; <- не имеет смысла
*X = x; пишем x по адресу 0xFFFF0000.



typedef struct tagMYSTRUCT
{
U32 x, y;
} *PMYSTRUCT;

#define X ((PMYSTRUCT) 0xFFFF0000)

X - структура из элементов x, y по адресу 0xFFFF0000
X = z; - не имеет смысла.
X->x = z; пишем z по адресу 0xFFFF0000
X->y = z; пишем z по адресу 0xFFFF0000 + 4
zltigo
Цитата(defunct @ Aug 19 2008, 00:16) *
это константный указатель.

Может стоит освежить знания языка? А то, право, как-то странно общаться sad.gif. Константный, не константный дело второе.
Цитата
pBASE_NAME = x - не имеет смысла вообще.

Ага, но именно ТАК Вы пишите и работает по той причине, что это на самом деле НЕ указатель (мамнадчатый раз уже пишу) хотя перед ним и у Вас ОШИБОЧНО стоит 'p' а выражение эквивалентное:
*pBASE_NAME = x;

Цитата(defunct @ Aug 19 2008, 00:16) *
это константный указатель.

Может стоит освежить знания языка? А то, право, как-то странно общаться sad.gif. Константный, не константный дело второе.
Цитата
pBASE_NAME = x - не имеет смысла вообще.

Ага, но именно ТАК Вы пишите и работает по той причине, что это на самом деле НЕ указатель (мамнадчатый раз уже пишу) хотя перед ним у Вас и стоит 'p'. Это, простите, Ваш "стиль" и Ваш код с котрого все началось:
Цитата(defunct @ Aug 18 2008, 22:40) *
pPITC->PITC_PIMR = x;

Так какому из Вас теперь верить smile.gif.
defunct
Цитата(aaarrr @ Aug 19 2008, 01:15) *
Какой толк в таком "образовании"? Сами же писали, что можно использовать PDC_ReceiveFrame и забить на чтение документации.

Забить? я прямо так и сказал? Не может быть.
Вот мои слова:
Цитата
По ней сразу видно как надо работать с DMA даже без вникания в ДШ.

Прочитать то ДШ надо, но если не пользовать библиотеку, то его еще надо понять/вникнуть в тонкости, а функция - дает понимание того как должно быть, сразу после поверхностного ознакомления с ДШ.

Цитата
Я тоже привел обоснованный пример где функция из lib_ содержит 2 ошибки.
Честно сказать, я не нашел функций на которые Вы ссылались в моей библиотеке, поэтому не могу ни подтвердить, ни опровергнуть.
//* Generated : AT91 SW Application Group 09/12/2005 (15:39:14)


Цитата(zltigo @ Aug 19 2008, 01:28) *
Может стоит освежить знания языка? А то, право, как-то странно общаться sad.gif.

ок давайте освежим
это что:
(int *)(0xFFFF0000)

Цитата
Ага, но именно ТАК Вы пишите и работает по той причине, что это на самом деле НЕ указатель (мамнадчатый раз уже пишу) хотя перед ним и у Вас ОШИБОЧНО стоит 'p' а выражение эквивалентное:
*pBASE_NAME = x;

'p' там правильно стоит.
Выражение эквивалентное *pBASE_NAME = x; - запись ПО адресу pBASE_BAME.


Цитата
Цитата
pBASE_NAME = x - не имеет смысла вообще.

Ага, но именно ТАК Вы пишите и работает по той причине, что это на самом деле НЕ указатель (мамнадчатый раз уже пишу) хотя перед ним и стоит 'p'. Это, простите, Ваш "стиль" и Ваш код:
Код
pPITC->PITC_PIMR = x;


Как так?
pPITC->PITC_PIMR = x; != pPITC = x;

pPITC->PITC_PIMR = x; == *((U32 *)pPITC + PIMR_OFFSET) = x;
aaarrr
Цитата(defunct @ Aug 19 2008, 02:29) *
Вот мои слова:

А это, интересно, чьи:
Цитата
Можно ничего не читая про DMA правильно с ним работать!


Цитата(defunct @ Aug 19 2008, 02:29) *
Честно сказать, я не нашел функций на которые Вы ссылались в моей библиотеке, поэтому не могу ни подтвердить, ни опровергнуть.
//* Generated : AT91 SW Application Group 09/12/2005 (15:39:14)

Google по этой строчке находит at91sam7x256.h. Неужели в одну секунду lib_ и .h сделали?
defunct
Цитата(aaarrr @ Aug 19 2008, 01:40) *
А это, интересно, чьи:
Цитата
Можно ничего не читая про DMA правильно с ним работать!

Фраза, выдранная из контекста меняет смысл полностью. Я не давал рекомендаций забивать на документацию нигде. В оригинале было:
Цитата
Там алгоритм загрузки указателей DMA. Можно ничего не читая про DMA правильно с ним работать! В этом и прелесть.

Упор был на то, что достаточно сложный модуль можно использовать без елозиния по ДШ часами.

Цитата
Google по этой строчке находит at91sam7x256.h. Неужели в одну секунду lib_ и .h сделали?

Я так понимаю это дата всего пакета.
//* File Name : lib_AT91SAM7X256.h
//* Object : AT91SAM7X256 inlined functions
//* Generated : AT91 SW Application Group 09/12/2005 (15:39:14)
zltigo
Цитата(defunct @ Aug 19 2008, 00:40) *
Как так?

Тфу, что-то у меня ночью в голове перемешалось и заклинило - "многозадачность" по ночам сбоит sad.gif
defunct
Цитата(zltigo @ Aug 19 2008, 01:52) *
Тфу, что-то у меня ночью в голове перемешалось и заклинило - "многозадачность" по ночам сбоит sad.gif

Бывает beer.gif
aaarrr
Цитата(defunct @ Aug 19 2008, 02:50) *
Фраза выдранная из контекста менят смысл полностью. Я не давал рекомендаций забивать на документацию нигде. В оригинале было:
Цитата

Там алгоритм загрузки указателей DMA. Можно ничего не читая про DMA правильно с ним работать! В этом и прелесть.

Контекст здесь только уточняет, что можно пользоваться алгоритмом не читая документацию. Смысл не меняется.

Цитата(defunct @ Aug 19 2008, 02:50) *
Упор был на то, что достаточно сложный модуль можно использовать без елозиния по ДШ часами.

PDC сам по себе простой, как грабли - полное описание занимает 2 страницы.

Цитата(defunct @ Aug 19 2008, 02:50) *
Я так понимаю это дата всего пакета.

ОК. И что, в ней нет функции AT91F_PITInit?

У меня:
Код
//* File Name           : lib_AT91SAM7X256.h
//* Object              : AT91SAM7X256 inlined functions
//* Generated           : AT91 SW Application Group  08/18/2006 (15:29:55)
...
//* CVS Reference       : /lib_pitc_6079A.h/1.2/Thu Nov  4 14:01:11 2004//
defunct
Цитата(aaarrr @ Aug 19 2008, 02:03) *
ОК. И что, в ней нет функции AT91F_PITInit?

нет sad.gif

Цитата
Контекст здесь только уточняет, что можно пользоваться алгоритмом не читая документацию. Смысл не меняется.

Да, алгоритмом пользоваться можно. Смысл меняется кардинально. Документация создается для описания устройства и алгоритмов работы с ним, а в ReceiveFrame мы имеем описание алгоритма 10-ю строчками. Чем в таком случае lib_ не удовлетворяет понятию документация?

Цитата
PDC сам по себе простой, как грабли - полное описание занимает 2 страницы.

Простой, но тем не менее многие делают типичную ошибку - загружают только 1 указатель.
zltigo
Цитата(defunct @ Aug 19 2008, 01:01) *
Бывает beer.gif

Кстати, совершенно нагляднейший пример сбоя в мозгах при натыкании на непривычный синтаксис абсолютно чуждый (мне по крайней мере smile.gif ) 'p' увидел и "все" sad.gif....
aaarrr
Цитата(defunct @ Aug 19 2008, 03:19) *
нет sad.gif

Странно, в более ранней есть.
Код
//* Generated           : AT91 SW Application Group  05/20/2005 (16:22:29)


Цитата(defunct @ Aug 19 2008, 03:19) *
Да, алгоритмом пользоваться можно. Смысл меняется кардинально. Документация создается для описания устройства и алгоритмов работы с ним, а в ReceiveFrame мы имеем описание алгоритма 10-ю строчками. Чем в таком случае lib_ не удовлетворяет понятию документация?

В ReceiveFrame мы не имеем никакого описания, даже brief скопипасчен и не исправлен:
Код
//*----------------------------------------------------------------------------
//* \fn    AT91F_PDC_ReceiveFrame
//* \brief Close PDC: disable TX and RX reset transfer descriptors
//*----------------------------------------------------------------------------


Цитата(defunct @ Aug 19 2008, 03:19) *
Простой, но тем не менее многие делаю типичную ошибку - загружают только 1 указатель.

Это не ошибка. Если я, например, хочу передать 1 пакет через UART, то второй указатель мне и не нужен.

А в блаженные времена AT91M40800 второго и не было.
defunct
Цитата(aaarrr @ Aug 19 2008, 02:32) *
Странно, в более ранней есть.
//* Generated : AT91 SW Application Group 05/20/2005 (16:22:29)

Перепроверю завтра.

Цитата
В ReceiveFrame мы не имеем никакого описания, даже brief скопипасчен и не исправлен:
Там самодокументируемый код описание прямо в нем (см. имена функций и переменных):
Код
    if (AT91F_PDC_IsRxEmpty(pPDC)) {
        //* Buffer and next buffer can be initialized
        AT91F_PDC_SetRx(pPDC, pBuffer, szBuffer);
        AT91F_PDC_SetNextRx(pPDC, pNextBuffer, szNextBuffer);
        return 2;
    }
    else if (AT91F_PDC_IsNextRxEmpty(pPDC)) {
        //* Only one buffer can be initialized
        AT91F_PDC_SetNextRx(pPDC, pBuffer, szBuffer);
        return 1;
    }
    else {
        //* All buffer are in use...
        return 0;
    }

Цитата
Это не ошибка. Если я, например, хочу передать 1 пакет через UART, то второй указатель мне и не нужен.

А в блаженные времена AT91M40800 второго и не было.
Дык, мы ж о ReceiveFrame говорим smile.gif Приход данных от нас не зависит.
Времена поменялись, народ забывает использовать NextBuf даже при непрерывном чтении.
aaarrr
Цитата(defunct @ Aug 19 2008, 03:57) *
Там самодокументируемый код описание прямо в нем (см. имена функций и переменных):

Да ради Бога, но представления о механизме работы двойной буферизации он все равно не дает.

Цитата(defunct @ Aug 19 2008, 03:57) *
Дык, мы ж о ReceiveFrame говорим smile.gif

Хорошо, хочу принять данные из SPI. Так устроит? smile.gif
defunct
Цитата(aaarrr @ Aug 19 2008, 03:09) *
но представления о механизме работы двойной буферизации он все равно не дает.
Надо чтобы кто-то третий взглянул, желательно перед и после прочтения ДШ. А то у нас с Вами субъективные взгляды.

Цитата
Хорошо, хочу принять данные из SPI. Так устроит? smile.gif
Ок, это исключение wink.gif
sergeeff
Я бы несколько по-другому поставил вопрос. Полезно ли embedded разработчику наличие lib_xxx или вы считаете, чтобы лучше ее и не было? Пожалуй, все таки полезно.
aaarrr
Тем, кто имеет слабость лениться думать самостоятельно, наличие этой библиотеки может навредить. А для остальных использование lib_ просто лишено смысла по причине примитивности функций и простоты периферии SAM'ов.

Как разработчик я бы предпочел иметь от Atmel'а пустую errat'у, а не сомнительного качества библиотеку.
SergeiCh
Цитата(sergeeff @ Aug 19 2008, 12:52) *
Полезно ли embedded разработчику наличие lib_xxx или вы считаете, чтобы лучше ее и не было?

Сами Atmel'цы от нее, похоже, отказались. В последних AT91 Software Package и at91xxx_getting_started нет lib_xxx, но есть at91lib, на которую от наших Гуру, насколько можно представить, будет/есть не меньше нареканий smile.gif А что поделаешь?! Индийским студентам тоже надо кушать smile.gif
asket
Работаю в Crossworks, хотелось бы поработать с lib_1t91sam7xxx.h, но при объявлении сия заголовочного файла в нескольких исходниках на си компилер ругается, ссылаясь на Multiple definition of, как этим бороться? Пробывал объявить extern, та же фигня..( Заранее благодарен!
aaarrr
Цитата(asket @ Aug 19 2008, 11:53) *
Работаю в Crossworks, хотелось бы поработать с lib_1t91sam7xxx.h

И работали бы спокойно дальше.

Мне интересно, что для Вас изменится с использованием этой "библиотеки"? Какие плюсы Вы видите?

Цитата(asket @ Aug 19 2008, 11:53) *
при объявлении сия заголовочного файла в нескольких исходниках на си компилер ругается, ссылаясь на Multiple definition of, как этим бороться? Пробывал объявить extern, та же фигня..( Заранее благодарен!

Хидер защищен, проблем с multiple definition быть не должно. Куда Вы пытались прикрутить extern???
zltigo
Цитата(aaarrr @ Aug 19 2008, 08:15) *
Тем, кто имеет слабость лениться думать самостоятельно, наличие этой библиотеки может навредить.

Для начинающих это еще сразу дает образчик дурнейшего стиля программирования с функциями в хидерах, многократно обернутых, зачастую просто небрежно написанных... При этом все запихивается а один файл....Чему это может научить? Ну разве только инлайнить smile.gif, правда бездумно sad.gif, даже одну строчку.



Цитата(aaarrr @ Aug 19 2008, 10:36) *
...проблем с multiple definition быть не должно.

Да линкер у него ругается, когда находит кучу продублированных функций - всегда безусловно инлайнить компиляторы не обязаны, как впрочем и выбрасывать неиспользованые функции, хоть они и с __inline.
defunct
Цитата(zltigo @ Aug 19 2008, 11:52) *
это еще сразу дает образчик дурнейшего стиля программирования с функциями в хидерах, многократно обернутых, зачастую просто небрежно написанных...

Нормальный там стиль.
inline функциям как раз и место только в хидерах, они по своей природе равносильны макросам.
Качество кода я тоже демонстрировал - абсолютно ничего лишнего, одного взгляда достаточно для понимания сути. Коментарии тоже в порядке.
Цитата
При этом все запихивается а один файл....Чему это может научить?

А почему бы и нет. Чем это плохо если речь идет о hal функциях. Неужели удобнее цеплять с десяток хидеров, по одному для каждой мелочи типа SPI?
Цитата
как впрочем и выбрасывать неиспользованые функции, хоть они и с __inline

Хоть один компилятор не выбрасывающий неиспользуемые __inline функции можете назвать?
aaarrr
Цитата(defunct @ Aug 19 2008, 14:34) *
Качество кода я тоже демонстрировал - абсолютно ничего лишнего, одного взгляда достаточно для понимания сути. Коментарии тоже в порядке.

По поводу качества кода: Вы AT91F_PITInit не нашли? Или мы обсуждаем только положительные стороны lib_?

Copy->paste комментарии - это порядок?

Цитата(defunct @ Aug 19 2008, 14:34) *
А почему бы и нет. Чем это плохо если речь идет о hal функциях. Неужели удобнее цеплять с десяток хидеров, по одному для каждой мелочи типа SPI?

А Вам удобно редактировать файл размером 150 кбайт? А если туда еще HAL для EMAC'а и USB запихать - еще удобней станет?


Да, нашел я у себя в закромах Вашу версию lib, AT91F_PITInit там, естественно, есть.

Код
//* File Name           : lib_AT91SAM7X256.h
//* Object              : AT91SAM7X256 inlined functions
//* Generated           : AT91 SW Application Group  09/12/2005 (15:39:14)
...
//* CVS Reference       : /lib_pitc_6079A.h/1.2/Thu Nov  4 14:01:11 2004//

...


/* *****************************************************************************
                SOFTWARE API FOR PITC
   ***************************************************************************** */
//*----------------------------------------------------------------------------
//* \fn    AT91F_PITInit
//* \brief System timer init : period in µsecond, system clock freq in MHz
//*----------------------------------------------------------------------------
__inline void AT91F_PITInit(
        AT91PS_PITC pPITC,
        unsigned int period,
        unsigned int pit_frequency)
{
    pPITC->PITC_PIMR = period? (period * pit_frequency + 8) >> 4 : 0; // +8 to avoid %10 and /10
    pPITC->PITC_PIMR |= AT91C_PITC_PITEN;    
}
defunct
Цитата(aaarrr @ Aug 19 2008, 14:19) *
По поводу качества кода: Вы AT91F_PITInit не нашли? Или мы обсуждаем только положительные стороны lib_?

Нашел. Да с Вами можно согласиться - это баг.
Правда ничего ужасающе страшного в нем на мой взгляд нет - вопрос округления.
Для маленьких значений period'a (единицы us) точного значения не будет практически никогда, добавляй туда -1 или не добавляй, на 55Mhz их реализация будет даже более точно работать.
Для больших значений периода доли us не играют роли.

Плюс это не единственная функция для настойки PIT'a в этой библиотеке.
Цитата
Copy->paste комментарии - это порядок?

Не коментарии, а шапки функций. Это простительно, на brief редко кто смотрит, а в коде с коментариями порядок.

Цитата
А Вам удобно редактировать файл размером 150 кбайт? А если туда еще HAL для EMAC'а и USB запихать - еще удобней станет?

1. Мне привычно работать с большими файлами.
2. Меня никто не заставляет его редактировать. (зачем его редактировать?)
aaarrr
Цитата(defunct @ Aug 19 2008, 16:18) *
Правда ничего ужасающе страшного в нем на мой взгляд нет - вопрос округления.
Для маленьких значений period'a (единицы us) точного значения не будет практически никогда, добавляй туда -1 или не добавляй, на 55Mhz их реализация будет даже более точно работать.
Для больших значений периода доли us не играют роли.

Ну, тут можно поспорить. Если посмотреть документацию на SAM7, то в ней PITC позиционируется как таймер для точного отсчета интервалов времени:
Цитата
It is
designed to offer maximum accuracy and efficient management, even for systems with long
response time.


А в библиотеке для установки этого таймера нам предлагают передать целое число МГц MCK, и вычисляют значение регистра с ошибкой.

Цитата(defunct @ Aug 19 2008, 16:18) *
Плюс это не единственная функция для настойки PIT'a в этой библиотеке.

Да, есть еще AT91F_PITSetPIV. Если человек способен сам вычислить значение PIV, то вряд ли ему нужны костыли в виде библиотечной функции для установки поля регистра.

Цитата(defunct @ Aug 19 2008, 16:18) *
Не коментарии, а шапки функций. Это простительно, на brief редко кто смотрит, а в коде с коментариями порядок.

Там, где они есть. Беглый просмотр показывает, что часть функций не откомментированна.

Цитата(defunct @ Aug 19 2008, 16:18) *
2. Меня никто не заставляет его редактировать. (зачем его редактировать?)

За тем, что он содержит ошибки.
zltigo
Цитата(defunct @ Aug 19 2008, 12:34) *
inline функциям как раз и место только в хидерах, они по своей природе равносильны макросам.

Не совсем, компилятор имеет над ними некоторую власть по оптимизации, если конечно специально прагмами типа inline=forced не пользоваться.
Цитата
Качество кода я тоже демонстрировал - абсолютно ничего лишнего

Да уж smile.gif что может быть лишнее, если в подавляющем большинстве там по одной строчке, а там, где уже 3-5 и лишнее, не криминальное, но если позиционировать сей код,как образец, то лишнее sad.gif
Цитата
Неужели удобнее цеплять с десяток хидеров, по одному для каждой мелочи типа SPI?

А какая проблема? Тем более,как человек широко использующий тот-же SPI скажу, что SPI использую по максимуму его возможностей а не просто прочитать-записать словечко интерфейс к которому сводят его "библиотеки".
Цитата
Хоть один компилятор не выбрасывающий неиспользуемые __inline функции можете назвать?

Не интересовался по причине нахренненужности smile.gif - тут лучше Вы скажите, где написано, что все компиляторы обязаны это делать?
defunct
Цитата(zltigo @ Aug 19 2008, 15:42) *
Не совсем, компилятор имеет над ними некоторую власть по оптимизации, если конечно специально прагмами типа inline=forced не пользоваться.

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

Цитата
А какая проблема? Тем более,как человек широко использующий тот-же SPI скажу, что SPI использую по максимуму его возможностей а не просто прочитать-записать словечко интерфейс к которому сводят его "библиотеки".

Вот и я думаю. Чем один файл плох. Какая разница 1 файл или 10 все одно речь о железе.
И еще думаю, что же интересно может помешать создать свой собственный файл не отказываясь от библиотеки.

Цитата
Не интересовался по причине нахренненужности smile.gif - тут лучше Вы скажите, где написано, что все компиляторы обязаны это делать?
Вопросом на вопрос - нипойдет.
Хотя
A function where all the declarations (including the definition) mention "inline" and never "extern". There must be a definition in the same translation unit. No stand-alone object code is emitted. You can (must?) have a separate (not inline) definition in another translation unit, and the compiler might choose either that or the inline definition.
http://www.greenend.org.uk/rjk/2003/03/inline.html

Цитата(aaarrr @ Aug 19 2008, 15:34) *
За тем, что он содержит ошибки.

Ну и что? ;> С какой радости мне править библиотечный код, который обновляется и поддерживается не мной.

Законы Мерфи помните?
Особо подходящие под этот случай:
3. Все программы содержат ошибки, просто о некоторых мы не догадываемся.
5. Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей.
25. Усилия, прилагаемые для исправления ошибки, увеличивают ее в геометрической прогрессии по отношению к затраченному времени.

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

Цитата
Там, где они есть. Беглый просмотр показывает, что часть функций не откомментированна.
Справедливое замечание. Однако там где нет коментариев, коментировать просто нечего.
Тупые коментарии вида:
a = b; // в переменную a поместить значение переменной b
никому не нужны.
zltigo
Цитата(defunct @ Aug 20 2008, 02:09) *
Вопросом на вопрос - нипойдет.
Хотя

Это относится конкретно к GNU реализации, а отнюдь не ко всем. Посему ответа на вопрос
Цитата
что все компиляторы обязаны это делать?

нет.
Сергей Борщ
Цитата(SergeiCh @ Aug 18 2008, 15:19) *
По мне структуры хороши хотя бы тем, что при отладке в Eclipse/Insight позволяют очень удобно смотреть содержимое регистров.
Не могли бы вы более подробно описать, как вы это делаете? Ведь AT91C_BASE_XXX описаны через #define и Эклипс просто не видит этих структур.
injen-d
Цитата(Сергей Борщ @ Aug 20 2008, 14:12) *
Не могли бы вы более подробно описать, как вы это делаете? Ведь AT91C_BASE_XXX описаны через #define и Эклипс просто не видит этих структур.

у меня все прекрасно видится (eclipse 3.4)
Нажмите для просмотра прикрепленного файла
...пардон, не заметил слов "при отладке". Возможно автор имел ввиду не отладку, а написание программы...
Сергей Борщ
Цитата(injen-d @ Aug 20 2008, 19:51) *
...пардон, не заметил слов "при отладке". Возможно автор имел ввиду не отладку, а написание программы...
Да, именно в окне watch.
SergeiCh
Цитата(Сергей Борщ @ Aug 20 2008, 17:12) *
Не могли бы вы более подробно описать, как вы это делаете? Ведь AT91C_BASE_XXX описаны через #define и Эклипс просто не видит этих структур.

Нужно объявить экземпляр указателя на структуру/тип, когда компилятор сгенерит отладочную информацию. Я пользуюсь at91lib (ленивый программист smile.gif), там, в драйверах, они обычно уже объявлены. Для отладки можно глобальный указатель объявить, но я не часто смотрю регистры, мне хватает локальных smile.gif
Нажмите для просмотра прикрепленного файла
SergeiCh
И как правильно заметил zltigo, не все регистры одинаково полезно читать smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.