Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[stm32] [RTOS] logowanie do systemu

tomasz1987 16 May 2012 22:08 5506 37
  • #1
    tomasz1987
    Level 16  
    od 2 tygodni szukam systemu który po skompilowaniu będzie posiadał możliwość logowanie przez terminal i niestety nic co znalazłem niema tej opcji

    mój Profesor twierdzi że system obsługuje logowanie drzewa folderów kartę pamięci wraz z edycją a sama karta widziana jest w systemie jako pen

    moja płytka to HY-Mini
    ARM Cortex M3 STM32F103VCT6

    standardowo jest na niej uruchomiony µC/OS-II są też źródła dla free rtos


    Powieccie jak to zrobić żeby można się było zalogować do tego systemu nie mówię o dodatkowych funkcjonalnościach tylko niech odpali login
  • Helpful post
    #2
    Freddie Chopin
    MCUs specialist
    Logowanie i inne rzeczy o których mówisz jak dla mnie nie leżą w gestii systemu operacyjnego samego w sobie, tylko dodatkowych programów/wątków na nim uruchomionych (shell, UI, ...). Sam system na takich prostych mikrokontrolerach zapewnia tylko wielowątkowość i nic więcej, na pewno w gołym FreeRTOS tego nie ma.

    Na gotowo takie rzeczy są w Linuxach, ale na tej płytce nie uruchomisz nawet ucLinuxa wg mnie (za mało pamięci).

    4\/3!!
  • #3
    gaskoin
    Level 38  
    Uruchomi, ale jak mówisz będzie musiał dołożyć trochę pamięci (tak z 500kB)
  • #4
    Mechanik PSC
    Level 12  
    Twój profesor mówiąc "logowanie do systemu" miał zapewne na mysli porozumienie - komunikowanie się z systemem uruchomionym na płytce ewaluacyjnej. Krótko mówiąc skomunikowanie się z płytką HY Mini. Jeżeli chodzi o tą płytkę to masz przecież wszystko co Ci potrzebne, żeby właśnie to zrobić. Płyta ma aż 2 porty USB, jeden podłączony przez konwerter do UART-a, drugi wprost do portu USB STM32F103. Masz oprogramowanie demonstracyjne do obsługi mikroSD (gniazdo jest na płytce), program w katalogu "USB-Mass_Storage-SD Card". Płyta, po wgraniu tego oprogramowania zachowuje się jak pendrive. Resztę robi system Windows lub jeżeli chciałbys się pokusic o mini system do obsługi karty SD, to możesz napisać kilka linijek kodu do komunikacji przez USB-USART (zresztą przykład też jest w demo) i sterować tym wszystkim przez zwykły terminal Windowsa po zainstalowniu sterownika COM-USB w Windows. Ale tego sie nie zrobi na przykładowym demo uCos, który oprócz pokazania swoich możliwości nic nie robi. Wykasuj to migające g... z procesora i do roboty (programowania), bo wszystko co Ci potrzebne dostałeś z tą płytką :) I moim zdaniem niepotrzebne Ci żadne rtos-y, systemy itp. Bo tak prosty program robi zwyczajna standardowa pętla while (1) ... :)
    Pozdro :)
  • #5
    tomasz1987
    Level 16  
    Dziękuję wszystkim za zainteresowanie

    najbliżej prawdy jest freddy gdyż nie doszło tu do żadnej pomyłki i na procesorze należy uruchomić RTOS
    i właśnie mam się zalogować do stystemu lub jak on to określił ma mi się pojawić "zachęcający podkreślnik" potem mam uruchomić funkcje logowania

    jeżeli jest to sprawa dodatkowych procesów i można to uruchomić z µC/OS-II(free rtos w sumie niezgorszy i mógłbym nim zaliczyć)
    to byłbym zainteresowany dokładniejszymi informacjami

    zostało mi na to całe 2 dni:D więc wszelka pomoc będzie mile widziana
  • #6
    gaskoin
    Level 38  
    Widząc Twoje doświadczenie to z jeden dzień przy dobrych wiatrach Ci pójdzie na wgranie gołego RTOSa a drugi dzień na napisanie tego terminalu o którym mówisz :) Gotowca raczej nie dostaniesz, ale z drugiej strony napisanie terminalu np po UARcie to nic innego jak wysłanie tego znaku zachęty po uart i oczekiwanie na komendy co jest raczej proste.

    W najprostszym przypadku:
    1 wysyłasz np znak # przez UART
    2 w PC odbierasz znak #, uC czeka aż mu coś poślesz
    3 wysyłasz mu stringa "dupa\r\n"
    4 procesor odbiera stringa, parsuje go i jeśli jest poprawny to zapala diodę, jeśli string nic nie znaczy goto 5
    5 goto 1
  • #7
    Mechanik PSC
    Level 12  
    A w międzyczasie, gdy wątek obsługi UARTA czeka na wpisanie czegokolwiek z klawiatury terminala do sparsowania, drugi wątek odtwarza film na ekraniku HY32D :) To będzie czad i profesor będzie na pewno zadowolony. A tak poważniej już. Po to są wszelkiego rodzaju cuda w postaci freertos, uCos lub rtx keila, żeby nie przetwarzać programu liniowo, tylko własnie posługiwać się wątkami. Napisanie wątku wyłacznie dla UARTA nie pokazuje że pracujesz w systemie rtos, musisz jeszcze w innym wątku np. mrugać diodami led :)
  • #8
    tomasz1987
    Level 16  
    cech
    napisać znak zachęty przez uart :D ale raczej się nie nabie że
    z tego co mi mówił po zalogowaniu można składać po drzewie wszystkie pliki przeglądać i edytować
    więc stwierdziłem że to jest na tyle obszerne że raczej z palce się tego nie pisze :D

    edit

    próbowałem bez systemu odpalić zdjęcie na moim 3,2 i poległem w freertos też coś nie podołałem że tak się zapytam ma ktoś jakieś gotowce :/
  • #9
    gaskoin
    Level 38  
    tomasz1987 wrote:
    cech
    napisać znak zachęty przez uart :D ale raczej się nie nabie że


    A Ty myślisz, że jak to jest niby inaczej zrobione ? On się nie ma nabierać tylko to tak po prostu wygląda.

    tomasz1987 wrote:

    z tego co mi mówił po zalogowaniu można składać po drzewie wszystkie pliki przeglądać i edytować
    więc stwierdziłem że to jest na tyle obszerne że raczej z palce się tego nie pisze :D


    Są biblioteki do obsługi systemu plików. Napisanie "handlera" do wywołań terminalowych do przeglądania plików to też chyba niewielki wyczyn.

    Quote:
    że tak się zapytam ma ktoś jakieś gotowce :/


    Powodzenia ;) Ktoś się namęczył żeby teraz leniowi, który się obudził po pół roku, dawać gotowce :)
  • #10
    tomasz1987
    Level 16  
    w sumie jest się ciężko przestawić w zawsze mającego czas 4-kowego studenta dziennego na zawsze zajętego pracą studenta zaocznego tak w sumie ledwo ciurkającego


    w sumie to rozumiem :D
  • #11
    Mechanik PSC
    Level 12  
    Tomasz. Ja poważnie mówię, że na płycie CD dołączonej do STM32f103-mini masz gotową obsługę karty SD, łącznie z przeglądaniem katalogów, plików itd. Masz też drugi program do obsługi UARTA przez USB. Jest też Freertos w wersji 6. Jak połaczysz te 3 programy w jedną całość to masz wszystko czego potrzebujesz. To jest gotowe oprogramowanie. Wystarczy je nieznacznie zmodyfikować. A zaletę ma taką, że zostało napisane i skonfigurowane pod Twoją płytkę STM32-mini, więc na pewno działa. Skoro nie masz za wiele czasu, to jest to dobre rozwiązanie, bo wystarczy podstawowa wiedza o rtos i płytce STM32-mini, a reszta to CTRL C, CTRL V
  • #12
    tomasz1987
    Level 16  
    sd jest ale podłącza się jako pen nie można tego modyfikować spod lini komend chyba że czegoś niewiem
  • #13
    gaskoin
    Level 38  
    tomasz1987 wrote:
    sd jest ale podłącza się jako pen nie można tego modyfikować spod lini komend chyba że czegoś niewiem


    Ale o czym Ty mówisz ? O podłączeniu do uC ? :D
    W kompie tak jest jak mówisz, ale kolega wyżej miał na myśli użycie karty SD w mikrokontrolerze. Z poziomu PC używasz tylko terminalu po UART do obsługi diod, SD, wyświetlacza, czegokolwiek w mikrokontrolerze.
  • #14
    tomasz1987
    Level 16  
    1 usb jest podłączone przez konwerter stanów do uart w mikroklocku 2 usb jest podłączone do usb właśnie tego 2 używa się do podłączenia karty pamięci

    czy znowu mi coś umknęło
  • #15
    gaskoin
    Level 38  
    Ale przecież wg schematu masz slot na kartę SD i nie ma on nic wspólnego ani z pendrivem ani z USB. Pendrive'a nie obsłużysz, ponieważ musiałbyś mieć obsługę USB host a takowej ten mikrokontroler nie wspiera.
  • #16
    tomasz1987
    Level 16  
    kurtka
    karta podłączona jest do mikro klocka
    ładuje program do karty sd podłączam usb do kompa i pokazuje mi się moja karta jako urządzenie usb

    edit
    może dosyć przedrzeźniania jakieś konkrety potrzebuję konkretów
    wspominałeś coś o bibliotekach do obsługi plików mógłbyś napisać gdzie to znalazłeś?
  • #17
    gaskoin
    Level 38  
    Być może jest to jedna z funkcjonalności, jakie dostarcza wgrane tam DEMO, bo to tak nie działa :) Nie przedrzeźniam się, tylko mówię jak jest.

    Poszukaj w necie FatFS lub PetiFS ale ta ma trochę ograniczone możliwości. Któraś z nich była kiedyś dołączana do FreeRTOSa więc całkiem możliwe, że już ją gdzieś masz.
  • Helpful post
    #18
    Mechanik PSC
    Level 12  
    Ale po co szukać po necie, skoro na płytce CD dołączonej do zestawu STM32F1-Mini są wszystkie potrzebne komponenty? Mają ponadto tę zaletę, że są juz skonfigurowane pod dokładnie ten zestaw. Tomasz zacznij od wgrania do procesora gotowego FreeRtos 6.0, ma juz zdefiniowane 2 wątki:
    1. mruga diodami - możesz go zostawić, będzie widać, że system pracuje
    2. wyświetla napis na LCD.
    Jak to skompilujesz, wgrasz do Cortexa i będzie działało to odewij się, powiem Ci co dalej (skonfigurujemy wątek nr 3 jako obsługę UARTA).
    Pozdro
  • #19
    tomasz1987
    Level 16  
    wgranie programu to pryszcz chodzi to bez problemu i mówimy tu o freertos
    edit
    za 3 min będę miał podłączona makietę i możemy startować ewentualnie jakiś komunika

    efekty wstawi się na elektrodę co by inni mieli

    edit 2
    okazuje się że po pracy miałem jakiś zaciemniony umysł ale dostałem 24h wolnego i teraz widzę
    Code: c
    Log in, to see the code

    Code: c
    Log in, to see the code


    no i ciało funkcji :D
    aczkolwiek chętnie przyjmę pomoc na jakiś komunikator
    największy problem sprawia mi podłączanie plików do keila prawie zawsze mi wywala nie wiem co dokładnie w jakiej kolejności

    do tej pory pisałem na atmege wszystko w 1 pliku
  • Helpful post
    #20
    Mechanik PSC
    Level 12  
    Początek programu FreeRtos wygląda tak:

    /* Private define ----------------------------------------------------------*/
    #define LED_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE )
    #define LCD_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE )
    #define USART_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE )
    #define LED_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
    #define LCD_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 )
    #define USART_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
    /* Private function prototypes ----------------------------------------------*/
    static void prvSetupHardware( void );
    void GPIO_Configuration(void);
    void vLCDTask(void * pvArg);
    void vLEDTask(void * pvArg);
    void vUSARTTask(void * pvArg);
    /*********************************************/
    * Function Name : main
    * Description : Main program
    * Input : None
    * Output : None
    * Return : None
    * Attention : None
    **********************************************/
    int main(void)
    {
    prvSetupHardware();
    USART_Configuration();
    xTaskCreate( vLEDTask , ( signed char * ) NULL , LED_TASK_STACK_SIZE , NULL , LED_TASK_PRIORITY , NULL );
    xTaskCreate( vLCDTask, ( signed char * ) NULL , LCD_TASK_STACK_SIZE,NULL , LCD_TASK_PRIORITY , NULL );
    xTaskCreate( vUSARTTask, ( signed char * ) NULL , USART_TASK_STACK_SIZE ,NULL , USART_TASK_PRIORITY , NULL );
    /* Start the scheduler. */
    vTaskStartScheduler();

    return 0;
    }

    Dołożony jest trzeci wątek do obsługi UARTA (dwa już są w oryginale).
    Wątek ma niski priorytet, ale to nie przeszkadza.
    Konfiguracja samego UARTA dla płytki HY32mini wygląda tak:

    /*****************************************************
    * Function Name : USART_Configuration
    * Description : Configure USART1
    * Input : None
    * Output : None
    * Return : None
    * Attention : None
    ************************************************************/
    void USART_Configuration(void)
    {
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;

    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1,ENABLE);
    /*
    * USART1_TX -> PA9 , USART1_RX -> PA10
    */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    USART_InitStructure.USART_BaudRate = 115200;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

    USART_Init(USART1, &USART_InitStructure);
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
    USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
    USART_Cmd(USART1, ENABLE);
    }

    I na razie bez żadnego parsera koment, po prostu sprawdź, czy działa Ci echo po podłączeniu przez terminal Windowsa. Czyli, to co wyślesz z terminala po COM powinno się pokazać jako bajt odebrany.
    Czyli wątek UARTA wyglądałby tak:

    /***********************************************************
    * Function Name : vUARTTask
    * Description : LED Task
    * Input : None
    * Output : None
    * Return : None
    * Attention : None
    ************************************************************/
    void vUARTTask(void * pvArg)
    {
    while(1)
    {
    /* Loop until RXNE = 1 */
    while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
    USART_SendData(USART1,USART_ReceiveData(USART1));
    }
    vTaskDelay(100);
    }
    }

    Jak to uruchomisz daj znać. Ja płytkę mini mam gdzieś w piwnicy, mogę ją wygrzebac i przez weekend coś da radę zrobić. Teraz tylko bardziej "teoretycznie" bez płytki :)
  • #21
    tomasz1987
    Level 16  
    było kilka małych błędów
    poprawiłem skompilowałem 0 error(s), 0 Warning(s)
    jak tylko uruchomi się mi 2 komputer to sprawdzę czy dział niestety nie potrafię skonfigurować terminala do win7 64bit :/
  • Helpful post
    #22
    Mechanik PSC
    Level 12  
    OK. Ja też jestem w pracy i nie zawsze mogę o tej porze coś robić. Ale dalej:
    Do testowego używania UARTA przyda się "podmienienie" standardowej obsługi funkcji printf na taką, która wysyła dane przez UARTA do naszej Windowsowej konsoli.
    Możesz to wpisac standardowo przed obsługą assert_failed()

    /**
    * @brief Retargets the C library printf function to the USART.
    * @param None
    * @retval None
    */
    PUTCHAR_PROTOTYPE
    {
    /* Place your implementation of fputc here */
    /* e.g. write a character to the USART */
    USART_SendData(USART1, (uint8_t) ch);

    /* Loop until the end of transmission */
    while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
    {}

    return ch;
    }

    Po takiej definicji funkcja printf(*char) będzie wysyłała teksty wprost do USARTA.
    I od razu podpowiem, że do katalogu USER musisz przekopiować w całości podkatalogi "FATFS_V0.08A" oraz "SD_Card" z przykładu o nazwie FATFS V0.08A-SD Card, no i oczywiście w opcjach projektu musisz pokazać ścieżki do tych katalogów, co by kompilator wiedział, gdzie szukać plików :)
    Potrzebne Ci będa następujące pliki nagłowkowe, które możesz dołożyć od razu do pliku main.c :
    #include "sdio_sd.h"
    #include "ff.h"

    Spróbuj poskładac to do kupy i zrób tak, żeby się skompilowały wszystkie potrzebne pliki. M. innymi dołaczyc się powinien automatycznie plik "ffconf.h" służący do konfiguracji działania FAT.
  • #23
    tomasz1987
    Level 16  
    jest mały problem uruchomiłem wszystko jednak system się zawiesza dioda się zapala uruchamia się wyświetlacz i usart wszystko zawiesza :/


    main.c

    Code: c
    Log in, to see the code
  • Helpful post
    #24
    Mechanik PSC
    Level 12  
    No i tak to jest z teorią, jak się nie ma płytki przy sobie ;/ moje gg to 7433623 spróbuj zawołac ;)
  • #25
    gaskoin
    Level 38  
    A ile przydzieliłeś stosu OSa na wszystkie zadania ?
    Ile masz stosu przydzielonego w uC?
  • #26
    tomasz1987
    Level 16  
    3 proces uruchomiony działa wspaniale
    aktualnie jest gruz z podłączeniem FATFS
    linker nie widzi plików najprawdopodobniej literówka gdzieś tylko że znajdowanie literówek to nie moja specjalność :D

    sytuacja opanowania
    stm32f10x_conf.h był żle skonfigurowany :D
  • #27
    stanleysts
    Level 27  
    tam do FATFS trzeba pododawać jeszcze kilka plików (np: ff.c pomimo, że interesujące funkcje masz w - diskio.c)
  • #28
    tomasz1987
    Level 16  
    to już działa
    tylko coś nie ogarniam tego programu co ja ma wysłać w konsoli żeby odebrać drzewo
    jak 0:/ to nie hasa nawet na oryginalnym programie

    kartę wykrywa bez problemu
  • #29
    stanleysts
    Level 27  
    gaskoin Ci napisał:

    W najprostszym przypadku:
    1 wysyłasz np znak # przez UART
    2 w PC odbierasz znak #, uC czeka aż mu coś poślesz
    3 wysyłasz mu stringa "dupa\r\n"
    4 procesor odbiera stringa, parsuje(musisz go porównać z tymi danymi, które są poprawne, czyli w najprostszy sposób robisz funkcję która Ci sprawdza po kolei każda litere i jak jakaś jest zła to nie dostaje dostępu, można to zrobić zarówno dla loginu jak i dla hasła) go i jeśli jest poprawny to zapala diodę, jeśli string nic nie znaczy goto 5
    5 goto 1

    no a jak uwierzytelnianie będzie poprawne to wtedy możesz np wysłać do kompa strukturę folderów na karcie SD np. można funkcją readdir odczytać zawartość folderów.
  • #30
    tomasz1987
    Level 16  
    ta płytka ma standardowy program do obsługi i teoretycznie można z niego obsłuztc karte ale ja niewiem jak ją zamontować
    Code: c
    Log in, to see the code