Deus-Ex 0 5 декабря, 2015 Опубликовано 5 декабря, 2015 · Жалоба Здравствуйте, исп. ATSAM3S4A, AtmelStudio 6.2, freertos 8.2.3, "freertos - spi interface layer(service)" подцеплен из коробки. По умолчанию задача task_monitor выводит инфу о запущенных задачах, все работает, однако если добавить в задачу функционал - записи по SPI порту, то МК зависает (причем при компиляции с небольшими изменениями МК уходит либо в HardFault_Handler, либо виснет на ConfigAssert в queue.c(как в данном случае)) . "freertos_spi_write_packet() is an ASF specific FreeRTOS driver function. It configures the SPI peripheral DMA controller (PDC) to transmit data on the SPI port, then waits until the transmission is complete. Other RTOS tasks execute while the transmission is in progress." freertos_spi_if spi_freertos; static void task_monitor(void *pvParameters) {uint8_t uc_pcs;uint8_t data[4]; static portCHAR szList[64]; UNUSED(pvParameters); { //printf("--- task ## %u", (unsigned int)uxTaskGetNumberOfTasks()); //vTaskList((signed portCHAR *)szList); //printf(szList); data[0]=0x80;data[1]=0x0E; spi_set_peripheral_chip_select_value(spi_freertos, spi_get_pcs(SPI_SEL_atm90)); //Added printf("1 status: %d \n\r",freertos_spi_write_packet(spi_freertos,data,2,200UL));//!Тут виснет! spi_set_peripheral_chip_select_value(spi_freertos, 0x0f); // spi_set_lastxfer(spi_freertos); // vTaskDelay(1000); }while(1); } freertos_spi_if prepare_spi_port( Spi *spi_base ) {/* Handle used to access the initialized port by other FreeRTOS ASF functions. */ freertos_spi_if freertos_spi; const freertos_peripheral_options_t driver_options={NULL,0,0x0f,SPI_MASTER,(USE_TX_ACCESS_MUTEX|USE_RX_ACCESS_MUTEX|WAIT_TX_COMPLETE|WAIT_RX_COMPLETE)}; /* Call the SPI specific FreeRTOS ASF driver initialization function. */ freertos_spi=freertos_spi_master_init(spi_base,&driver_options); /* Check the port was initialized successfully. */ configASSERT(freertos_spi); if(freertos_spi != NULL ) { spi_disable(spi_base); spi_disable_mode_fault_detect(SPI_MASTER_BASE); .... spi_enable(spi_base);}; return freertos_spi;} int main (void) { sysclk_init(); NVIC_SetPriorityGrouping( 0 ); board_init(); configure_console(); spi_freertos=prepare_spi_port(SPI_MASTER_BASE); if (xTaskCreate(task_monitor, "Monitor", 1024/sizeof(portSTACK_TYPE), NULL, (tskIDLE_PRIORITY+1), NULL) != pdPASS) {printf("Failed to create Monitor task\r\n"); } vTaskStartScheduler(); } FreeRTOSconfig https://github.com/jameswalmsley/FreeRTOS/b...reeRTOSConfig.h Disassembly code http://textuploader.com/5g7n2 Stack Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Deus-Ex 0 12 декабря, 2015 Опубликовано 12 декабря, 2015 · Жалоба Решение - использовать версию не выше 8.1.2, code works with the binary semaphore, but the 8.2.3 doesn't Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SMaster 0 18 декабря, 2015 Опубликовано 18 декабря, 2015 · Жалоба М.б. поможет увеличение стека задачи? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться