|
Mass Storage от Atmel под ОСью..., какие-то ньюансы? |
|
|
|
Mar 20 2007, 03:15
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861

|
Уже который день мучаюсь... Пробую разные ОСи... Еще ни под одной толком не заработало. Хотя в "голом" виде работает на "ура"... Под PowerPack RTOS работало через раз. В произвольной части кода добавляешь/убираешь строчку - не работает - вылетае в Data Abort. Такое впечатление, что какие-то косяки компилятора. embOS - то же самое. uCOS-II так и не разобрался, как заставить нормально работать прерывания. TNKernel - пока самая приятная ОСь. Прерывания с пол-пинка завелись. Масс Сторадж не хочет. принимает пару пакетов, посылает ответы и опять в Data Abort. Хотя если не подключать кабель УСБ все спокойно крутиться уже несколько часов.  Уже слов нет. Пытался использовать "первозданный" код Масс Стораджа, без своих изменений - результат тот же. Проц - SAM7S64. IAR4.41. Код временно урезан до минимума - 2 таска-мигалки и собсно сам Mass Storage. З.Ы. еще не пробовал под FreeRTOS...
--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
|
|
|
|
|
Mar 21 2007, 18:48
|

Местный
  
Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480

|
Цитата(apic @ Mar 20 2007, 22:17)  А какой mass storage ? У меня хорошо работает AT91 USB Framework - Core 1.02 + MSD 1.0 под uCOS на AT91SAM7S256. А что такое MSD 1.0? И где брали AT91 USB Framework - Core 1.02 вроде как на ат91.ком только Core 1.01 лежит.
|
|
|
|
|
Mar 22 2007, 12:33
|

Дух погибшего транзистора
   
Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288

|
Pat С исходником MSD вместе идет core1.02 all Люди я попробывал скомпилить под gcc/crossworks Слегка опешил из-за этого в файле common.h в функции copy: Код ((char *) pDest)++; ругаеццо Цитата D:/prj/oscilloscope-sam7/../lib/at91_usb-cw/core/common.h:122: error: lvalue required as increment operand  Чо ему надо? Там же приведение к указателю на char есть. Я конечно могу в наглую еденичку прибавить, только это дичь какая-то. Второй вопрос каким образом прокатывает такое в файле usb.h: Код typedef struct _S_usb S_usb;
...... //идет определение типов типа такого typedef void (*S_usb_reset)(const S_usb *); //ну и потом таблица колбеков из такиз типов
//далее в том же файле typedef struct _S_usb {
const S_usb_driver *pDriver; //!< Pointer to the low-level driver S_usb_endpoint* const pEndpoints; //!< Endpoints list unsigned int dNumEndpoints; //!< Number of endpoints in list const S_usb_callbacks *pCallbacks; //!< Pointer to the callbacks S_usb_request* const pSetup; //!< \brief Pointer to the last //!< received SETUP packet volatile unsigned int* const pState; //!< Current state of the device } S_usb; Копилялка естественно ругаецца на переопределение типа. Нужна такая фича для кривого рекурсивного определения типов данных, откуда интересно ее взяли и как с этим бороться? Второе победилось убиванием второго typedef и оставление голого struct
--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
|
|
|
|
|
Mar 22 2007, 17:45
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(SpiritDance @ Mar 22 2007, 15:33)  all Люди я попробывал скомпилить под gcc/crossworks Слегка опешил из-за этого в файле common.h в функции copy: Код ((char *) pDest)++; ругаеццо  Чо ему надо? Там же приведение к указателю на char есть. Я конечно могу в наглую еденичку прибавить, только это дичь какая-то. Ругаеццо правильна. В С операция приведения типа по определению возвращает rvalue, к которому операция ++ применена быть не может. Цитата из C FAQ: Код 4.5: I have a char * pointer that happens to point to some ints, and I want to step it over them. Why doesn't
((int *)p)++;
work?
A: In C, a cast operator does not mean "pretend these bits have a different type, and treat them accordingly"; it is a conversion operator, and by definition it yields an rvalue, which cannot be assigned to, or incremented with ++. (It is either an accident or a delibrate but nonstandard extension if a particular compiler accepts expressions such as the above.) Say what you mean: use
p = (char *)((int *)p + 1);
or (since p is a char *) simply
p += sizeof(int);
Whenever possible, you should choose appropriate pointer types in the first place, instead of trying to treat one type as another.
References: K&R2 Sec. A7.5 p. 205; ISO Sec. 6.3.4; Rationale Sec. 3.3.2.4; H&S Sec. 7.1 pp. 179-80. Попробуйте скомпилять этот код в режиме С++ (если компилятор это умеет).
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Mar 23 2007, 10:49
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(SpiritDance @ Mar 22 2007, 21:51)  В режиме с++ компилять не хочу - у нас правило плюсовый фишки не пользовать, лучше поправлю. Можно узнать, чем обусловлено это правило? Цитата(SpiritDance @ Mar 22 2007, 21:51)  Хехе. Однако Иар это все видимо глотает. У него, возможно, расширения включены. Либо тот же ++ включен.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Mar 23 2007, 11:10
|

