C語言筆記-malloc前的強制轉換 取得連結 Facebook X Pinterest 以電子郵件傳送 其他應用程式 - 12月 26, 2019 看別人的程式多少都會看到在malloc前面加上強制轉換: dlouble * p=(double*)malloc(sizeof(length*(sizeof(double)); 會這樣加是因為早期的malloc回傳値是char*,所以要做強制轉 現在已經不需要加了,因為malloc回傳的是一個void指標,編譯器會自動轉換 取得連結 Facebook X Pinterest 以電子郵件傳送 其他應用程式 留言
FreeRTOS學習筆記 (二)-任務創建和刪除(xTaskCreate及vTaskDelete) - 11月 07, 2018 函數 功能 xTaskCreate() 動態創建一個任務 xTaskCreateStatic() 靜態創建一個任務 xTaskCreateRestricted() 創建使用 MPU 進行限制任務 vTaskDelay() 任務刪除 1. xTaskCreate () --創建一個任務,RAM默認使用heap_4.c(後面章節補充)管理內存。 新創建的任務默認是就緒狀態,如果當前無更高優先權的任務運行,此任務將立刻執行: pvTaskCode :任務函數(函數名稱) pcName :任務名子,名稱不能超過 configMAX_TASK_NAME_LEN, 會自動刪除超過字串 usStackDepth :任務的棧大小 pvParameters :傳遞給任務的參數 uxPriority :任務的優先權,0~configMAX_PRIORITIES-1 pvCreatedTask : 任務句柄。任務創建成功會返回此任務句柄,其他API也會用到 返回值: errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY:失敗,內存不夠 pdPASS:成功 2. vTaskDelete () --刪除任務函數,被刪除的任務將不存在也不再運行。 任務被刪除後,句柄將無法 繼 續使用,若使用 xTaskCreate() 創立則刪除後會釋放掉內存,申請的記憶體會在空閒任務中釋放,所以刪掉任務需要一點時間給空閒任務。 參數: xTaskToDelete :要刪除的任務句柄 返回值:無 ------------------------------------------------------------------------------ 測試: 1.啟動兩個Task void vTaskFunction1 ( void * pvParameters ) { while (1) { taskENTER_CRITICAL(); pr... 閱讀完整內容
FreeRTOS學習筆記 (三)-時間管理vTaskDelay()及vTaskDelayUntil() - 11月 09, 2018 FreeRTOS 任務中,在函數中使用延時函數就會讓任務進入阻塞狀態 (block) , 通常使用 vTaskDelay() 及 vTaskDelayUntil() 。 -vTaskDelay() 為相對延時 -vTaskDelayUntil() 為絕對延時 要使用則在 FreeRTOSConfig.h 中必須定義 : #define INCLUDE_vTaskDelay 1 #define INCLUDE_pcTaskGetTaskName 1 -------------------------------------------------------- 1.vTaskDelay() 其原型為 : void vTaskDelay ( const TickType_t xTicksToDelay ) -參數: const TickType_t xTicksToDelay 如果直接給數值,如 vTaskDelay(100) ,則表示暫停 100 個 ticks ,由於每個 MCU 的 Ticks 不同, FreeRTOS 提供了 #define portTICK_RATE_MS portTICK_PERIOD_MS #define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ ) 幫我們轉為 ms ,故 vTaskDelay(100) 就是讓任務暫停 100ms 2.vTaskDelayUntil() 其原型為: void vTaskDelayUntil ( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement ) 使用範例: // Perform an action every 10 ticks. void vTaskFunction( void * pvParameter... 閱讀完整內容
MCU的硬體基礎知識(2) 電晶體的應用 - 6月 09, 2020 常見的電晶體為下面兩種,這兩種稱為BJT 9012以及9013是最常見的電晶體,橫向左側的腳叫做基級(base),有箭頭的那隻腳叫做射極(emitter),剩下那隻腳位稱為集極(collector) 電晶體工作原理 電晶體主要有兩個功能: (1)放大 (2)開關:飽和、截止 MCU通常都是數位電路,開關的功能為主要,所以在這邊紙筆記飽和與截止兩種狀態。 B極和E極之間點電壓差是一個關鍵,以PNP為例,E極只要大於B極0.7V以上,E極與C極就可以順利導通。換句話說,控制端是B和E之間,被控制端是B與C之間。 飽和 以上圖為例,如果P1.0為High,那麼E到B之間不會產生0.7V的壓降,這時候E和C之間不會導通,所以電晶體可以是為斷路,LED燈不會亮 如果P1.0給的是LOW,則E和B之間產生壓差,此時R47會有(5-0.7)V的電壓差,這時候E和C也就導通,LED本身有2V壓降,E和C之間有0.3V壓降,在R41上大概就有3V壓降, 所以整條之路的電流為3mA左右,可以點亮LED。 以上還有一個條件,電晶體有一個放大倍數B,要處於飽和狀態B極電流一定要大於E、C極的電流除以B。 所以剛剛算過E和C極之間電流為3mA左右,那麼B極的電流最小為3mA除以B(假設B為100)=30uA 4.3V/30uA=143K 所以B極最大組值不能超過143K,不能太小,可能會電流過大燒壞電晶體或MCU,8052的IO輸入電流最大為25mA,通常不要超過6mA 截止 截止很簡單,只要BC之間部導通即可。 電晶體應用 -控制應用 電晶體在數位電路中除了上面的開關功能,就是驅動應用,也就是俗稱的小店壓控制大電壓 比如說5V系統與12V系統對接,如果IO直接接12V會燒掉,透過電晶體可以讓5V的MCU控制12V。 上圖中, IO輸出5V,則電晶體導通,OUT輸出為0V IO輸出0V,電晶體截止,OUT則因為上拉電阻R2而輸出12V -驅動 所謂驅動,就是電流輸出的能力。 一般MCU的電流輸出能力很弱,要推動後級電路或元件建議是透過電... 閱讀完整內容
留言
張貼留言