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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Mass Storage от Atmel под ОСью..., какие-то ньюансы?
Dron_Gus
сообщение Mar 20 2007, 03:15
Сообщение #1


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

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



Уже который день мучаюсь... Пробую разные ОСи... Еще ни под одной толком не заработало. Хотя в "голом" виде работает на "ура"...

Под PowerPack RTOS работало через раз. В произвольной части кода добавляешь/убираешь строчку - не работает - вылетае в Data Abort. Такое впечатление, что какие-то косяки компилятора.

embOS - то же самое.

uCOS-II так и не разобрался, как заставить нормально работать прерывания.

TNKernel - пока самая приятная ОСь. Прерывания с пол-пинка завелись. Масс Сторадж не хочет. принимает пару пакетов, посылает ответы и опять в Data Abort. Хотя если не подключать кабель УСБ все спокойно крутиться уже несколько часов. smile.gif Уже слов нет. Пытался использовать "первозданный" код Масс Стораджа, без своих изменений - результат тот же.



Проц - SAM7S64. IAR4.41. Код временно урезан до минимума - 2 таска-мигалки и собсно сам Mass Storage.



З.Ы. еще не пробовал под FreeRTOS... smile.gif


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Mar 20 2007, 11:46
Сообщение #2


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

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



Не пробовал из под ОС.
Но код активно работает на прерывании IRQ, соответственно, его нельзя запрещать, или придерживать функции масстораджа внутри - только регулярный вызов таска.

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

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

Поиграйся с оптимизацией. Ещё я в ARM режиме компилил.

SAM7S64 WinARM

Сообщение отредактировал _4afc_ - Mar 20 2007, 11:49
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Mar 20 2007, 17:00
Сообщение #3


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

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



Попробовал убрать malloc - результат тот же. Сейчас под FreeRTOS вообще перезапускается кристал после нескольких пакетов...


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
apic
сообщение Mar 20 2007, 23:17
Сообщение #4


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

Группа: Свой
Сообщений: 86
Регистрация: 18-06-05
Из: Москва
Пользователь №: 6 116



А какой mass storage ? У меня хорошо работает AT91 USB Framework - Core 1.02 + MSD 1.0 под uCOS
на AT91SAM7S256.
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Mar 20 2007, 23:31
Сообщение #5


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

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



Тот, который DEMO_FS_MS_UNLIMITED_v16...

Пошел копать AT91 USB Framework - Core 1.02 + MSD 1.0. С

Apic, спасибо за наводку.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
apic
сообщение Mar 21 2007, 00:39
Сообщение #6


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

Группа: Свой
Сообщений: 86
Регистрация: 18-06-05
Из: Москва
Пользователь №: 6 116



Будете разбираться, обратите внимание что функция CBK_Suspend путем вызова DEV_Suspend() переводит МК в lower power mode, т.е. переведет тактирование на 32khz, я это дело закомментарил.
(CBK_Resume вызывает DEV_Resume() - то же убрал)
Go to the top of the page
 
+Quote Post
Pat
сообщение Mar 21 2007, 18:48
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 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 лежит.
Go to the top of the page
 
+Quote Post
apic
сообщение Mar 21 2007, 21:09
Сообщение #8


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

Группа: Свой
Сообщений: 86
Регистрация: 18-06-05
Из: Москва
Пользователь №: 6 116



Вот прямая ссылка Usb mass storage
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Mar 22 2007, 12:33
Сообщение #9


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 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

blink.gif Чо ему надо? Там же приведение к указателю на 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.
Go to the top of the page
 
+Quote Post
dxp
сообщение Mar 22 2007, 17:45
Сообщение #10


Adept
******

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



Цитата(SpiritDance @ Mar 22 2007, 15:33) *
all
Люди я попробывал скомпилить под gcc/crossworks
Слегка опешил из-за этого в файле common.h в функции copy:
Код
((char *) pDest)++;

ругаеццо

blink.gif Чо ему надо? Там же приведение к указателю на 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.


Попробуйте скомпилять этот код в режиме С++ (если компилятор это умеет). wink.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Mar 22 2007, 18:51
Сообщение #11


