Перейти к содержанию
    

Cryon

Участник
  • Постов

    9
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Да, спасибо! Похоже, так все и есть. Почитал еще форумов, порылся в коде. Когда xBlockTime в действии задачи будут суспендиться и восстанавливаться циклически, соответственно vTaskSuspendAll() и xTaskResumeAll(). И как я понял вот как раз последняя из них передает управление задаче с более высоким приоритетом, чем текущаяя посредством taskYIELD(). :yeah: Тем не менее, допустим, что нет задачи с большим приоритетом и текущая задача остается активной в режиме ожидания xBlockTime. Тогда получается, что будут утеряны все тики таймера, возникшие во время xBlockTime. В этом случае вышеприведенная функция посылки данных через очередь в критической секции, не самое хорошее решение, т.к. пагубно влияет на время отклика ОС. И всетаки это была демо функция и свою роль она сыграла правильно :) Шаблон для таймаута в xQueueGenericSend: if( xTicksToWait > ( portTickType ) 0 ) { vTaskSuspendAll(); if( prvIsQueueFull( pxQueue ) ) { if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE ) { if( !xTaskResumeAll() ) { taskYIELD(); } } else { ( void ) xTaskResumeAll(); } } else { ( void ) xTaskResumeAll(); } }
  2. Доброго времени суток! Есть пример функции, которая посылает байт (см. ниже), используя очередь под FreeRTOS. Если ее упростить до уровня моего вопроса, то останется вот это: portENTER_CRITICAL (); xQueueSend (xTX0Queue, &cOutChar, xBlockTime); portEXIT_CRITICAL (); Внимание вопрос: portENTER_CRITICAL () запрещает прерывания в текущем режиме, причем как IRQ, так и FIQ. Тогда как же так получается, что отрабатывает xBlockTime (т.е. прерывания от таймера должны быть) в xQueueSend() ? Спасибо! Сами функции: signed portBASE_TYPE uart0PutChar (signed portCHAR cOutChar, portTickType xBlockTime) { signed portBASE_TYPE xReturn = 0; portENTER_CRITICAL (); { // // Is there space to write directly to the UART? // if (*plTHREEmpty0 == (portLONG) pdTRUE) { *plTHREEmpty0 = pdFALSE; UART0_THR = cOutChar; xReturn = pdPASS; } else { // // We cannot write directly to the UART, so queue the character. Block for a maximum of // xBlockTime if there is no space in the queue. // xReturn = xQueueSend (xTX0Queue, &cOutChar, xBlockTime); // // Depending on queue sizing and task prioritisation: While we were blocked waiting to post // interrupts were not disabled. It is possible that the serial ISR has emptied the Tx queue, // in which case we need to start the Tx off again. // if ((*plTHREEmpty0 == (portLONG) pdTRUE) && (xReturn == pdPASS)) { xQueueReceive (xTX0Queue, &cOutChar, serNO_BLOCK); *plTHREEmpty0 = pdFALSE; UART0_THR = cOutChar; } } } portEXIT_CRITICAL (); return xReturn; } portENTER_CRITICAL() продифайнен так: #define portENTER_CRITICAL() vPortEnterCritical(); void vPortEnterCritical( void ) { /* Disable interrupts as per portDISABLE_INTERRUPTS(); */ asm volatile ( "STMDB SP!, {R0} \n\t" /* Push R0. */ "MRS R0, CPSR \n\t" /* Get CPSR. */ "ORR R0, R0, #0xC0 \n\t" /* Disable IRQ, FIQ. */ "MSR CPSR, R0 \n\t" /* Write back modified value. */ "LDMIA SP!, {R0}" ); /* Pop R0. */ /* Now interrupts are disabled ulCriticalNesting can be accessed directly. Increment ulCriticalNesting to keep a count of how many times portENTER_CRITICAL() has been called. */ ulCriticalNesting++; }
  3. плата на 9260

    +1 И меня впишите плиз :)
  4. Да, спасибо. В Keil оказалась поддержка трех процов S3C2410A, S3C2440A и S3C44B0X. Жалко только, что стартапы все заточены под Keil-ий ассемблер. В GNU-ом подкаталоге Samsung-а нет и в помине. ))) Ду да ничего, главное есть, что покапать! :yeah:
  5. Подскажите, пожалуйста, как завести этот (S3C2410) проц? Никак не заводится. Пока копаю всякие исходники, но никак не могу понять, какой минимум инициализации для этого проца нужен. Компилирую GCC, скармливаю: -mtune=arm920t -mcpu=arm920t -mlittle-endian, ассемблеру: -EL -mcpu=arm920t Заливаю и 0 реакции. Не могу понять, в чем дело в коде инициализации или в ключах? Хочется хотя бы лэдами помигать…
  6. Огромное спасибо всем и в особенности stream!!! :08: Все получилось! Переделал софт по совету stream + установил PWR, DTR, RTS в активное состояние. После чего запускаем SIM FUT -> Start Download и подаем питание на борду. Вот и все, побежал индикатор Теперь держу прошивочку для перепрошивки SIM300Z на всякий случай :)
  7. CADiLO> к сожалению пока не вариант Во! пока переключился на другую задачу, как освобожусь, сразу попробую... результаты сообщу! :)
  8. Мудрый All, Есть борда от starterkit с установленным модулем SIM300Z (1008B15SIM300M32_SST34HF3284). Взглянуть можно здесь: http://www.starterkit.ru/new/index.php?nam...=page&pid=1 Схема здесь: http://www.starterkit.ru/doc/SK_LPC2378.pdf Задача прошить модуль прямо на борде. Написал програмульку, которая гоняет байты между SIM300Z-UART1 и PC-UART0. В обычном режиме все путем, с PC все AT команды проходят на OK. Далее для прошивки, отрезаю PWRKEY от проца и соединяю с землей на совсем. Далее перепробовав все варианты из форума (например здесь: http://electronix.ru/forum/index.php?showt...p;#entry343675) Вижу только, как SIM FUT посылает 45 45 45 …, ответа с SIM300 нет никакого… Подскажите, что можно посмотреть?
  9. плата на 9260

    Да да, давно уже хочется заполучить платку. Не могли бы вы проапдейтить текущее положение вещей?
×
×
  • Создать...