Дух погибшего транзистора
   
Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288

|
Цитата(dxp @ Mar 23 2007, 10:49)  Можно узнать, чем обусловлено это правило? Честно говоря вижу только одну достойную причину - часто пишется код, который переносится с писюка в контроллеры, причем преносить могут разные люди. А так как в качестве основного писюкового компилятора пользуется CVI, в котором никаких плюсов вообще нет, то чтоб не создавать друг другу неудобств, подобных возникшим с сабжевой библиотекой, такое правило и ввели. А так вобщем причины я собственно глубоко не копал. То есть рассудил как преданный мавр, сказали - значит так надо.  Да и особой нужды в ++ и каких-либо неудобств от их отсутствия не испытываю.
--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
|
|
|
|
|
Mar 25 2007, 21:59
|
Местный
  
Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737

|
Цитата(Dron_Gus @ Mar 20 2007, 02:15)  Под PowerPack RTOS работало через раз. В произвольной части кода добавляешь/убираешь строчку - не работает - вылетае в Data Abort. Такое впечатление, что какие-то косяки компилятора. Мож малёк не в тему. Сам UCOS для Keil долго и упорно мучал, вылетало в Data Abort, оказалось ROM и RAM не те значения имели  нда глупо вышло
|
|
|
|
|
Mar 27 2007, 13:35
|
Гуру
     
Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493

|
Цитата(Dron_Gus @ Mar 20 2007, 04:15)  Уже который день мучаюсь... Пробую разные ОСи... Еще ни под одной толком не заработало. Хотя в "голом" виде работает на "ура"... Под PowerPack RTOS работало через раз. В произвольной части кода добавляешь/убираешь строчку - не работает - вылетае в Data Abort. Такое впечатление, что какие-то косяки компилятора. embOS - то же самое. uCOS-II так и не разобрался, как заставить нормально работать прерывания. TNKernel - пока самая приятная ОСь. Прерывания с пол-пинка завелись. Масс Сторадж не хочет. принимает пару пакетов, посылает ответы и опять в Data Abort. Хотя если не подключать кабель УСБ все спокойно крутиться уже несколько часов.  Уже слов нет. Пытался использовать "первозданный" код Масс Стораджа, без своих изменений - результат тот же. Проц - SAM7S64. IAR4.41. Код временно урезан до минимума - 2 таска-мигалки и собсно сам Mass Storage. З.Ы. еще не пробовал под FreeRTOS...  Во.. Я тут тоже в абортах пару ночей провел. Оказалось стек маленький для одной третьестепенной задачи.. TNKernel... Ты там погляди потом стеки задач - легко же видна максимальная загрузка.. Или ты уже разобрался ? А насчет самая приятная - утверждать не могу, т.к. после виндов это первая операционка, но API легло как родное... Посему не слезу с нее пока что-то более накрученное не понадобится, не скоро. Пока по абортам пытался глюк найти - немного внутренности TNKernel поизучал - очень симпатично на мой взгялд. Ой, забыл, у меня еще из комплекта и фриварная адаптированная MicroWindows и USB Bulk - тоже все оттуда взято - и все замечательно работает.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|