|
|
  |
at91, помогите разобраться |
|
|
|
Aug 18 2008, 21:52
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(zltigo @ Aug 19 2008, 01:05)  Человек ко всему привыкает, но я себя любимого люблю больше, посему так не пишу  Простая тренировка пальцев  Согласитесь, что при написании драйвера периферийного устройства время набора буковок составляет очень небольшой процент. Цитата(defunct @ Aug 19 2008, 01:07)  в этой теме все крутится вокруг lib_AT91 - которую некоторые рекомендуют выбросить и забыть как книжку Редькина  Настоятельно и, по-моему, обоснованно рекомендую. Цитата(defunct @ Aug 19 2008, 01:07)  и вокруг "->" (тут уже imho безосновательно). Как я уже писал, против структур периферии я ничего не имею, тем более что есть возможность маневра. У Atmel'а еще не самый худший вариант, если вспомнить, например, TI C28xx
|
|
|
|
|
Aug 18 2008, 21:57
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(defunct @ Aug 18 2008, 23:36)  Драсти, а чем тогда я пользуюсь? ;> Вы пользуетесь макросами типа #define pNAME *(struct *)0xXXXXXXX Это не указатель и, как уже писал, данное Вами имя в венгерском стиле pointerNAME - ошибочно. Цитата(defunct @ Aug 18 2008, 23:50)  ...не отбрасывать как ересь все подряд и потом с Божьей помощью и с помощью ДШ писать с чистого листа. Зачем с чистого  берется исходный и ересь выжигается каленым железом  . Причем это проделыватся не за раз а по мере необходимости и сопровождается чтением документации и комментированием нюансов, которое, как привило в хидерах практически отсутсттвует. Цитата(aaarrr @ Aug 18 2008, 23:52)  Простая тренировка пальцев  Согласитесь, что при написании драйвера периферийного устройства время набора буковок составляет очень небольшой процент. С набором проблем никаких (и ручками и автодополнеием по тэгам)- проблемы c последующем чтением. Ошибки я предпочитаю искать глазами и головой а не долгими брождениями в отладчике и перечитываю написанное много.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 18 2008, 21:58
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(zltigo @ Aug 19 2008, 00:54)  Вы пользуетесь макросами типа #define NAME *(struct *)0xXXXXXXX Это не указатель. Нет Вы не правы. Макросы вот такие: ((AT91PS_EMAC) 0xFFFDC000) эквивалентно: ((Struct *) 0xFFFDC000) т.е. это честные указатели на группы регистров. Цитата Настоятельно и, по-моему, обоснованно рекомендую. Если Вы про Редькина, то я согласен.
|
|
|
|
|
Aug 18 2008, 22:02
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(defunct @ Aug 19 2008, 01:58)  Если Вы про Редькина, то я согласен. Нет, как не трудно догадаться, не про Редькина. Хотя его книжкам самое место в печке. Цитата(zltigo @ Aug 19 2008, 01:57)  Ошибки я предпочитаю искать глазами и головой а не долгими брождениями в отладчике и перечитываю написанное много. Я тоже. Мозг требуху типа AT91S_ фильтрует достаточно легко.
|
|
|
|
|
Aug 18 2008, 22:16
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(zltigo @ Aug 19 2008, 01:10)  pNAME = x присваивает значение УКАЗАТЕЛЮ а не обьекту  . Посему вычитывайте макросы дальше до прояснения написанного в них. это константный указатель. 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
|
|
|
|
|
Aug 18 2008, 22:28
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(defunct @ Aug 19 2008, 00:16)  это константный указатель. Может стоит освежить знания языка? А то, право, как-то странно общаться  . Константный, не константный дело второе. Цитата pBASE_NAME = x - не имеет смысла вообще. Ага, но именно ТАК Вы пишите и работает по той причине, что это на самом деле НЕ указатель (мамнадчатый раз уже пишу) хотя перед ним и у Вас ОШИБОЧНО стоит 'p' а выражение эквивалентное: *pBASE_NAME = x; Цитата(defunct @ Aug 19 2008, 00:16)  это константный указатель. Может стоит освежить знания языка? А то, право, как-то странно общаться  . Константный, не константный дело второе. Цитата pBASE_NAME = x - не имеет смысла вообще. Ага, но именно ТАК Вы пишите и работает по той причине, что это на самом деле НЕ указатель (мамнадчатый раз уже пишу) хотя перед ним у Вас и стоит 'p'. Это, простите, Ваш "стиль" и Ваш код с котрого все началось: Цитата(defunct @ Aug 18 2008, 22:40)  pPITC->PITC_PIMR = x; Так какому из Вас теперь верить  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 18 2008, 22:40
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(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)  Может стоит освежить знания языка? А то, право, как-то странно общаться  . ок давайте освежим это что: (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;
|
|
|
|
|
Aug 18 2008, 22:40
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(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 сделали?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|