|
默认是提供了CMSIS-RTOS V1封装层接口和V2封装层接口
下面是V1接口实现,不愿意用封装层,直接用其它RTOS的原始API就行
- /*------------------------------------------------------------------------------
- * MDK Middleware - Component ::Network
- * Copyright (c) 2004-2018 ARM Germany GmbH. All rights reserved.
- *------------------------------------------------------------------------------
- * Name: net_rtos.h
- * Purpose: Network CMSIS-RTOS abstraction layer
- * Rev.: V7.7.1
- *----------------------------------------------------------------------------*/
- #include "cmsis_os.h"
- #include "rl_net_lib.h"
- /* Avoid syntax-checker errors in editor */
- #ifndef NET_THREAD_STACK_SIZE
- #define NET_THREAD_STACK_SIZE 1024
- #define NET_THREAD_PRIORITY osPriorityNormal
- #endif
- #if (osCMSIS < 0x20000U)
- #define STATIC static
- #else
- #define STATIC
- #endif
- extern const osMutexDef_t os_mutex_def_net_lock;
- extern const osMutexDef_t os_mutex_def_mem_lock;
- extern const osTimerDef_t os_timer_def_net_tick;
- extern const osThreadDef_t os_thread_def_netCore_Thread;
- extern const osThreadDef_t os_thread_def_netETH_Thread;
- extern const osThreadDef_t os_thread_def_netPPP_Thread;
- extern const osThreadDef_t os_thread_def_netSLIP_Thread;
- extern const osSemaphoreDef_t os_semaphore_def_eth0_lock;
- extern const osSemaphoreDef_t os_semaphore_def_ppp_lock;
- extern const osSemaphoreDef_t os_semaphore_def_slip_lock;
- /* Network core resources */
- STATIC osMutexDef(net_lock);
- STATIC osMutexDef(mem_lock);
- STATIC osTimerDef(net_tick, net_sys_tick);
- osThreadDef(netCore_Thread, NET_THREAD_PRIORITY, 1, NET_THREAD_STACK_SIZE);
- /* Ethernet interface resources */
- #if (ETH0_ENABLE)
- STATIC osSemaphoreDef(eth0_lock);
- osThreadDef(netETH_Thread, ETH0_THREAD_PRIORITY, 1, ETH0_THREAD_STACK_SIZE);
- #endif
- /* PPP interface resources */
- #if (PPP_ENABLE)
- STATIC osSemaphoreDef(ppp_lock);
- osThreadDef(netPPP_Thread, PPP_THREAD_PRIORITY, 1, PPP_THREAD_STACK_SIZE);
- #endif
- /* SLIP interface resources */
- #if (SLIP_ENABLE)
- STATIC osSemaphoreDef(slip_lock);
- osThreadDef(netSLIP_Thread, SLIP_THREAD_PRIORITY, 1, SLIP_THREAD_STACK_SIZE);
- #endif
- /* Create network core thread */
- NETOS_ID netos_thread_create (void) {
- return (osThreadCreate (osThread(netCore_Thread), NULL));
- }
- /* Delete network thread */
- void netos_thread_delete (NETOS_ID thread) {
- osThreadTerminate (thread);
- }
- /* Get running thread identifier */
- NETOS_ID netos_thread_id (void) {
- return (osThreadGetId ());
- }
- /* Pass control to next ready thread */
- void netos_thread_pass (void) {
- osThreadYield ();
- }
- /* Create periodic tick timer */
- NETOS_ID netos_timer_create (void) {
- return (osTimerCreate (osTimer(net_tick), osTimerPeriodic, NULL));
- }
- /* Delete periodic tick timer */
- void netos_timer_delete (NETOS_ID timer) {
- osTimerDelete (timer);
- }
- /* Start periodic tick timer */
- void netos_timer_start (NETOS_ID timer, uint32_t interval_ms) {
- osTimerStart (timer, interval_ms);
- }
- /* Create network protection mutex */
- NETOS_ID netos_mutex_create (uint8_t sys_id) {
- switch (sys_id) {
- case 0: return (osMutexCreate (osMutex(net_lock)));
- default: return (osMutexCreate (osMutex(mem_lock)));
- }
- }
- /* Delete network protection mutex */
- void netos_mutex_delete (NETOS_ID mutex) {
- osMutexDelete (mutex);
- }
- /* Lock network protection mutex */
- void netos_lock (NETOS_ID mutex) {
- osMutexWait (mutex, osWaitForever);
- }
- /* Unlock network protection mutex */
- void netos_unlock (NETOS_ID mutex) {
- osMutexRelease (mutex);
- }
- /* Wait for thread signal/event flag */
- void netos_flag_wait (uint32_t flag, uint32_t ms) {
- osSignalWait ((int32_t)flag, ms);
- }
- /* Set thread signal/event flag */
- void netos_flag_set (NETOS_ID thread, uint32_t flag) {
- osSignalSet (thread, (int32_t)flag);
- }
- /* Clear thread signal/event flag */
- void netos_flag_clear (NETOS_ID thread, uint32_t flag) {
- osSignalClear (thread, (int32_t)flag);
- }
- /* Delay thread execution */
- void netos_delay (uint32_t ms) {
- osDelay (ms);
- }
- /* Create network interface thread and semaphore */
- NETOS_ID netif_create (uint8_t netif, NETOS_ID *semaphore) {
- switch (netif) {
- #if (ETH0_ENABLE)
- case NETIF_ETH:
- *semaphore = osSemaphoreCreate (osSemaphore(eth0_lock), 1);
- return (osThreadCreate (osThread(netETH_Thread), NULL));
- #endif
- #if (PPP_ENABLE)
- case NETIF_PPP:
- *semaphore = osSemaphoreCreate (osSemaphore(ppp_lock), 1);
- return (osThreadCreate (osThread(netPPP_Thread), NULL));
- #endif
- #if (SLIP_ENABLE)
- case NETIF_SLIP:
- *semaphore = osSemaphoreCreate (osSemaphore(slip_lock), 1);
- return (osThreadCreate (osThread(netSLIP_Thread), NULL));
- #endif
- }
- return (NULL);
- }
- /* Delete network interface thread and semaphore */
- void netif_delete (NETOS_ID thread, NETOS_ID semaphore) {
- osSemaphoreDelete (semaphore);
- osThreadTerminate (thread);
- }
- /* Lock interface protection semaphore */
- void netif_lock (NETOS_ID semaphore) {
- osSemaphoreWait (semaphore, osWaitForever);
- }
- /* Unlock interface protection semaphore */
- void netif_unlock (NETOS_ID semaphore) {
- osSemaphoreRelease (semaphore);
- }
复制代码
|
|