Дух погибшего транзистора
****

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



dxp
В режиме с++ компилять не хочу - у нас правило плюсовый фишки не пользовать, лучше поправлю. Спасибо за разъяснение.

Хехе. Однако Иар это все видимо глотает.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
dxp
сообщение Mar 23 2007, 10:49
Сообщение #12


Adept
******

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



Цитата(SpiritDance @ Mar 22 2007, 21:51) *
В режиме с++ компилять не хочу - у нас правило плюсовый фишки не пользовать, лучше поправлю.

Можно узнать, чем обусловлено это правило?

Цитата(SpiritDance @ Mar 22 2007, 21:51) *
Хехе. Однако Иар это все видимо глотает.

У него, возможно, расширения включены. Либо тот же ++ включен.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Mar 23 2007, 11:10
Сообщение #13


Дух погибшего транзистора
****

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



Цитата(dxp @ Mar 23 2007, 10:49) *
Можно узнать, чем обусловлено это правило?

Честно говоря вижу только одну достойную причину - часто пишется код, который переносится с писюка в контроллеры, причем преносить могут разные люди. А так как в качестве основного писюкового компилятора пользуется CVI, в котором никаких плюсов вообще нет, то чтоб не создавать друг другу неудобств, подобных возникшим с сабжевой библиотекой, такое правило и ввели.

А так вобщем причины я собственно глубоко не копал. То есть рассудил как преданный мавр, сказали - значит так надо. smile.gif Да и особой нужды в ++ и каких-либо неудобств от их отсутствия не испытываю.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
Wano
сообщение Mar 25 2007, 21:59
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737



Цитата(Dron_Gus @ Mar 20 2007, 02:15) *
Под PowerPack RTOS работало через раз. В произвольной части кода добавляешь/убираешь строчку - не работает - вылетае в Data Abort. Такое впечатление, что какие-то косяки компилятора.


Мож малёк не в тему. Сам UCOS для Keil долго и упорно мучал, вылетало в Data Abort,
оказалось ROM и RAM не те значения имели smile.gif нда глупо вышло
Go to the top of the page
 
+Quote Post
DASM
сообщение Mar 27 2007, 13:35
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Цитата(Dron_Gus @ Mar 20 2007, 04:15) *
Уже который день мучаюсь... Пробую разные ОСи... Еще ни под одной толком не заработало. Хотя в "голом" виде работает на "ура"...

Под PowerPack RTOS работало через раз. В произвольной части кода добавляешь/убираешь строчку - не работает - вылетае в Data Abort. Такое впечатление, что какие-то косяки компилятора.

embOS - то же самое.

uCOS-II так и не разобрался, как заставить нормально работать прерывания.

TNKernel - пока самая приятная ОСь. Прерывания с пол-пинка завелись. Масс Сторадж не хочет. принимает пару пакетов, посылает ответы и опять в Data Abort. Хотя если не подключать кабель УСБ все спокойно крутиться уже несколько часов. smile.gif Уже слов нет. Пытался использовать "первозданный" код Масс Стораджа, без своих изменений - результат тот же.



Проц - SAM7S64. IAR4.41. Код временно урезан до минимума - 2 таска-мигалки и собсно сам Mass Storage.



З.Ы. еще не пробовал под FreeRTOS... smile.gif


Во.. Я тут тоже в абортах пару ночей провел. Оказалось стек маленький для одной третьестепенной задачи.. TNKernel... Ты там погляди потом стеки задач - легко же видна максимальная загрузка.. Или ты уже разобрался ? А насчет самая приятная - утверждать не могу, т.к. после виндов это первая операционка, но API легло как родное... Посему не слезу с нее пока что-то более накрученное не понадобится, не скоро. Пока по абортам пытался глюк найти - немного внутренности TNKernel поизучал - очень симпатично на мой взгялд. Ой, забыл, у меня еще из комплекта и фриварная адаптированная MicroWindows и USB Bulk - тоже все оттуда взято - и все замечательно работает.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 25th June 2025 - 09:53
Рейтинг@Mail.ru


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