diff --git a/cherryusb_config_template.h b/cherryusb_config_template.h index 97d724ca..adec67eb 100644 --- a/cherryusb_config_template.h +++ b/cherryusb_config_template.h @@ -44,6 +44,17 @@ /* Enable test mode */ // #define CONFIG_USBDEV_TEST_MODE +//#define CONFIG_USBDEV_TX_RX_THREAD + +#ifdef CONFIG_USBDEV_TX_RX_THREAD +#ifndef CONFIG_USBDEV_TX_RX_PRIO +#define CONFIG_USBDEV_TX_RX_PRIO 4 +#endif +#ifndef CONFIG_USBDEV_TX_RX_STACKSIZE +#define CONFIG_USBDEV_TX_RX_STACKSIZE 2048 +#endif +#endif + #ifndef CONFIG_USBDEV_MSC_BLOCK_SIZE #define CONFIG_USBDEV_MSC_BLOCK_SIZE 512 #endif @@ -60,18 +71,6 @@ #define CONFIG_USBDEV_MSC_VERSION_STRING "0.01" #endif -// #define CONFIG_USBDEV_MSC_THREAD - -#ifdef CONFIG_USBDEV_MSC_THREAD -#ifndef CONFIG_USBDEV_MSC_STACKSIZE -#define CONFIG_USBDEV_MSC_STACKSIZE 2048 -#endif - -#ifndef CONFIG_USBDEV_MSC_PRIO -#define CONFIG_USBDEV_MSC_PRIO 4 -#endif -#endif - #ifndef CONFIG_USBDEV_AUDIO_VERSION #define CONFIG_USBDEV_AUDIO_VERSION 0x0100 #endif diff --git a/class/msc/usbd_msc.c b/class/msc/usbd_msc.c index 9655c951..2220e112 100644 --- a/class/msc/usbd_msc.c +++ b/class/msc/usbd_msc.c @@ -6,13 +6,6 @@ #include "usbd_core.h" #include "usbd_msc.h" #include "usb_scsi.h" -#ifdef CONFIG_USBDEV_MSC_THREAD -#include "usb_osal.h" -#endif - -#define MSC_THREAD_OP_READ_MEM 1 -#define MSC_THREAD_OP_WRITE_MEM 2 -#define MSC_THREAD_OP_WRITE_DONE 3 #define MSD_OUT_EP_IDX 0 #define MSD_IN_EP_IDX 1 @@ -49,13 +42,6 @@ USB_NOCACHE_RAM_SECTION struct usbd_msc_cfg_priv { uint8_t block_buffer[CONFIG_USBDEV_MSC_BLOCK_SIZE]; } usbd_msc_cfg; -#ifdef CONFIG_USBDEV_MSC_THREAD -static volatile uint8_t thread_op; -static usb_osal_sem_t msc_sem; -static usb_osal_thread_t msc_thread; -static volatile uint32_t current_byte_read; -#endif - static void usbd_msc_reset(void) { usbd_msc_cfg.stage = MSC_READ_CBW; @@ -635,17 +621,11 @@ static bool SCSI_processRead(void) transfer_len = MIN(usbd_msc_cfg.nsectors * usbd_msc_cfg.scsi_blk_size, CONFIG_USBDEV_MSC_BLOCK_SIZE); - /* Start reading one sector */ -#ifdef CONFIG_USBDEV_MSC_THREAD - thread_op = MSC_THREAD_OP_READ_MEM; - usb_osal_sem_give(msc_sem); - return true; -#else if (usbd_msc_sector_read(usbd_msc_cfg.start_sector, usbd_msc_cfg.block_buffer, transfer_len) != 0) { SCSI_SetSenseData(SCSI_KCQHE_UREINRESERVEDAREA); return false; } -#endif + usbd_ep_start_write(mass_ep_data[MSD_IN_EP_IDX].ep_addr, usbd_msc_cfg.block_buffer, transfer_len); usbd_msc_cfg.start_sector += (transfer_len / usbd_msc_cfg.scsi_blk_size); @@ -659,47 +639,15 @@ static bool SCSI_processRead(void) return true; } -#ifdef CONFIG_USBDEV_MSC_THREAD -static void usbd_msc_thread_memory_read_done(void) -{ - size_t flags; - uint32_t transfer_len; - - flags = usb_osal_enter_critical_section(); - - transfer_len = MIN(usbd_msc_cfg.nsectors * usbd_msc_cfg.scsi_blk_size, CONFIG_USBDEV_MSC_BLOCK_SIZE); - - usbd_ep_start_write(mass_ep_data[MSD_IN_EP_IDX].ep_addr, - usbd_msc_cfg.block_buffer, transfer_len); - - usbd_msc_cfg.start_sector += (transfer_len / usbd_msc_cfg.scsi_blk_size); - usbd_msc_cfg.nsectors -= (transfer_len / usbd_msc_cfg.scsi_blk_size); - usbd_msc_cfg.csw.dDataResidue -= transfer_len; - - if (usbd_msc_cfg.nsectors == 0) { - usbd_msc_cfg.stage = MSC_SEND_CSW; - } - usb_osal_leave_critical_section(flags); -} -#endif - static bool SCSI_processWrite(uint32_t nbytes) { uint32_t data_len = 0; USB_LOG_DBG("write lba:%d\r\n", usbd_msc_cfg.start_sector); - /* Start writing one sector */ -#ifdef CONFIG_USBDEV_MSC_THREAD - thread_op = MSC_THREAD_OP_WRITE_MEM; - current_byte_read = nbytes; - usb_osal_sem_give(msc_sem); - return true; -#else if (usbd_msc_sector_write(usbd_msc_cfg.start_sector, usbd_msc_cfg.block_buffer, nbytes) != 0) { SCSI_SetSenseData(SCSI_KCQHE_WRITEFAULT); return false; } -#endif usbd_msc_cfg.start_sector += (nbytes / usbd_msc_cfg.scsi_blk_size); usbd_msc_cfg.nsectors -= (nbytes / usbd_msc_cfg.scsi_blk_size); @@ -715,29 +663,6 @@ static bool SCSI_processWrite(uint32_t nbytes) return true; } -#ifdef CONFIG_USBDEV_MSC_THREAD -static void usbd_msc_thread_memory_write_done() -{ - size_t flags; - uint32_t data_len = 0; - - flags = usb_osal_enter_critical_section(); - - usbd_msc_cfg.start_sector += (current_byte_read / usbd_msc_cfg.scsi_blk_size); - usbd_msc_cfg.nsectors -= (current_byte_read / usbd_msc_cfg.scsi_blk_size); - usbd_msc_cfg.csw.dDataResidue -= current_byte_read; - - if (usbd_msc_cfg.nsectors == 0) { - usbd_msc_send_csw(CSW_STATUS_CMD_PASSED); - } else { - data_len = MIN(usbd_msc_cfg.nsectors * usbd_msc_cfg.scsi_blk_size, CONFIG_USBDEV_MSC_BLOCK_SIZE); - usbd_ep_start_read(mass_ep_data[MSD_OUT_EP_IDX].ep_addr, usbd_msc_cfg.block_buffer, data_len); - } - - usb_osal_leave_critical_section(flags); -} -#endif - static bool SCSI_CBWDecode(uint32_t nbytes) { uint8_t *buf2send = usbd_msc_cfg.block_buffer; @@ -883,35 +808,6 @@ void mass_storage_bulk_in(uint8_t ep, uint32_t nbytes) } } -#ifdef CONFIG_USBDEV_MSC_THREAD -static void usbd_msc_thread(void *argument) -{ - uint32_t data_len = 0; - while (1) { - usb_osal_sem_take(msc_sem, 0xffffffff); - - switch (thread_op) { - case MSC_THREAD_OP_READ_MEM: - data_len = MIN(usbd_msc_cfg.nsectors * usbd_msc_cfg.scsi_blk_size, CONFIG_USBDEV_MSC_BLOCK_SIZE); - if (usbd_msc_sector_read(usbd_msc_cfg.start_sector, usbd_msc_cfg.block_buffer, data_len) != 0) { - SCSI_SetSenseData(SCSI_KCQHE_UREINRESERVEDAREA); - } - usbd_msc_thread_memory_read_done(); - break; - case MSC_THREAD_OP_WRITE_MEM: - data_len = MIN(usbd_msc_cfg.nsectors * usbd_msc_cfg.scsi_blk_size, CONFIG_USBDEV_MSC_BLOCK_SIZE); - if (usbd_msc_sector_write(usbd_msc_cfg.start_sector, usbd_msc_cfg.block_buffer, data_len) != 0) { - SCSI_SetSenseData(SCSI_KCQHE_WRITEFAULT); - } - usbd_msc_thread_memory_write_done(); - break; - default: - break; - } - } -} -#endif - struct usbd_interface *usbd_msc_init_intf(struct usbd_interface *intf, const uint8_t out_ep, const uint8_t in_ep) { intf->class_interface_handler = msc_storage_class_interface_request_handler; @@ -935,14 +831,6 @@ struct usbd_interface *usbd_msc_init_intf(struct usbd_interface *intf, const uin USB_LOG_ERR("msc block buffer overflow\r\n"); return NULL; } -#ifdef CONFIG_USBDEV_MSC_THREAD - msc_sem = usb_osal_sem_create(1); - msc_thread = usb_osal_thread_create("usbd_msc", CONFIG_USBDEV_MSC_STACKSIZE, CONFIG_USBDEV_MSC_PRIO, usbd_msc_thread, NULL); - if (msc_thread == NULL) { - USB_LOG_ERR("no enough memory to alloc msc thread\r\n"); - return NULL; - } -#endif return intf; } diff --git a/core/usbd_core.c b/core/usbd_core.c index 2fc8a363..1d4e57b3 100644 --- a/core/usbd_core.c +++ b/core/usbd_core.c @@ -6,6 +6,9 @@ * SPDX-License-Identifier: Apache-2.0 */ #include "usbd_core.h" +#ifdef CONFIG_USBDEV_TX_RX_THREAD +#include "usb_osal.h" +#endif /* general descriptor field offsets */ #define DESC_bLength 0 /** Length offset */ @@ -23,6 +26,12 @@ #define USB_EP_OUT_NUM 8 #define USB_EP_IN_NUM 8 +struct usbd_tx_rx_msg { + uint8_t ep; + uint32_t nbytes; + usbd_endpoint_callback cb; +}; + USB_NOCACHE_RAM_SECTION struct usbd_core_cfg_priv { /** Setup packet */ USB_MEM_ALIGNX struct usb_setup_packet setup; @@ -43,9 +52,6 @@ USB_NOCACHE_RAM_SECTION struct usbd_core_cfg_priv { /* Buffer used for storing standard, class and vendor request data */ USB_MEM_ALIGNX uint8_t req_data[CONFIG_USBDEV_REQUEST_BUFFER_LEN]; - usbd_endpoint_callback in_ep_cb[USB_EP_IN_NUM]; - usbd_endpoint_callback out_ep_cb[USB_EP_OUT_NUM]; - /** Variable to check whether the usb has been configured */ bool configured; /** Currently selected configuration */ @@ -63,6 +69,14 @@ static struct usb_msosv1_descriptor *msosv1_desc; static struct usb_msosv2_descriptor *msosv2_desc; static struct usb_bos_descriptor *bos_desc; +struct usbd_tx_rx_msg tx_msg[USB_EP_IN_NUM]; +struct usbd_tx_rx_msg rx_msg[USB_EP_OUT_NUM]; + +#ifdef CONFIG_USBDEV_TX_RX_THREAD +usb_osal_mq_t usbd_tx_rx_mq; +usb_osal_thread_t usbd_tx_rx_thread; +#endif + static void usbd_class_event_notify_handler(uint8_t event, void *arg); static void usbd_print_setup(struct usb_setup_packet *setup) @@ -1023,90 +1037,130 @@ void usbd_event_ep0_setup_complete_handler(uint8_t *psetup) } } -void usbd_event_ep_in_complete_handler(uint8_t ep, uint32_t nbytes) +void usbd_event_ep0_in_complete_handler(uint8_t ep, uint32_t nbytes) { - if (ep == USB_CONTROL_IN_EP0) { - struct usb_setup_packet *setup = &usbd_core_cfg.setup; + struct usb_setup_packet *setup = &usbd_core_cfg.setup; - usbd_core_cfg.ep0_data_buf += nbytes; - usbd_core_cfg.ep0_data_buf_residue -= nbytes; + usbd_core_cfg.ep0_data_buf += nbytes; + usbd_core_cfg.ep0_data_buf_residue -= nbytes; - USB_LOG_DBG("EP0 send %d bytes, %d remained\r\n", nbytes, usbd_core_cfg.ep0_data_buf_residue); + USB_LOG_DBG("EP0 send %d bytes, %d remained\r\n", nbytes, usbd_core_cfg.ep0_data_buf_residue); - if (usbd_core_cfg.ep0_data_buf_residue != 0) { - /* Start sending the remain data */ - usbd_ep_start_write(USB_CONTROL_IN_EP0, usbd_core_cfg.ep0_data_buf, usbd_core_cfg.ep0_data_buf_residue); + if (usbd_core_cfg.ep0_data_buf_residue != 0) { + /* Start sending the remain data */ + usbd_ep_start_write(USB_CONTROL_IN_EP0, usbd_core_cfg.ep0_data_buf, usbd_core_cfg.ep0_data_buf_residue); + } else { + if (usbd_core_cfg.zlp_flag == true) { + usbd_core_cfg.zlp_flag = false; + /* Send zlp to host */ + USB_LOG_DBG("EP0 Send zlp\r\n"); + usbd_ep_start_write(USB_CONTROL_IN_EP0, NULL, 0); } else { - if (usbd_core_cfg.zlp_flag == true) { - usbd_core_cfg.zlp_flag = false; - /* Send zlp to host */ - USB_LOG_DBG("EP0 Send zlp\r\n"); - usbd_ep_start_write(USB_CONTROL_IN_EP0, NULL, 0); - } else { - /* Satisfying three conditions will jump here. + /* Satisfying three conditions will jump here. * 1. send status completely * 2. send zlp completely * 3. send last data completely. */ - if (setup->wLength && ((setup->bmRequestType & USB_REQUEST_DIR_MASK) == USB_REQUEST_DIR_IN)) { - /* if all data has sent completely, start reading out status */ - usbd_ep_start_read(USB_CONTROL_OUT_EP0, NULL, 0); - } + if (setup->wLength && ((setup->bmRequestType & USB_REQUEST_DIR_MASK) == USB_REQUEST_DIR_IN)) { + /* if all data has sent completely, start reading out status */ + usbd_ep_start_read(USB_CONTROL_OUT_EP0, NULL, 0); } } - } else { - if (usbd_core_cfg.in_ep_cb[ep & 0x7f]) { - usbd_core_cfg.in_ep_cb[ep & 0x7f](ep, nbytes); - } } } +void usbd_event_ep0_out_complete_handler(uint8_t ep, uint32_t nbytes) +{ + struct usb_setup_packet *setup = &usbd_core_cfg.setup; + + if (nbytes > 0) { + usbd_core_cfg.ep0_data_buf += nbytes; + usbd_core_cfg.ep0_data_buf_residue -= nbytes; + + USB_LOG_DBG("EP0 recv %d bytes, %d remained\r\n", nbytes, usbd_core_cfg.ep0_data_buf_residue); + + if (usbd_core_cfg.ep0_data_buf_residue == 0) { + /* Received all, send data to handler */ + usbd_core_cfg.ep0_data_buf = usbd_core_cfg.req_data; + if (!usbd_setup_request_handler(setup, &usbd_core_cfg.ep0_data_buf, &usbd_core_cfg.ep0_data_buf_len)) { + usbd_ep_set_stall(USB_CONTROL_IN_EP0); + return; + } + + /*Send status to host*/ + usbd_ep_start_write(USB_CONTROL_IN_EP0, NULL, 0); + } else { + /* Start reading the remain data */ + usbd_ep_start_read(USB_CONTROL_OUT_EP0, usbd_core_cfg.ep0_data_buf, usbd_core_cfg.ep0_data_buf_residue); + } + } else { + /* Read out status completely, do nothing */ + USB_LOG_DBG("EP0 recv out status\r\n"); + } +} + +void usbd_event_ep_in_complete_handler(uint8_t ep, uint32_t nbytes) +{ +#ifndef CONFIG_USBDEV_TX_RX_THREAD + if (tx_msg[ep & 0x7f].cb) { + tx_msg[ep & 0x7f].cb(ep, nbytes); + } +#else + tx_msg[ep & 0x7f].nbytes = nbytes; + usb_osal_mq_send(usbd_tx_rx_mq, (uint32_t)&tx_msg[ep & 0x7f]); +#endif +} + void usbd_event_ep_out_complete_handler(uint8_t ep, uint32_t nbytes) { - if (ep == USB_CONTROL_OUT_EP0) { - struct usb_setup_packet *setup = &usbd_core_cfg.setup; +#ifndef CONFIG_USBDEV_TX_RX_THREAD + if (rx_msg[ep & 0x7f].cb) { + rx_msg[ep & 0x7f].cb(ep, nbytes); + } +#else + rx_msg[ep & 0x7f].nbytes = nbytes; + usb_osal_mq_send(usbd_tx_rx_mq, (uint32_t)&rx_msg[ep & 0x7f]); +#endif +} - if (nbytes > 0) { - usbd_core_cfg.ep0_data_buf += nbytes; - usbd_core_cfg.ep0_data_buf_residue -= nbytes; +#ifdef CONFIG_USBDEV_TX_RX_THREAD +static void usbdev_tx_rx_thread(void *argument) +{ + struct usbd_tx_rx_msg *msg; + int ret; - USB_LOG_DBG("EP0 recv %d bytes, %d remained\r\n", nbytes, usbd_core_cfg.ep0_data_buf_residue); - - if (usbd_core_cfg.ep0_data_buf_residue == 0) { - /* Received all, send data to handler */ - usbd_core_cfg.ep0_data_buf = usbd_core_cfg.req_data; - if (!usbd_setup_request_handler(setup, &usbd_core_cfg.ep0_data_buf, &usbd_core_cfg.ep0_data_buf_len)) { - usbd_ep_set_stall(USB_CONTROL_IN_EP0); - return; - } - - /*Send status to host*/ - usbd_ep_start_write(USB_CONTROL_IN_EP0, NULL, 0); - } else { - /* Start reading the remain data */ - usbd_ep_start_read(USB_CONTROL_OUT_EP0, usbd_core_cfg.ep0_data_buf, usbd_core_cfg.ep0_data_buf_residue); - } - } else { - /* Read out status completely, do nothing */ - USB_LOG_DBG("EP0 recv out status\r\n"); + while (1) { + ret = usb_osal_mq_recv(usbd_tx_rx_mq, (uint32_t *)&msg, 0xffffffff); + if (ret < 0) { + continue; } - } else { - if (usbd_core_cfg.out_ep_cb[ep & 0x7f]) { - usbd_core_cfg.out_ep_cb[ep & 0x7f](ep, nbytes); + + if (msg->cb) { + msg->cb(msg->ep, msg->nbytes); } } } +#endif + #if defined(CHERRYUSB_VERSION) && (CHERRYUSB_VERSION > 0x000700) void usbd_desc_register(struct usb_descriptor *desc) { usbd_core_cfg.descriptors = desc; usbd_core_cfg.intf_offset = 0; + tx_msg[0].ep = 0x80; + tx_msg[0].cb = usbd_event_ep0_in_complete_handler; + rx_msg[0].ep = 0x00; + rx_msg[0].cb = usbd_event_ep0_out_complete_handler; } #else void usbd_desc_register(const uint8_t *desc) { usbd_core_cfg.descriptors = desc; usbd_core_cfg.intf_offset = 0; + tx_msg[0].ep = 0x80; + tx_msg[0].cb = usbd_event_ep0_in_complete_handler; + rx_msg[0].ep = 0x00; + rx_msg[0].cb = usbd_event_ep0_out_complete_handler; } /* Register MS OS Descriptors version 1 */ @@ -1137,9 +1191,11 @@ void usbd_add_interface(struct usbd_interface *intf) void usbd_add_endpoint(struct usbd_endpoint *ep) { if (ep->ep_addr & 0x80) { - usbd_core_cfg.in_ep_cb[ep->ep_addr & 0x7f] = ep->ep_cb; + tx_msg[ep->ep_addr & 0x7f].ep = ep->ep_addr; + tx_msg[ep->ep_addr & 0x7f].cb = ep->ep_cb; } else { - usbd_core_cfg.out_ep_cb[ep->ep_addr & 0x7f] = ep->ep_cb; + rx_msg[ep->ep_addr & 0x7f].ep = ep->ep_addr; + rx_msg[ep->ep_addr & 0x7f].cb = ep->ep_cb; } } @@ -1150,6 +1206,16 @@ bool usb_device_is_configured(void) int usbd_initialize(void) { +#ifdef CONFIG_USBDEV_TX_RX_THREAD + usbd_tx_rx_mq = usb_osal_mq_create(32); + if (usbd_tx_rx_mq == NULL) { + return -1; + } + usbd_tx_rx_thread = usb_osal_thread_create("usbd_tx_rx", CONFIG_USBDEV_TX_RX_STACKSIZE, CONFIG_USBDEV_TX_RX_PRIO, usbdev_tx_rx_thread, NULL); + if (usbd_tx_rx_thread == NULL) { + return -1; + } +#endif return usb_dc_init(); } @@ -1158,5 +1224,7 @@ int usbd_deinitialize(void) usbd_core_cfg.intf_offset = 0; usb_slist_init(&usbd_intf_head); usb_dc_deinit(); +#ifdef CONFIG_USBDEV_TX_RX_THREAD +#endif return 0; } diff --git a/demo/stm32/usb_device/stm32f429igt6/Core/Inc/usb_config.h b/demo/stm32/usb_device/stm32f429igt6/Core/Inc/usb_config.h index b9c57985..c55bf494 100644 --- a/demo/stm32/usb_device/stm32f429igt6/Core/Inc/usb_config.h +++ b/demo/stm32/usb_device/stm32f429igt6/Core/Inc/usb_config.h @@ -44,6 +44,17 @@ /* Enable test mode */ // #define CONFIG_USBDEV_TEST_MODE +//#define CONFIG_USBDEV_TX_RX_THREAD + +#ifdef CONFIG_USBDEV_TX_RX_THREAD +#ifndef CONFIG_USBDEV_TX_RX_PRIO +#define CONFIG_USBDEV_TX_RX_PRIO 4 +#endif +#ifndef CONFIG_USBDEV_TX_RX_STACKSIZE +#define CONFIG_USBDEV_TX_RX_STACKSIZE 2048 +#endif +#endif + #ifndef CONFIG_USBDEV_MSC_BLOCK_SIZE #define CONFIG_USBDEV_MSC_BLOCK_SIZE 512 #endif diff --git a/demo/stm32/usb_device/stm32f429igt6/Core/Src/main.c b/demo/stm32/usb_device/stm32f429igt6/Core/Src/main.c index 30ca582a..3e4f60ed 100644 --- a/demo/stm32/usb_device/stm32f429igt6/Core/Src/main.c +++ b/demo/stm32/usb_device/stm32f429igt6/Core/Src/main.c @@ -24,6 +24,8 @@ /* USER CODE BEGIN Includes */ #include "usbd_core.h" #include "usbd_cdc.h" +#include "FreeRTOS.h" +#include "task.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -126,10 +128,13 @@ int main(void) //MX_USB_OTG_HS_PCD_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ - + extern void cdc_acm_msc_init(void); cdc_acm_msc_init(); +#ifdef CONFIG_USBDEV_TX_RX_THREAD + vTaskStartScheduler(); +#endif /* USER CODE END 2 */ /* Infinite loop */ diff --git a/demo/stm32/usb_device/stm32f429igt6/Core/Src/stm32f4xx_it.c b/demo/stm32/usb_device/stm32f429igt6/Core/Src/stm32f4xx_it.c index a884d6ee..212ae849 100644 --- a/demo/stm32/usb_device/stm32f429igt6/Core/Src/stm32f4xx_it.c +++ b/demo/stm32/usb_device/stm32f429igt6/Core/Src/stm32f4xx_it.c @@ -23,6 +23,8 @@ #include "stm32f4xx_it.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ +#include "FreeRTOS.h" +#include "task.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -142,15 +144,15 @@ void UsageFault_Handler(void) /** * @brief This function handles System service call via SWI instruction. */ -void SVC_Handler(void) -{ - /* USER CODE BEGIN SVCall_IRQn 0 */ +//void SVC_Handler(void) +//{ +// /* USER CODE BEGIN SVCall_IRQn 0 */ - /* USER CODE END SVCall_IRQn 0 */ - /* USER CODE BEGIN SVCall_IRQn 1 */ +// /* USER CODE END SVCall_IRQn 0 */ +// /* USER CODE BEGIN SVCall_IRQn 1 */ - /* USER CODE END SVCall_IRQn 1 */ -} +// /* USER CODE END SVCall_IRQn 1 */ +//} /** * @brief This function handles Debug monitor. @@ -168,15 +170,15 @@ void DebugMon_Handler(void) /** * @brief This function handles Pendable request for system service. */ -void PendSV_Handler(void) -{ - /* USER CODE BEGIN PendSV_IRQn 0 */ +//void PendSV_Handler(void) +//{ +// /* USER CODE BEGIN PendSV_IRQn 0 */ - /* USER CODE END PendSV_IRQn 0 */ - /* USER CODE BEGIN PendSV_IRQn 1 */ +// /* USER CODE END PendSV_IRQn 0 */ +// /* USER CODE BEGIN PendSV_IRQn 1 */ - /* USER CODE END PendSV_IRQn 1 */ -} +// /* USER CODE END PendSV_IRQn 1 */ +//} /** * @brief This function handles System tick timer. @@ -184,7 +186,15 @@ void PendSV_Handler(void) void SysTick_Handler(void) { /* USER CODE BEGIN SysTick_IRQn 0 */ - +extern void xPortSysTickHandler(void); + #if (INCLUDE_xTaskGetSchedulerState == 1 ) + if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) + { + #endif /* INCLUDE_xTaskGetSchedulerState */ + xPortSysTickHandler(); + #if (INCLUDE_xTaskGetSchedulerState == 1 ) + } + #endif /* INCLUDE_xTaskGetSchedulerState */ /* USER CODE END SysTick_IRQn 0 */ HAL_IncTick(); /* USER CODE BEGIN SysTick_IRQn 1 */ diff --git a/demo/stm32/usb_device/stm32f429igt6/MDK-ARM/stm32f429igt6.uvoptx b/demo/stm32/usb_device/stm32f429igt6/MDK-ARM/stm32f429igt6.uvoptx index 3b7bdaf7..1c2e2b70 100644 --- a/demo/stm32/usb_device/stm32f429igt6/MDK-ARM/stm32f429igt6.uvoptx +++ b/demo/stm32/usb_device/stm32f429igt6/MDK-ARM/stm32f429igt6.uvoptx @@ -157,6 +157,22 @@ 0 0 + 810 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\..\class\msc\usbd_msc.c + + +
+ + 1 + 0 899 1
0
@@ -225,7 +241,7 @@ Application/MDK-ARM - 1 + 0 0 0 0 @@ -585,6 +601,134 @@ 0 0 + + 5 + 28 + 1 + 0 + 0 + 0 + ..\..\..\..\..\osal\usb_osal_freertos.c + usb_osal_freertos.c + 0 + 0 + + + + + FreeRTOS + 0 + 0 + 0 + 0 + + 6 + 29 + 1 + 0 + 0 + 0 + ..\..\..\..\..\third_party\FreeRTOS-10.4\croutine.c + croutine.c + 0 + 0 + + + 6 + 30 + 1 + 0 + 0 + 0 + ..\..\..\..\..\third_party\FreeRTOS-10.4\event_groups.c + event_groups.c + 0 + 0 + + + 6 + 31 + 1 + 0 + 0 + 0 + ..\..\..\..\..\third_party\FreeRTOS-10.4\list.c + list.c + 0 + 0 + + + 6 + 32 + 1 + 0 + 0 + 0 + ..\..\..\..\..\third_party\FreeRTOS-10.4\queue.c + queue.c + 0 + 0 + + + 6 + 33 + 1 + 0 + 0 + 0 + ..\..\..\..\..\third_party\FreeRTOS-10.4\stream_buffer.c + stream_buffer.c + 0 + 0 + + + 6 + 34 + 1 + 0 + 0 + 0 + ..\..\..\..\..\third_party\FreeRTOS-10.4\tasks.c + tasks.c + 0 + 0 + + + 6 + 35 + 1 + 0 + 0 + 0 + ..\..\..\..\..\third_party\FreeRTOS-10.4\timers.c + timers.c + 0 + 0 + + + 6 + 36 + 1 + 0 + 0 + 0 + ..\..\..\..\..\third_party\FreeRTOS-10.4\portable\MemMang\heap_4.c + heap_4.c + 0 + 0 + + + 6 + 37 + 1 + 0 + 0 + 0 + ..\..\..\..\..\third_party\FreeRTOS-10.4\portable\GCC\ARM_CM4F\port.c + port.c + 0 + 0 + diff --git a/demo/stm32/usb_device/stm32f429igt6/MDK-ARM/stm32f429igt6.uvprojx b/demo/stm32/usb_device/stm32f429igt6/MDK-ARM/stm32f429igt6.uvprojx index e2e72950..3213a49d 100644 --- a/demo/stm32/usb_device/stm32f429igt6/MDK-ARM/stm32f429igt6.uvprojx +++ b/demo/stm32/usb_device/stm32f429igt6/MDK-ARM/stm32f429igt6.uvprojx @@ -340,7 +340,7 @@ USE_HAL_DRIVER,STM32F429xx,CONFIG_USB_DWC2_PORT=HS_PORT - ../Core/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F4xx/Include;../Drivers/CMSIS/Include;..\..\..\..\..\core;..\..\..\..\..\common;..\..\..\..\..\class\cdc;..\..\..\..\..\class\msc;..\..\..\..\..\class\hid;..\..\..\..\..\class\audio;..\..\..\..\..\class\video + ../Core/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F4xx/Include;../Drivers/CMSIS/Include;..\..\..\..\..\core;..\..\..\..\..\common;..\..\..\..\..\class\cdc;..\..\..\..\..\class\msc;..\..\..\..\..\class\hid;..\..\..\..\..\class\audio;..\..\..\..\..\class\video;..\..\..\..\..\third_party\FreeRTOS-10.4\include;..\..\..\..\..\third_party\FreeRTOS-10.4\portable\GCC\ARM_CM4F;..\..\..\..\..\osal @@ -590,6 +590,61 @@ 1 ..\..\..\..\..\port\dwc2\usb_dc_dwc2.c + + usb_osal_freertos.c + 1 + ..\..\..\..\..\osal\usb_osal_freertos.c + + + + + FreeRTOS + + + croutine.c + 1 + ..\..\..\..\..\third_party\FreeRTOS-10.4\croutine.c + + + event_groups.c + 1 + ..\..\..\..\..\third_party\FreeRTOS-10.4\event_groups.c + + + list.c + 1 + ..\..\..\..\..\third_party\FreeRTOS-10.4\list.c + + + queue.c + 1 + ..\..\..\..\..\third_party\FreeRTOS-10.4\queue.c + + + stream_buffer.c + 1 + ..\..\..\..\..\third_party\FreeRTOS-10.4\stream_buffer.c + + + tasks.c + 1 + ..\..\..\..\..\third_party\FreeRTOS-10.4\tasks.c + + + timers.c + 1 + ..\..\..\..\..\third_party\FreeRTOS-10.4\timers.c + + + heap_4.c + 1 + ..\..\..\..\..\third_party\FreeRTOS-10.4\portable\MemMang\heap_4.c + + + port.c + 1 + ..\..\..\..\..\third_party\FreeRTOS-10.4\portable\GCC\ARM_CM4F\port.c +