Jump to content

    

Androliz

Участник
  • Content Count

    34
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Androliz

  • Rank
    Участник

Контакты

  • Сайт
    Array

Информация

  • Город
    Array
  1. IAP lpc23xx

    Есть IAP с криптованием, который будет использоваться для обновления прошивки. Вопрос: где его лучше поместить? В бутовую область нельзя. Есть вариант в последнем секторе. Кто где его располагает?
  2. Занимаюсь сейчас примерно той же задачей: LPC2388 + USBHost.Lite. Но плата у меня конкретного устройства, без поддержки OTG. Host stack запустился с первого раза. И файлы читал/писал. Дальше стал вопрос создания директорий. Выбрал tiny-FatFs и быстренько "прикрутил" её к hoststack'у. Пока работает. Пока это делал столкнулся с проблемой многократного подключения-отключения флешки: при втором включении на этапе инициализации mass storage class (MS_init -> MS_TestUnitReady) не приходит прерывание и процессор зависает в цикле его ожидания. Поскольку планируется подключение только одной флешки зараз, то решил эту проблему полной реинициализацией HostStack'а после каждого отключения флешки. Хотя думаю это не оптимальное решение и хотелось сделать это более элегантно.
  3. LPC2388 CAN freeRTOS

    Проблема решилась след. образом: убрал из прерывания динамическое выделение памяти и стал копировать сообщения по значению в очередь (очередь пришлось урезать до 4-5 значений).
  4. LPC2388 CAN freeRTOS

    спасибо за замечания Ближе к теме. 1. Может ли Pabt возникать из-за программной ошибки и в каких случаях. Если нет, то как с ним бороться. 2. В erratasheet'e меликом в описании Flash.1 problem упоминается :Do not use even values for CCLKSEL А ранее они в этом же документе писали: PLL.1: Problem: The maximum output of the CCO within the PLL block is limited to 290 MHz. Т.е. FCCO 275 - 290 MHz А при кварце 14,7456 МГц и наличии USB (48МГц) подобрать подходящие M и N с небольшой погрешностью (менее 1000 ppm) неполучается. Так что, теперь квац нужно менять?!
  5. LPC2388 CAN freeRTOS

    извините, возможно я не совсем (или совсем не) разбираюсь в теме, но у меня есть следующие возражения: пункт3: поскольку объекты сообщения типа xCANMsg занимают в памяти 16 байт, то накладно было бы их копировать по значению (а в очереди freeRTOS данные по значению и копируются - Items are queued by copy not reference), следовательно я храню в очереди указатель. Объявление очереди: receiveCANQueue = xQueueCreate( 40, sizeof( struct xCANMsg * ) );//содержит указатели на xCANMsg В Из описания API работы с очередями с freeRTOS.org: portBASE_TYPE xQueueSendToBackFromISR( xQueueHandle pxQueue, const void *pvItemToQueue, portBASE_TYPE *pxHigherPriorityTaskWoken ); где pvItemToQueue - A pointer to the item that is to be placed on the queue. The size of the items the queue will hold was defined when the queue was created, so this many bytes will be copied from pvItemToQueue into the queue storage area. Следовательно, если я хочу поместить указатель на xCANMsg в очередь, я должен передать указатель на него, т.е. указатель на указатель. пункт2: Я не знаю как можно по-другому организовать приём сообщений от CAN и постановку их в очередь. Если "просто" обьявить переменную типа xCANMsg и передать указатель на неё в очередь, то следующее принятое сообщение затрёт предыдущее, поскольку будет записываться на то же место. Или может быть я заблуждаюсь? Насчёт освобождения памяти - я его освобождаю в том task'е, где я обрабатываю это сообщение: if( xQueueReceive( receiveCANQueue, &( pRecMsg ), ( portTickType ) 1 ) ) { //mirror message pMsg->Frame = pRecMsg->Frame; // 29-bit, no RTR, DLC is 8 bytes pMsg->MsgID = pRecMsg->MsgID; // CAN ID pMsg->DataA = pRecMsg->DataA; pMsg->DataB = pRecMsg->DataB; //free memory pRecMsg vPortFree(pRecMsg) ; CAN1_SendMessage( pMsg ) ; } пункт4: вполне согласен. Вопрос: как печатать сообщения: оформлять отдельный task с очередью, в которую передавать указатели на строки, которые нужно распечатать и из task'a их печатать? Буду рад любым замечаниям.
  6. LPC2388 CAN freeRTOS

    Для abort Сменил настройки MAM с disabled на fully enabled - сообщений стало гораздо больше проходить перед Pabt.
  7. LPC2388 CAN freeRTOS

    Плата с lpc2388 под управленим freeRTOS. Получаю сообщение по CAN1 - вваливаюсь в обработчик прерывания. Если дальше выполнять пошагово в дебаггере (jtag) то всё хорошо работает, но если запустить (RUN), то раз в ~10 сообщений вываливается в Pabt. Причём вываливается после выхода из обработчика прерывания. В R14(LR) при этом чаще всего 0x286e9b12. Поскольку прерывание может пробуждать другие task'и, то оформлял как оформлено прерывание от UART след. образом: vCAN_ISREntry portSAVE_CONTEXT ; Save the context of the current task. LDR R0, =vCAN_ISR ; Call the ISR routine. MOV LR, PC BX R0 portRESTORE_CONTEXT ; Restore the context of the current task - ; which may be different to the task that ; was interrupted. Далее текст главной функции прерывания: void vCAN_ISR(void) //__irq { portBASE_TYPE xHigherPriorityTaskWoken; CANStatus = CAN_RX_SR; if ( CANStatus & (1 << 8) ) { CAN1RxCount++; xHigherPriorityTaskWoken = CAN_ISR_Rx1(); } if ( CAN1GSR & (1 << 6 ) ) { /* The error count includes both TX and RX */ CAN1ErrCount = (CAN1GSR >> 16 ); } VICVectAddr = 0; /* Acknowledge Interrupt */ /* Actual macro used here is port specific. */ portEXIT_SWITCHING_ISR(xHigherPriorityTaskWoken); } И подпрограмма обработки приёма по CAN portBASE_TYPE CAN_ISR_Rx1( void ) { portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; xCANMsg * pMsg = ( xCANMsg * ) pvPortMalloc( sizeof( xCANMsg ) ); if(pMsg == 0){ vSerialPutString( NULL, "No memory avalible", 25); xSerialPutChar( NULL, CR, comNO_BLOCK); while(1){}; } pMsg->Frame = CAN1RFS; pMsg->MsgID = CAN1RID; // ID //change by gongjun pMsg->DataA = CAN1RDA; // Data A pMsg->DataB = CAN1RDB; // Data B xQueueSendToBackFromISR( receiveCANQueue, ( void * ) &pMsg, &xHigherPriorityTaskWoken); CAN1RxDone = TRUE; CAN1CMR = 0x04; // release receive buffer return xHigherPriorityTaskWoken; }
  8. uint32_t a; uart1_puthex_byte(sizeof(a));//0x04 a = (0x01<<24)|(0x02<<16)|(0x03<<8)|(0x04); //main.c:415: warning: left shift count >= width of type //main.c:415: warning: left shift count >= width of type uart1_puthex_word(a>>16);//0x0000 uart1_puthex_word(a&0x0000ffff);//0x0304 Почему компилятор жалуется, что при сдвиге выход за границы, если размер типа 4 байта? Как скомпоновать в uint32_t 4 байта?
  9. USB Host под MSC

    а можешь поделиться реализацией usb host от nxp, а то на официальном сайте никак добиться не могу. email: lind@tut.by
  10. Так что по поводу usb-host и поддержка usb flash? Кто - нибудь сталкивался? Пока использование операционной системы не предполагается.
  11. Использую Keil RealView MDK-ARM V3.23 В функции main объявлена структура : int main(void) { struct ButtState buttStates[20];//array of structures[/color] Далее из main вызывается другая функция pressPreprocess, объявленная в другом файле, подключенном к проекту. Эта функция ипользует структуру buttStates[20].Но компилятор выдаёт ошибку, что не может найти эту переменную: identifyer buttStates is undefined... Переменная объявленная в main является локальной. Как не делая её голобальной и не передавая ее в функцию(или указатель на неё) решить проблему вызова функции из другого файла, работающей с локальными переменными?
  12. Нужно сделать устройство к которому можно подключать USB flash память. Микроконтроллер LPC2388 с usb host внутри. Но ходят слухи что реализация поддержки USB flash довольно сложная штука. Может кто-нибудь реализовывал подобное. Может у кого есть библиотеки котоырми он может поделиться или ссылки.
  13. В W5100+AVR создаётся сокет в режиме сервера. К нему подключается 1 клиент. Другой клиент в это время к нему подключиться не может. В ПК это реализованно программно так, что если к серверу подключается клиент, то он переводится на другой порт, а свободный слушающий сервер остаётся на исходном порту. Таким образом все клиенты могут стучаться к одному серверу и получать положительный ответ на один и тот же порт. Как можно это реализовать на визнете?
  14. USART attiny2313

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