This is the mail archive of the ecos-bugs@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug 1001024] STM32 USB driver and proposed USB API change


Please do not reply to this email. Use the web interface provided at:
http://bugs.ecos.sourceware.org/show_bug.cgi?id=1001024

--- Comment #24 from Chris Holgate <chris@zynaptic.com> 2010-10-17 16:06:37 BST ---
(In reply to comment #23)
> Chris, thank you for the double buffering fix. I am now able to receive all
> characters sent from minicom, but the application locks up after a few
> characters have been received (not always the same number of chars). The same
> problem occurs with the "usbserial_echo" test in the USB serial function
> package. I definitely have variable length bulk transfers disabled and the
> usbserial_echo test uses a 4096 byte buffer.

I've not been able to replicate that here.  Loopback to minicom using the
method you've previously described seems to work fine for me (for a few hundred
characters at least).  I couldn't get my Linux machine to correctly recognize
the eCos serial loopback until I ditched my FTDI based USB/serial adapter for
the Redboot connection - but once I reverted to a 'proper' serial port for
Redboot things have been fine.  The test code I used is the absolute minimum I
could get away with (see below)...

#include <cyg/hal/hal_arch.h>             // CYGNUM_HAL_STACK_SIZE_TYPICAL

#include <cyg/infra/cyg_type.h>
#include <cyg/infra/cyg_ass.h>
#include <cyg/infra/diag.h>

#include <cyg/kernel/kapi.h>
#include <cyg/io/usb/usbs_serial.h>

//-----------------------------------------------------------------------------
// Thread primitives used for eCos application startup.

static cyg_uint8 stack [CYGNUM_HAL_STACK_SIZE_TYPICAL]
__attribute__((aligned(8)));
static cyg_thread thread_data;
static cyg_handle_t thread_handle;

//-----------------------------------------------------------------------------
// Main thread entry point.

extern "C" void mainThreadStartup 
  (void)
{
    int rxBytes, txBytes, i;
    char rxBuf[256];

    // Set up the USB serial interface.
    diag_printf("Setting up the USB serial interface.\n");
    usbs_serial_start();

    while(1) {
        rxBytes = usbs_serial_rx(&usbs_ser0, rxBuf, 256);
        for (i = 0; i < rxBytes; i++)
            diag_printf("%c", rxBuf[i]);
        txBytes = usbs_serial_tx(&usbs_ser0, rxBuf, rxBytes);
    }
}

//-----------------------------------------------------------------------------
// Startup function called in the context of the eCos idle thread once all the
// system startup is complete.

extern "C" void cyg_user_start 
  (void)
{
    cyg_thread_create(
        10,                                      // Arbitrary priority
        (cyg_thread_entry_t*) mainThreadStartup, // Thread entry point
        0,                                       // 
        (char*) "app_thread",                    // Thread name
        &stack[0],                               // Stack
        CYGNUM_HAL_STACK_SIZE_TYPICAL,           // Stack size
        &thread_handle,                          // Thread handle
        &thread_data                             // Thread data structure
    );
    cyg_thread_resume(thread_handle);
    cyg_scheduler_start();
}

//-----------------------------------------------------------------------------

-- 
Configure bugmail: http://bugs.ecos.sourceware.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]