原创 MDK在原有函數前插入程序 '$Sub$ $ 和 $Super$ $

extern void $Super$$test(void); //自定義代碼 void test_1() { printf("test_1 fun\n"); } //原函數 void test() { printf(

原创 \0 字符串的結束標誌

'\0'就是 字符串結束標誌。 %s ,打印Log ,需要添加\0識別字符串的結束。 '\0'就是8位的00000000,因爲字符類型中並沒有對應的這個字符,所以這麼寫。在數值類型裏就代表數字0。 數值類型存儲時,最高位決定正負號,其他位

原创 硬件知識之高阻態

高阻態是一個數字電路里常見的術語,指的是電路的一種輸出狀態,既不是高電平也不是低電平,如果高阻態再輸入下一級電路的話,對下級電路無任何影響,和沒接一樣,如果用萬用表測的話有可能是高電平也有可能是低電平,隨它後面接的東西定的。  

原创 解決GD睡眠不喚醒的問題

#if 0 void pmu_to_deepsleepmode(uint32_t ldo,uint8_t deepsleepmodecmd) { /* clear stbmod and ldolp bits */ PMU

原创 在使用FreeRTOS 時,硬件中斷的 設置

/* The highest interrupt priority that can be used by any interrupt service routine that makes calls to interrupt safe

原创 在FreeRTOS TIMER的應用

關於freertos TIMER 經常應用的函數 //建立TIMER key_timer = xTimerCreate("Call Timer", pdMS_TO_TICKS(KEY_POLLING_TIME), pdTRUE, 0, K

原创 堆溢出和malloc失敗的鉤子函數打開

#define configCHECK_FOR_STACK_OVERFLOW                1 #define configUSE_MALLOC_FAILED_HOOK                  1 void

原创 關於雙指針的應用

static uint8_t* cur_p_buf = NULL; static uint8_t* last_p_buf = NULL; SwapPingPongBuf(Uart0_Rx_Buf, Uart0_Rx_B

原创 freertos 技術小結

執行系統調用,比如普通任務可以使用taskYIELD()強制任務切換,中斷服務程序中使用portYIELD_FROM_ISR()強制任務切換; xPortGetFreeHeapSize()  獲取剩餘Heap的大小

原创 C語言中||的技巧

錯誤寫法 if (right() || left()) { Action(); } 如果前面right() 返回1, 後面的代碼將不會執行 正確寫法 r = right(); l = left(); if (r || l

原创 strstr和strcasestr

原文鏈接:https://www.cnblogs.com/chenliyang/p/6633742.html 一、strstr函數使用 [1] 函數原型 char *strstr(const

原创 kei設置浮點單元類型

  勾選not used 就是沒有開啓硬件浮點單元。 有的單片機沒有硬件浮點單元,所以要設置爲not used。 如果開啓可能會進入hardfualt.

原创 GD32之printf映射uart口功能

/* retarget the C library printf function to the USART */ int fputc(int ch, FILE *f) {     usart_data_transmit(EVAL_COM

原创 MAP的空間分配

    Total RO  Size (Code + RO Data)                 9388 (   9.17kB)     Total RW  Size (RW Data + ZI Data)