first commit
This commit is contained in:
167
libraries/zf_common/zf_common_clock.c
Normal file
167
libraries/zf_common/zf_common_clock.c
Normal file
@@ -0,0 +1,167 @@
|
||||
/*********************************************************************************************************************
|
||||
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD>⣩<EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
|
||||
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
|
||||
*
|
||||
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
*
|
||||
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᷢ<EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD>棨<EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><DEB8><EFBFBD>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
|
||||
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
|
||||
*
|
||||
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_common_clock
|
||||
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* <20>汾<EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
|
||||
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
|
||||
*
|
||||
* <20>ļ<DEB8>¼
|
||||
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
|
||||
* 2022-09-15 <20><>W first version
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "ch32v30x.h"
|
||||
#include "zf_common_function.h"
|
||||
#include "zf_common_interrupt.h"
|
||||
|
||||
#include "zf_common_clock.h"
|
||||
|
||||
uint32 system_clock = SYSTEM_CLOCK_144M; // ϵͳʱ<CDB3><CAB1><EFBFBD><EFBFBD>Ϣ
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>ӻָ<D3BB><D6B8><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void clock_reset(void)
|
||||
{
|
||||
RCC->CTLR |= (uint32) 0x00000001; //ʹ<><CAB9>HSI<53><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
RCC->CFGR0 &= (uint32) 0xF8FF0000;
|
||||
RCC->CTLR &= (uint32) 0xFEF6FFFF;
|
||||
RCC->CTLR &= (uint32) 0xFFFBFFFF;
|
||||
RCC->CFGR0 &= (uint32) 0xFF80FFFF;
|
||||
RCC->INTR = (uint32) 0x009F0000; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϲ<D0B6><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> clock ʱ<><CAB1>Ƶ<EFBFBD><C6B5> <20>Ƽ<EFBFBD>ʹ<EFBFBD><CAB9> zf_common_clock.h <20><> system_clock_enum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void clock_set_freq(uint32 clock)
|
||||
{
|
||||
clock_reset();
|
||||
__IO uint32_t StartUpCounter = 0, HSEStatus = 0;
|
||||
|
||||
RCC->CTLR |= ((uint32_t) RCC_HSEON);
|
||||
|
||||
/* Wait till HSE is ready and if Time out is reached exit */
|
||||
do {
|
||||
HSEStatus = RCC->CTLR & RCC_HSERDY;
|
||||
StartUpCounter++;
|
||||
} while ((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
|
||||
|
||||
if ((RCC->CTLR & RCC_HSERDY) != RESET)
|
||||
{
|
||||
HSEStatus = (uint32_t) 0x01;
|
||||
}
|
||||
else
|
||||
{
|
||||
HSEStatus = (uint32_t) 0x00;
|
||||
}
|
||||
|
||||
if (HSEStatus == (uint32_t) 0x01)
|
||||
{
|
||||
|
||||
// /* Enable Prefetch Buffer */
|
||||
// FLASH->ACTLR |= FLASH_ACTLR_PRFTBE; ((uint8_t)0x10)
|
||||
//
|
||||
// /* Flash 2 wait state */
|
||||
// FLASH->ACTLR &= (uint32_t)((uint32_t)~FLASH_ACTLR_LATENCY); ((uint8_t)0x03)
|
||||
// FLASH->ACTLR |= (uint32_t)FLASH_ACTLR_LATENCY_2; ((uint8_t)0x02)
|
||||
|
||||
/* HCLK = SYSCLK */
|
||||
RCC->CFGR0 |= (uint32_t) RCC_HPRE_DIV1;
|
||||
/* PCLK2 = HCLK */
|
||||
RCC->CFGR0 |= (uint32_t) RCC_PPRE2_DIV1;
|
||||
/* PCLK1 = HCLK */
|
||||
RCC->CFGR0 |= (uint32_t) RCC_PPRE1_DIV1;
|
||||
|
||||
/* PLL configuration: PLLCLK = HSE * ? = ? MHz */
|
||||
RCC->CFGR0 &= (uint32) ((uint32) ~(RCC_PLLSRC | RCC_PLLXTPRE
|
||||
| RCC_PLLMULL));
|
||||
|
||||
if (clock == SYSTEM_CLOCK_144M)
|
||||
RCC->CFGR0 |= (uint32) (RCC_PLLSRC_HSE | RCC_PLLXTPRE_HSE
|
||||
| RCC_PLLMULL18_EXTEN);
|
||||
else if (clock == SYSTEM_CLOCK_120M)
|
||||
RCC->CFGR0 |= (uint32) (RCC_PLLSRC_HSE | RCC_PLLXTPRE_HSE
|
||||
| RCC_PLLMULL15_EXTEN);
|
||||
else if (clock == SYSTEM_CLOCK_96M)
|
||||
RCC->CFGR0 |= (uint32) (RCC_PLLSRC_HSE | RCC_PLLXTPRE_HSE
|
||||
| RCC_PLLMULL12_EXTEN);
|
||||
else if (clock == SYSTEM_CLOCK_72M)
|
||||
RCC->CFGR0 |= (uint32) (RCC_PLLSRC_HSE | RCC_PLLXTPRE_HSE
|
||||
| RCC_PLLMULL9_EXTEN);
|
||||
else if (clock == SYSTEM_CLOCK_48M)
|
||||
RCC->CFGR0 |= (uint32) (RCC_PLLSRC_HSE | RCC_PLLXTPRE_HSE
|
||||
| RCC_PLLMULL6_EXTEN);
|
||||
else if (clock == SYSTEM_CLOCK_24M)
|
||||
RCC->CFGR0 |= (uint32) (RCC_PLLSRC_HSE | RCC_PLLXTPRE_HSE
|
||||
| RCC_PLLMULL3_EXTEN);
|
||||
|
||||
/* Enable PLL */
|
||||
RCC->CTLR |= RCC_PLLON;
|
||||
/* Wait till PLL is ready */
|
||||
while((RCC->CTLR & RCC_PLLRDY) == 0)
|
||||
{
|
||||
}
|
||||
/* Select PLL as system clock source */
|
||||
RCC->CFGR0 &= (uint32_t) ((uint32_t) ~(RCC_SW));
|
||||
RCC->CFGR0 |= (uint32_t) RCC_SW_PLL;
|
||||
/* Wait till PLL is used as system clock source */
|
||||
while ((RCC->CFGR0 & (uint32_t)RCC_SWS) != (uint32_t)0x08)
|
||||
{
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while(1);
|
||||
// <20>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD><C8B6><EFBFBD>ȱʧ ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||
/*
|
||||
* If HSE fails to start-up, the application will have wrong clock
|
||||
* configuration. User can add here some code to deal with this error
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>ӳ<EFBFBD>ʼ<EFBFBD><CABC>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> clock ʱ<><CAB1>Ƶ<EFBFBD><C6B5> <20>Ƽ<EFBFBD>ʹ<EFBFBD><CAB9> zf_common_clock.h <20><> system_clock_enum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> clock_init(SYSTEM_CLOCK_144M); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ 144MHz
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void clock_init(uint32 clock)
|
||||
{
|
||||
|
||||
system_clock = clock; // <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ƶ<EFBFBD><C6B5>
|
||||
clock_reset();
|
||||
clock_set_freq(clock);
|
||||
|
||||
interrupt_init();
|
||||
|
||||
|
||||
}
|
||||
61
libraries/zf_common/zf_common_clock.h
Normal file
61
libraries/zf_common/zf_common_clock.h
Normal file
@@ -0,0 +1,61 @@
|
||||
/*********************************************************************************************************************
|
||||
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD>⣩<EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
|
||||
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
|
||||
*
|
||||
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
*
|
||||
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᷢ<EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD>棨<EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><DEB8><EFBFBD>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
|
||||
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
|
||||
*
|
||||
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_common_clock
|
||||
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* <20>汾<EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
|
||||
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
|
||||
*
|
||||
* <20>ļ<DEB8>¼
|
||||
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
|
||||
* 2022-09-15 <20><>W first version
|
||||
********************************************************************************************************************/
|
||||
|
||||
|
||||
#ifndef _zf_common_clock_h_
|
||||
#define _zf_common_clock_h_
|
||||
|
||||
#include "ch32v30x.h"
|
||||
#include "zf_common_typedef.h"
|
||||
|
||||
#define BOARD_XTAL_FREQ 8000000 // <20><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5> <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC>õIJ<C3B5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD> UM <20><><EFBFBD>巶ΧΪ 4-24Mhz
|
||||
//#define XTAL_STARTUP_TIMEOUT 0x0800 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>ʱʱ<CAB1><CAB1>
|
||||
|
||||
typedef enum
|
||||
{
|
||||
SYSTEM_CLOCK_XTAL = BOARD_XTAL_FREQ, // ʹ<>þ<EFBFBD><C3BE><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>Ϊʱ<CEAA><CAB1>Ƶ<EFBFBD><C6B5>
|
||||
SYSTEM_CLOCK_24M = 24000000, // 24Mhz
|
||||
SYSTEM_CLOCK_48M = 48000000, // 48Mhz
|
||||
SYSTEM_CLOCK_72M = 72000000, // 72Mhz
|
||||
SYSTEM_CLOCK_96M = 96000000, // 96Mhz
|
||||
SYSTEM_CLOCK_120M = 120000000, // 120Mhz
|
||||
SYSTEM_CLOCK_144M = 144000000, // 144Mhz
|
||||
}system_clock_enum;
|
||||
|
||||
extern uint32 system_clock; // ȫ<>ֱ<EFBFBD><D6B1><EFBFBD> ϵͳʱ<CDB3><CAB1><EFBFBD><EFBFBD>Ϣ
|
||||
void clock_reset(void);
|
||||
void clock_init (uint32 clock); // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>ӳ<EFBFBD>ʼ<EFBFBD><CABC>
|
||||
void clock_set_freq(uint32 clock); // <20><><EFBFBD><EFBFBD>ϵͳƵ<CDB3><C6B5>
|
||||
#endif
|
||||
471
libraries/zf_common/zf_common_debug.c
Normal file
471
libraries/zf_common/zf_common_debug.c
Normal file
@@ -0,0 +1,471 @@
|
||||
/*********************************************************************************************************************
|
||||
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD>⣩<EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
|
||||
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
|
||||
*
|
||||
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
*
|
||||
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᷢ<EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD>棨<EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><DEB8><EFBFBD>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
|
||||
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
|
||||
*
|
||||
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_common_debug
|
||||
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* <20>汾<EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
|
||||
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
|
||||
*
|
||||
* <20>ļ<DEB8>¼
|
||||
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
|
||||
* 2022-09-15 <20><>W first version
|
||||
********************************************************************************************************************/
|
||||
|
||||
|
||||
#include "zf_driver_uart.h"
|
||||
#include "zf_common_interrupt.h"
|
||||
#include "zf_common_fifo.h"
|
||||
|
||||
#include "zf_common_debug.h"
|
||||
|
||||
#if DEBUG_UART_USE_INTERRUPT // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug uart <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
uint8 debug_uart_buffer[DEBUG_RING_BUFFER_LEN]; // <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8 debug_uart_data;
|
||||
#endif
|
||||
|
||||
fifo_struct debug_uart_fifo;
|
||||
|
||||
static debug_output_struct debug_output_info;
|
||||
static volatile uint8 zf_debug_init_flag = 0;
|
||||
static volatile uint8 zf_debug_assert_enable = 1;
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><> 120MHz <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> <20><><EFBFBD><EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> pass <20>ж<EFBFBD><D0B6>Ƿ<C7B7><F1B4A5B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *file <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> line Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void debug_delay (void)
|
||||
{
|
||||
vuint32 loop_1 = 0, loop_2 = 0;
|
||||
for(loop_1 = 0; loop_1 <= 0xFF; loop_1 ++)
|
||||
for(loop_2 = 0; loop_2 <= 0xFFFF; loop_2 ++)
|
||||
__NOP();
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ҫ<EFBFBD>Ƿ<EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>ά<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2>ʧ<EFBFBD><CAA7>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> debug_protective_handler();
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ù<EFBFBD>ע Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void debug_protective_handler (void)
|
||||
{
|
||||
// <20><>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD> <20>˲<EFBFBD><CBB2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> debug_uart_str_output("Log message");
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ù<EFBFBD>ע Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void debug_uart_str_output (const char *str)
|
||||
{
|
||||
uart_write_string(DEBUG_UART_INDEX, str);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *type log <20><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *file <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> line Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str <20><>Ϣ
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> debug_output("Log message", file, line, str);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ù<EFBFBD>ע Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void debug_output (char *type, char *file, int line, char *str)
|
||||
{
|
||||
char *file_str;
|
||||
vuint16 i = 0, j = 0;
|
||||
vint16 len_origin = 0;
|
||||
vint16 show_len = 0;
|
||||
vint16 show_line_index = 0;
|
||||
len_origin = strlen(file);
|
||||
|
||||
char output_buffer[256];
|
||||
char file_path_buffer[64];
|
||||
|
||||
if(debug_output_info.type_index)
|
||||
{
|
||||
debug_output_info.output_screen_clear();
|
||||
}
|
||||
|
||||
if(zf_debug_init_flag)
|
||||
{
|
||||
if(debug_output_info.type_index)
|
||||
{
|
||||
// <20><>Ҫ<EFBFBD><D2AA><EFBFBD>н<EFBFBD><D0BD>ļ<EFBFBD><C4BC><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7> ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ŀ¼ <20><><EFBFBD><EFBFBD> src/main.c>
|
||||
// <20><><EFBFBD><EFBFBD> line : xxxx
|
||||
debug_output_info.output_screen(0, show_line_index ++, type);
|
||||
|
||||
file_str = file;
|
||||
len_origin = strlen(file);
|
||||
show_len = (debug_output_info.display_x_max / debug_output_info.font_x_size);
|
||||
|
||||
while(*file_str++ != '\0');
|
||||
|
||||
// ֻȡһ<C8A1><D2BB>Ŀ¼ <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̷<EFBFBD><CCB7><EFBFBD>Ŀ¼ <20><><EFBFBD><EFBFBD> MDK <20>Ĺ<EFBFBD><C4B9≯<EFBFBD>Ŀ¼ <20>ͻ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰĿ¼
|
||||
for(j = 0; (j < 2) && (len_origin >= 0); len_origin --) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '/'
|
||||
{
|
||||
file_str --;
|
||||
if((*file_str == '/') || (*file_str == 0x5C))
|
||||
{
|
||||
j ++;
|
||||
}
|
||||
}
|
||||
|
||||
// <20>ļ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>浽<EFBFBD><E6B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(len_origin >= 0)
|
||||
{
|
||||
file_str ++;
|
||||
sprintf(output_buffer, "file: %s", file_str);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(0 == j)
|
||||
{
|
||||
sprintf(output_buffer, "file: mdk/%s", file_str);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(output_buffer, "file: %s", file_str);
|
||||
}
|
||||
}
|
||||
|
||||
// <20><>Ļ<EFBFBD><C4BB>ʾ·<CABE><C2B7>
|
||||
for(i = 0; i < ((strlen(output_buffer) / show_len) + 1); i ++)
|
||||
{
|
||||
for(j = 0; j < show_len; j ++)
|
||||
{
|
||||
if(strlen(output_buffer) < (j + i * show_len))
|
||||
{
|
||||
break;
|
||||
}
|
||||
file_path_buffer[j] = output_buffer[j + i * show_len];
|
||||
}
|
||||
|
||||
file_path_buffer[j] = '\0'; // ĩβ<C4A9><CEB2><EFBFBD><EFBFBD>\0
|
||||
|
||||
debug_output_info.output_screen(0, debug_output_info.font_y_size * show_line_index ++, file_path_buffer);
|
||||
}
|
||||
|
||||
// <20><>Ļ<EFBFBD><C4BB>ʾ<EFBFBD>к<EFBFBD>
|
||||
sprintf(output_buffer, "line: %d", line);
|
||||
debug_output_info.output_screen(0, debug_output_info.font_y_size * show_line_index ++, output_buffer);
|
||||
|
||||
// <20><>Ļ<EFBFBD><C4BB>ʾ Log <20><><EFBFBD><EFBFBD><EFBFBD>еĻ<D0B5>
|
||||
if(NULL != str)
|
||||
{
|
||||
for(i = 0; i < ((strlen(str) / show_len) + 1); i ++)
|
||||
{
|
||||
for(j = 0; j < show_len; j ++)
|
||||
{
|
||||
if(strlen(str) < (j + i * show_len))
|
||||
{
|
||||
break;
|
||||
}
|
||||
file_path_buffer[j] = str[j + i * show_len];
|
||||
}
|
||||
|
||||
file_path_buffer[j] = '\0'; // ĩβ<C4A9><CEB2><EFBFBD><EFBFBD>\0
|
||||
|
||||
debug_output_info.output_screen(0, debug_output_info.font_y_size * show_line_index ++, file_path_buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
char output_buffer[256];
|
||||
memset(output_buffer, 0, 256);
|
||||
debug_output_info.output_uart(type);
|
||||
if(NULL != str)
|
||||
{
|
||||
sprintf(output_buffer, "\r\nfile %s line %d: %s.\r\n", file, line, str);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(output_buffer, "\r\nfile %s line %d.\r\n", file, line);
|
||||
}
|
||||
debug_output_info.output_uart(output_buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Դ<EFBFBD><D4B4>ڷ<EFBFBD><DAB7>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buff <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><CAA3>δ<EFBFBD><CEB4><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> DEBUG_UART_USE_INTERRUPT <20>궨<EFBFBD><EAB6A8><EFBFBD>ſ<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint32 debug_send_buffer(const uint8 *buff, uint32 len)
|
||||
{
|
||||
uart_write_buffer(DEBUG_UART_INDEX, buff, len);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ debug <20><><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buff <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ʵ<EFBFBD>ʳ<EFBFBD><CAB3><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> DEBUG_UART_USE_INTERRUPT <20>궨<EFBFBD><EAB6A8><EFBFBD>ſ<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint32 debug_read_ring_buffer (uint8 *buff, uint32 len)
|
||||
{
|
||||
fifo_read_buffer(&debug_uart_fifo, buff, &len, FIFO_READ_AND_CLEAN);
|
||||
return len;
|
||||
}
|
||||
|
||||
#if DEBUG_UART_USE_INTERRUPT // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>жϲű<CFB2><C5B1><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> isr.c <20>ж<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> debug_interrupr_handler();
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> DEBUG_UART_USE_INTERRUPT <20>궨<EFBFBD><EAB6A8><EFBFBD>ſ<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
// <20><><EFBFBD>ұ<EFBFBD><D2B1><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD> UART1 <20>Ĵ<EFBFBD><C4B4>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void debug_interrupr_handler (void)
|
||||
{
|
||||
if(zf_debug_init_flag)
|
||||
{
|
||||
uart_query_byte(DEBUG_UART_INDEX, &debug_uart_data); // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
fifo_write_buffer(&debug_uart_fifo, &debug_uart_data, 1); // <20><><EFBFBD><EFBFBD> FIFO
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
//------------------------------------------------------------------------- // printf <20>ض<EFBFBD><D8B6><EFBFBD> <20>˲<EFBFBD><CBB2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> printf<74>ض<EFBFBD><D8B6><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// @since v1.0
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ض<EFBFBD><D8B6><EFBFBD>printf<74><66>DEBUG<55><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
#if (1 == PRINTF_ENABLE)
|
||||
int _write(int fd, char *buf, int size)
|
||||
{
|
||||
int i;
|
||||
for(i=0; i<size; i++)
|
||||
{
|
||||
while (USART_GetFlagStatus((USART_TypeDef*)uart_index[DEBUG_UART_INDEX], USART_FLAG_TC) == RESET);
|
||||
USART_SendData((USART_TypeDef*)uart_index[DEBUG_UART_INDEX], *buf++);
|
||||
}
|
||||
return size;
|
||||
}
|
||||
#endif
|
||||
//------------------------------------------------------------------------- // printf <20>ض<EFBFBD><D8B6><EFBFBD> <20>˲<EFBFBD><CBB2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> debug_assert_enable();
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD>Ĭ<EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> <20><><EFBFBD>鿪<EFBFBD><E9BFAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void debug_assert_enable (void)
|
||||
{
|
||||
zf_debug_assert_enable = 1;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> debug_assert_disable();
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD>Ĭ<EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void debug_assert_disable (void)
|
||||
{
|
||||
zf_debug_assert_enable = 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˲<EFBFBD><CBB2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> pass <20>ж<EFBFBD><D0B6>Ƿ<C7B7><F1B4A5B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *file <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> line Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> zf_assert(0);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӵ<EFBFBD><D3B5>õ<EFBFBD> <20>˲<EFBFBD><CBB2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9> zf_commmon_debug.h <20>е<EFBFBD> zf_assert(x) <20>ӿ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void debug_assert_handler (uint8 pass, char *file, int line)
|
||||
{
|
||||
do
|
||||
{
|
||||
if(pass || !zf_debug_assert_enable)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
static uint8 assert_nest_index = 0;
|
||||
|
||||
if(0 != assert_nest_index)
|
||||
{
|
||||
while(1);
|
||||
}
|
||||
assert_nest_index ++;
|
||||
|
||||
interrupt_global_disable();
|
||||
debug_protective_handler();
|
||||
|
||||
while(1)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣס<CDA3><D7A1>
|
||||
// һ<><D2BB><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>õ<EFBFBD> zf_assert(x) <20>ӿڴ<D3BF><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug_init <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD> log <20><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڶ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD>鿴<EFBFBD><E9BFB4><EFBFBD>ĸ<EFBFBD><C4B8>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>б<EFBFBD><D0B1><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>û<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC> debug
|
||||
// <20>ǾͿ<C7BE><CDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> file <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ֵ<EFBFBD><D6B5> line <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>ƺͶ<C6BA>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><>ȥ<EFBFBD><C8A5><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD><EFBFBD><EFBFBD>Ϊʲô<CAB2><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
debug_output("Assert error", file, line, NULL);
|
||||
debug_delay();
|
||||
}
|
||||
}while(0);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˲<EFBFBD><CBB2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> bool <20>ж<EFBFBD><D0B6>Ƿ<C7B7><F1B4A5B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *file <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> line Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> zf_log(0, "Log Message");
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӵ<EFBFBD><D3B5>õ<EFBFBD> <20>˲<EFBFBD><CBB2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9> zf_commmon_debug.h <20>е<EFBFBD> zf_log(x, str) <20>ӿ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void debug_log_handler (uint8 pass, char *str, char *file, int line)
|
||||
{
|
||||
do
|
||||
{
|
||||
if(pass)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if(zf_debug_init_flag)
|
||||
{
|
||||
debug_output("Log message", file, line, str);
|
||||
// printf("Log message from %s line %d :\"%s\".\r\n", file, line, str);
|
||||
}
|
||||
}while(0);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʼ<EFBFBD><CABC> <20>˲<EFBFBD><CBB2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *info debug <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// Sample usage: debug_output_struct_init(info);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void debug_output_struct_init (debug_output_struct *info)
|
||||
{
|
||||
info->type_index = 0;
|
||||
|
||||
info->display_x_max = 0xFFFF;
|
||||
info->display_y_max = 0xFFFF;
|
||||
|
||||
info->font_x_size = 0xFF;
|
||||
info->font_y_size = 0xFF;
|
||||
|
||||
info->output_uart = NULL;
|
||||
info->output_screen = NULL;
|
||||
info->output_screen_clear = NULL;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC> <20>˲<EFBFBD><CBB2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *info debug <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> debug_output_init(info);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>㲻<EFBFBD><E3B2BB><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void debug_output_init (debug_output_struct *info)
|
||||
{
|
||||
debug_output_info.type_index = info->type_index;
|
||||
|
||||
debug_output_info.display_x_max = info->display_x_max;
|
||||
debug_output_info.display_y_max = info->display_y_max;
|
||||
|
||||
debug_output_info.font_x_size = info->font_x_size;
|
||||
debug_output_info.font_y_size = info->font_y_size;
|
||||
|
||||
debug_output_info.output_uart = info->output_uart;
|
||||
debug_output_info.output_screen = info->output_screen;
|
||||
debug_output_info.output_screen_clear = info->output_screen_clear;
|
||||
|
||||
zf_debug_init_flag = 1;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC> <20>˲<EFBFBD><CBB2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> debug_init();
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>Դ<EFBFBD><D4B4>ʾ<EFBFBD><CABE>Ĭ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20><>Ĭ<EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD>жϽ<D0B6><CFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void debug_init (void)
|
||||
{
|
||||
debug_output_struct info;
|
||||
debug_output_struct_init(&info);
|
||||
info.output_uart = debug_uart_str_output;
|
||||
debug_output_init(&info);
|
||||
|
||||
uart_init(
|
||||
DEBUG_UART_INDEX, // <20><> zf_common_debug.h <20>в鿴<D0B2><E9BFB4>Ӧֵ
|
||||
DEBUG_UART_BAUDRATE, // <20><> zf_common_debug.h <20>в鿴<D0B2><E9BFB4>Ӧֵ
|
||||
DEBUG_UART_TX_PIN, // <20><> zf_common_debug.h <20>в鿴<D0B2><E9BFB4>Ӧֵ
|
||||
DEBUG_UART_RX_PIN); // <20><> zf_common_debug.h <20>в鿴<D0B2><E9BFB4>Ӧֵ
|
||||
|
||||
#if DEBUG_UART_USE_INTERRUPT // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>жϲű<CFB2><C5B1><EFBFBD>
|
||||
fifo_init(&debug_uart_fifo, FIFO_DATA_8BIT, debug_uart_buffer, DEBUG_RING_BUFFER_LEN);
|
||||
uart_rx_interrupt(DEBUG_UART_INDEX, 1); // ʹ<>ܶ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
106
libraries/zf_common/zf_common_debug.h
Normal file
106
libraries/zf_common/zf_common_debug.h
Normal file
@@ -0,0 +1,106 @@
|
||||
/*********************************************************************************************************************
|
||||
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD>⣩<EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
|
||||
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
|
||||
*
|
||||
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
*
|
||||
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᷢ<EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD>棨<EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><DEB8><EFBFBD>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
|
||||
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
|
||||
*
|
||||
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_common_debug
|
||||
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* <20>汾<EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
|
||||
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
|
||||
*
|
||||
* <20>ļ<DEB8>¼
|
||||
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
|
||||
* 2022-09-15 <20><>W first version
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _zf_common_debug_h_
|
||||
#define _zf_common_debug_h_
|
||||
|
||||
#include "zf_common_typedef.h"
|
||||
#define PRINTF_ENABLE (1) // ʹ<><CAB9>printf
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>Ĵ<DEB8><C4B4>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug UART <20><><EFBFBD>жϽ<D0B6><CFBD><EFBFBD> <20><>Ҫͬ<D2AA><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug_interrupr_handler <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>Ĵ<DEB8><C4B4>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug UART <20><><EFBFBD>жϽ<D0B6><CFBD><EFBFBD> <20><>Ҫͬ<D2AA><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug_interrupr_handler <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>Ĵ<DEB8><C4B4>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug UART <20><><EFBFBD>жϽ<D0B6><CFBD><EFBFBD> <20><>Ҫͬ<D2AA><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug_interrupr_handler <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define DEBUG_UART_INDEX (UART_3) // ָ<><D6B8> debug uart <20><>ʹ<EFBFBD>õĵĴ<C4B5><C4B4><EFBFBD>
|
||||
#define DEBUG_UART_BAUDRATE (115200) // ָ<><D6B8> debug uart <20><>ʹ<EFBFBD>õĵĴ<C4B5><C4B4>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define DEBUG_UART_TX_PIN (UART3_MAP0_TX_B10 ) // ָ<><D6B8> debug uart <20><>ʹ<EFBFBD>õĵĴ<C4B5><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define DEBUG_UART_RX_PIN (UART3_MAP0_RX_B11 ) // ָ<><D6B8> debug uart <20><>ʹ<EFBFBD>õĵĴ<C4B5><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
#define DEBUG_UART_USE_INTERRUPT (1) // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD> debug uart <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> x <20>ж<EFBFBD><D0B6>Ƿ<C7B7><F1B4A5B7><EFBFBD><EFBFBD><EFBFBD> 0-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> zf_assert(0);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ һ<><D2BB><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ж<EFBFBD> zf_assert(0) <20>Ͷ<EFBFBD><CDB6>Ա<EFBFBD><D4B1><EFBFBD>
|
||||
// Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD><C2BB><EFBFBD> Debug UART <20><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ÿ<EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD>ӿڳ<D3BF>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>ʾ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
#define zf_assert(x) (debug_assert_handler((x), __FILE__, __LINE__))
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Log <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> x <20>ж<EFBFBD><D0B6>Ƿ<C7B7><F1B4A5B7><EFBFBD><EFBFBD><EFBFBD> 0-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Log <20><>Ϣ
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> zf_log(0, "Error");
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һЩ<D2BB><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߾<EFBFBD><DFBE><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD><C2BB><EFBFBD> Debug UART <20><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ÿ<EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD>ӿڳ<D3BF>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>ʾ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
#define zf_log(x, str) (debug_log_handler((x), (str), __FILE__, __LINE__))
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint16 type_index;
|
||||
|
||||
uint16 display_x_max;
|
||||
uint16 display_y_max;
|
||||
|
||||
uint8 font_x_size;
|
||||
uint8 font_y_size;
|
||||
|
||||
void (*output_uart) (const char *str);
|
||||
void (*output_screen) (uint16 x, uint16 y, const char *str);
|
||||
void (*output_screen_clear) (void);
|
||||
}debug_output_struct;
|
||||
|
||||
uint32 debug_send_buffer(const uint8 *buff, uint32 len);
|
||||
#if DEBUG_UART_USE_INTERRUPT // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug uart <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
#define DEBUG_RING_BUFFER_LEN (64) // <20><><EFBFBD>廷<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С Ĭ<><C4AC> 64byte
|
||||
void debug_interrupr_handler (void);
|
||||
#endif
|
||||
|
||||
uint32 debug_read_ring_buffer(uint8 *buff, uint32 len);
|
||||
void debug_assert_enable (void);
|
||||
void debug_assert_disable (void);
|
||||
void debug_assert_handler (uint8 pass, char *file, int line);
|
||||
void debug_log_handler (uint8 pass, char *str, char *file, int line);
|
||||
void debug_output_struct_init (debug_output_struct *info);
|
||||
void debug_output_init (debug_output_struct *info);
|
||||
void debug_init (void);
|
||||
|
||||
#endif
|
||||
554
libraries/zf_common/zf_common_fifo.c
Normal file
554
libraries/zf_common/zf_common_fifo.c
Normal file
@@ -0,0 +1,554 @@
|
||||
/*********************************************************************************************************************
|
||||
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD>⣩<EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
|
||||
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
|
||||
*
|
||||
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
*
|
||||
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᷢ<EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD>棨<EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><DEB8><EFBFBD>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
|
||||
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
|
||||
*
|
||||
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_common_fifo
|
||||
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* <20>汾<EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
|
||||
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
|
||||
*
|
||||
* <20>ļ<DEB8>¼
|
||||
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
|
||||
* 2022-09-15 <20><>W first version
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "zf_common_debug.h"
|
||||
#include "zf_common_fifo.h"
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO ͷָ<CDB7><D6B8>λ<EFBFBD><CEBB>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *fifo FIFO <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> offset ƫ<><C6AB><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> fifo_head_offset(fifo, 1);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ù<EFBFBD>ע Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void fifo_head_offset (fifo_struct *fifo, uint32 offset)
|
||||
{
|
||||
fifo->head += offset;
|
||||
|
||||
while(fifo->max <= fifo->head) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С ֱ<><D6B1>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F3BBBAB3><EFBFBD><EFBFBD><EFBFBD>С
|
||||
{
|
||||
fifo->head -= fifo->max;
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO βָ<CEB2><D6B8>λ<EFBFBD><CEBB>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *fifo FIFO <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> offset ƫ<><C6AB><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> fifo_end_offset(fifo, 1);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ù<EFBFBD>ע Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void fifo_end_offset (fifo_struct *fifo, uint32 offset)
|
||||
{
|
||||
fifo->end += offset;
|
||||
|
||||
while(fifo->max <= fifo->end) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С ֱ<><D6B1>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F3BBBAB3><EFBFBD><EFBFBD><EFBFBD>С
|
||||
{
|
||||
fifo->end -= fifo->max;
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO <20><><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *fifo FIFO <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> fifo_clear(fifo);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD>յ<EFBFBD>ǰ FIFO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
fifo_state_enum fifo_clear (fifo_struct *fifo)
|
||||
{
|
||||
zf_assert(fifo != NULL);
|
||||
fifo_state_enum return_state = FIFO_SUCCESS;
|
||||
do
|
||||
{
|
||||
if(FIFO_CLEAR & fifo->execution)
|
||||
{
|
||||
return_state = FIFO_CLEAR_UNDO;
|
||||
break;
|
||||
}
|
||||
fifo->execution |= FIFO_CLEAR;
|
||||
fifo->head = 0;
|
||||
fifo->end = 0;
|
||||
fifo->size = fifo->max;
|
||||
switch(fifo->type)
|
||||
{
|
||||
case FIFO_DATA_8BIT:
|
||||
memset(fifo->buffer, 0, fifo->max);
|
||||
break;
|
||||
case FIFO_DATA_16BIT:
|
||||
memset(fifo->buffer, 0, fifo->max * 2);
|
||||
break;
|
||||
case FIFO_DATA_32BIT:
|
||||
memset(fifo->buffer, 0, fifo->max * 4);
|
||||
break;
|
||||
}
|
||||
// memset(fifo->buffer, 0, fifo->max);
|
||||
fifo->execution &= ~FIFO_CLEAR;
|
||||
}while(0);
|
||||
return return_state;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO <20><>ѯ<EFBFBD><D1AF>ǰ<EFBFBD><C7B0><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *fifo FIFO <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 <20><>ʹ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> uint32 len = fifo_used(fifo);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint32 fifo_used (fifo_struct *fifo)
|
||||
{
|
||||
zf_assert(fifo != NULL);
|
||||
return (fifo->max - fifo->size);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> FIFO <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *fifo FIFO <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dat <20><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> fifo_state_enum <20><><EFBFBD><EFBFBD>״̬
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> zf_log(fifo_write_element(&fifo, data) == FIFO_SUCCESS, "fifo_write_byte error");
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat)
|
||||
{
|
||||
zf_assert(fifo != NULL);
|
||||
fifo_state_enum return_state = FIFO_SUCCESS;
|
||||
|
||||
do
|
||||
{
|
||||
if(FIFO_WRITE & fifo->execution)
|
||||
{
|
||||
return_state = FIFO_WRITE_UNDO;
|
||||
break;
|
||||
}
|
||||
fifo->execution |= FIFO_WRITE;
|
||||
|
||||
if(1 <= fifo->size) // ʣ<><CAA3><EFBFBD>ռ<EFBFBD><D5BC>㹻װ<E3B9BB>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
switch(fifo->type)
|
||||
{
|
||||
case FIFO_DATA_8BIT:
|
||||
((uint8 *)fifo->buffer)[fifo->head] = dat;
|
||||
break;
|
||||
case FIFO_DATA_16BIT:
|
||||
((uint16 *)fifo->buffer)[fifo->head] = dat;
|
||||
break;
|
||||
case FIFO_DATA_32BIT:
|
||||
((uint32 *)fifo->buffer)[fifo->head] = dat;
|
||||
break;
|
||||
}
|
||||
fifo_head_offset(fifo, 1); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
|
||||
fifo->size -= 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><EFBFBD>ȼ<EFBFBD>С
|
||||
}
|
||||
else
|
||||
{
|
||||
return_state = FIFO_SPACE_NO_ENOUGH;
|
||||
}
|
||||
fifo->execution &= ~FIFO_WRITE;
|
||||
}while(0);
|
||||
|
||||
return return_state;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> FIFO <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *fifo FIFO <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *dat <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> fifo_state_enum <20><><EFBFBD><EFBFBD>״̬
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> zf_log(fifo_write_buffer(&fifo, data, 32) == FIFO_SUCCESS, "fifo_write_buffer error");
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
|
||||
{
|
||||
zf_assert(fifo != NULL);
|
||||
fifo_state_enum return_state = FIFO_SUCCESS;
|
||||
uint32 temp_length = 0;
|
||||
|
||||
do
|
||||
{
|
||||
if(NULL == dat)
|
||||
{
|
||||
return_state = FIFO_BUFFER_NULL;
|
||||
break;
|
||||
}
|
||||
if(FIFO_WRITE & fifo->execution)
|
||||
{
|
||||
return_state = FIFO_WRITE_UNDO;
|
||||
break;
|
||||
}
|
||||
fifo->execution |= FIFO_WRITE;
|
||||
|
||||
if(length <= fifo->size) // ʣ<><CAA3><EFBFBD>ռ<EFBFBD><D5BC>㹻װ<E3B9BB>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
temp_length = fifo->max - fifo->head; // <20><><EFBFBD><EFBFBD>ͷָ<CDB7><D6B8><EFBFBD><EFBFBD><EFBFBD>뻺<EFBFBD><EBBBBA><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD>ж<EFBFBD><D0B6>ٿռ<D9BF>
|
||||
|
||||
if(length > temp_length) // <20><><EFBFBD>뻺<EFBFBD><EBBBBA><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶβ<D6B6><CEB2><EFBFBD>
|
||||
{
|
||||
switch(fifo->type)
|
||||
{
|
||||
case FIFO_DATA_8BIT:
|
||||
memcpy(
|
||||
&(((uint8 *)fifo->buffer)[fifo->head]),
|
||||
dat, temp_length); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
fifo_head_offset(fifo, temp_length); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
|
||||
memcpy(
|
||||
&(((uint8 *)fifo->buffer)[fifo->head]),
|
||||
&(((uint8 *)dat)[temp_length]),
|
||||
length - temp_length); // <20><><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
fifo_head_offset(fifo, length - temp_length); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
|
||||
break;
|
||||
case FIFO_DATA_16BIT:
|
||||
memcpy(
|
||||
&(((uint16 *)fifo->buffer)[fifo->head]),
|
||||
dat, temp_length * 2); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
fifo_head_offset(fifo, temp_length); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
|
||||
memcpy(
|
||||
&(((uint16 *)fifo->buffer)[fifo->head]),
|
||||
&(((uint16 *)dat)[temp_length]),
|
||||
(length - temp_length) * 2); // <20><><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
fifo_head_offset(fifo, length - temp_length); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
|
||||
break;
|
||||
case FIFO_DATA_32BIT:
|
||||
memcpy(
|
||||
&(((uint32 *)fifo->buffer)[fifo->head]),
|
||||
dat, temp_length * 4); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
fifo_head_offset(fifo, temp_length); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
|
||||
memcpy(
|
||||
&(((uint32 *)fifo->buffer)[fifo->head]),
|
||||
&(((uint32 *)dat)[temp_length]),
|
||||
(length - temp_length) * 4); // <20><><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
fifo_head_offset(fifo, length - temp_length); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(fifo->type)
|
||||
{
|
||||
case FIFO_DATA_8BIT:
|
||||
memcpy(
|
||||
&(((uint8 *)fifo->buffer)[fifo->head]),
|
||||
dat, length); // һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
|
||||
fifo_head_offset(fifo, length); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
|
||||
break;
|
||||
case FIFO_DATA_16BIT:
|
||||
memcpy(
|
||||
&(((uint16 *)fifo->buffer)[fifo->head]),
|
||||
dat, length * 2); // һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
|
||||
fifo_head_offset(fifo, length); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
|
||||
break;
|
||||
case FIFO_DATA_32BIT:
|
||||
memcpy(
|
||||
&(((uint32 *)fifo->buffer)[fifo->head]),
|
||||
dat, length * 4); // һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
|
||||
fifo_head_offset(fifo, length); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
|
||||
break;
|
||||
}
|
||||
// memcpy(&fifo->buffer[fifo->head], dat, length); // һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
|
||||
// fifo_head_offset(fifo, length); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
|
||||
}
|
||||
|
||||
fifo->size -= length; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><EFBFBD>ȼ<EFBFBD>С
|
||||
}
|
||||
else
|
||||
{
|
||||
return_state = FIFO_SPACE_NO_ENOUGH;
|
||||
}
|
||||
fifo->execution &= ~FIFO_WRITE;
|
||||
}while(0);
|
||||
|
||||
return return_state;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> FIFO <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *fifo FIFO <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *dat Ŀ<>껺<EFBFBD><EABBBA><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> flag <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD> FIFO ״̬ <20><>ѡ<EFBFBD><D1A1><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ն<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> fifo_state_enum <20><><EFBFBD><EFBFBD>״̬
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> zf_log(fifo_read_element(&fifo, data, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_byte error");
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag)
|
||||
{
|
||||
zf_assert(fifo != NULL);
|
||||
fifo_state_enum return_state = FIFO_SUCCESS;
|
||||
|
||||
do
|
||||
{
|
||||
if(NULL == dat)
|
||||
{
|
||||
return_state = FIFO_BUFFER_NULL;
|
||||
break;
|
||||
}
|
||||
fifo->execution |= FIFO_READ;
|
||||
|
||||
if(1 > fifo_used(fifo))
|
||||
{
|
||||
return_state = FIFO_DATA_NO_ENOUGH; // <20><>־<EFBFBD><D6BE><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>
|
||||
}
|
||||
|
||||
switch(fifo->type)
|
||||
{
|
||||
case FIFO_DATA_8BIT:
|
||||
*((uint8 *)dat) = ((uint8 *)fifo->buffer)[fifo->end];
|
||||
break;
|
||||
case FIFO_DATA_16BIT:
|
||||
*((uint16 *)dat) = ((uint16 *)fifo->buffer)[fifo->end];
|
||||
break;
|
||||
case FIFO_DATA_32BIT:
|
||||
*((uint32 *)dat) = ((uint32 *)fifo->buffer)[fifo->end];
|
||||
break;
|
||||
}
|
||||
|
||||
if(flag == FIFO_READ_AND_CLEAN) // <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO ״̬
|
||||
{
|
||||
if(FIFO_CLEAR & fifo->execution)
|
||||
{
|
||||
return_state = FIFO_CLEAR_UNDO;
|
||||
break;
|
||||
}
|
||||
fifo->execution |= FIFO_CLEAR;
|
||||
fifo_end_offset(fifo, 1); // <20>ƶ<EFBFBD> FIFO ͷָ<CDB7><D6B8>
|
||||
fifo->size += 1;
|
||||
fifo->execution &= ~FIFO_CLEAR;
|
||||
}
|
||||
}while(0);
|
||||
fifo->execution &= FIFO_READ;
|
||||
|
||||
return return_state;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> FIFO <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *fifo FIFO <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *dat Ŀ<>껺<EFBFBD><EABBBA><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *length <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᱻ<EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> flag <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD> FIFO ״̬ <20><>ѡ<EFBFBD><D1A1><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ն<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> fifo_state_enum <20><><EFBFBD><EFBFBD>״̬
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> zf_log(fifo_read_buffer(&fifo, data, &length, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_buffer error");
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
|
||||
{
|
||||
zf_assert(fifo != NULL);
|
||||
zf_assert(length != NULL);
|
||||
fifo_state_enum return_state = FIFO_SUCCESS;
|
||||
uint32 temp_length;
|
||||
uint32 fifo_data_length;
|
||||
|
||||
do
|
||||
{
|
||||
if(NULL == dat)
|
||||
{
|
||||
return_state = FIFO_BUFFER_NULL;
|
||||
break;
|
||||
}
|
||||
fifo->execution |= FIFO_READ;
|
||||
|
||||
fifo_data_length = fifo_used(fifo);
|
||||
|
||||
if(*length > fifo_data_length)
|
||||
{
|
||||
*length = fifo_data_length; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
return_state = FIFO_DATA_NO_ENOUGH; // <20><>־<EFBFBD><D6BE><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>
|
||||
}
|
||||
|
||||
temp_length = fifo->max - fifo->end; // <20><><EFBFBD><EFBFBD>βָ<CEB2><D6B8><EFBFBD><EFBFBD><EFBFBD>뻺<EFBFBD><EBBBBA><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD>ж<EFBFBD><D0B6>ٿռ<D9BF>
|
||||
if(*length <= temp_length) // <20>㹻һ<E3B9BB><D2BB><EFBFBD>Զ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
{
|
||||
switch(fifo->type)
|
||||
{
|
||||
case FIFO_DATA_8BIT:
|
||||
memcpy(dat, &(((uint8 *)fifo->buffer)[fifo->end]), *length);
|
||||
break;
|
||||
case FIFO_DATA_16BIT:
|
||||
memcpy(dat, &(((uint16 *)fifo->buffer)[fifo->end]), *length * 2);
|
||||
break;
|
||||
case FIFO_DATA_32BIT:
|
||||
memcpy(dat, &(((uint32 *)fifo->buffer)[fifo->end]), *length * 4);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(fifo->type)
|
||||
{
|
||||
case FIFO_DATA_8BIT:
|
||||
memcpy(dat, &(((uint8 *)fifo->buffer)[fifo->end]), temp_length);
|
||||
memcpy(&(((uint8 *)dat)[temp_length]), fifo->buffer, *length - temp_length);
|
||||
break;
|
||||
case FIFO_DATA_16BIT:
|
||||
memcpy(dat, &(((uint16 *)fifo->buffer)[fifo->end]), temp_length * 2);
|
||||
memcpy(&(((uint16 *)dat)[temp_length]), fifo->buffer, (*length - temp_length) * 2);
|
||||
break;
|
||||
case FIFO_DATA_32BIT:
|
||||
memcpy(dat, &(((uint32 *)fifo->buffer)[fifo->end]), temp_length * 4);
|
||||
memcpy(&(((uint32 *)dat)[temp_length]), fifo->buffer, (*length - temp_length) * 4);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(flag == FIFO_READ_AND_CLEAN) // <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO ״̬
|
||||
{
|
||||
if(FIFO_CLEAR & fifo->execution)
|
||||
{
|
||||
return_state = FIFO_CLEAR_UNDO;
|
||||
break;
|
||||
}
|
||||
fifo->execution |= FIFO_CLEAR;
|
||||
fifo_end_offset(fifo, *length); // <20>ƶ<EFBFBD> FIFO ͷָ<CDB7><D6B8>
|
||||
fifo->size += *length;
|
||||
fifo->execution &= ~FIFO_CLEAR;
|
||||
}
|
||||
}while(0);
|
||||
fifo->execution &= FIFO_READ;
|
||||
|
||||
return return_state;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> FIFO β<><CEB2><EFBFBD><EFBFBD>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> buffer
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *fifo FIFO <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *dat Ŀ<>껺<EFBFBD><EABBBA><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *length <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᱻ<EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> flag <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD> FIFO ״̬ <20><>ѡ<EFBFBD><D1A1><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ն<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> fifo_state_enum <20><><EFBFBD><EFBFBD>״̬
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> zf_log(fifo_read_tail_buffer(&fifo, data, &length, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_buffer error");
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> FIFO_READ_AND_CLEAN <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ᶪ<EFBFBD><E1B6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO
|
||||
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> FIFO_READ_AND_CLEAN <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ᶪ<EFBFBD><E1B6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO
|
||||
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> FIFO_READ_AND_CLEAN <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ᶪ<EFBFBD><E1B6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
|
||||
{
|
||||
zf_assert(fifo != NULL);
|
||||
zf_assert(length != NULL);
|
||||
fifo_state_enum return_state = FIFO_SUCCESS;
|
||||
uint32 temp_length;
|
||||
uint32 fifo_data_length;
|
||||
|
||||
do
|
||||
{
|
||||
if(NULL == dat)
|
||||
{
|
||||
return_state = FIFO_BUFFER_NULL;
|
||||
break;
|
||||
}
|
||||
fifo->execution |= FIFO_READ;
|
||||
|
||||
fifo_data_length = fifo_used(fifo);
|
||||
if(*length > fifo_data_length)
|
||||
{
|
||||
*length = fifo_data_length; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
return_state = FIFO_DATA_NO_ENOUGH; // <20><>־<EFBFBD><D6BE><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>
|
||||
}
|
||||
|
||||
if((fifo->head > fifo->end) || (fifo->head >= *length))
|
||||
{
|
||||
switch(fifo->type)
|
||||
{
|
||||
case FIFO_DATA_8BIT:
|
||||
memcpy(dat, &(((uint8 *)fifo->buffer)[fifo->head - *length]), *length);
|
||||
break;
|
||||
case FIFO_DATA_16BIT:
|
||||
memcpy(dat, &(((uint16 *)fifo->buffer)[fifo->head - *length]), *length * 2);
|
||||
break;
|
||||
case FIFO_DATA_32BIT:
|
||||
memcpy(dat, &(((uint32 *)fifo->buffer)[fifo->head - *length]), *length * 4);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
temp_length = *length - fifo->head; // <20><><EFBFBD><EFBFBD>βָ<CEB2><D6B8><EFBFBD><EFBFBD><EFBFBD>뻺<EFBFBD><EBBBBA><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD>ж<EFBFBD><D0B6>ٿռ<D9BF>
|
||||
switch(fifo->type)
|
||||
{
|
||||
case FIFO_DATA_8BIT:
|
||||
memcpy(dat, &(((uint8 *)fifo->buffer)[fifo->max - temp_length]), temp_length);
|
||||
memcpy(&(((uint8 *)dat)[temp_length]), &(((uint8 *)fifo->buffer)[fifo->head - *length]), (*length - temp_length));
|
||||
break;
|
||||
case FIFO_DATA_16BIT:
|
||||
memcpy(dat, &(((uint16 *)fifo->buffer)[fifo->max - temp_length]), temp_length * 2);
|
||||
memcpy(&(((uint16 *)dat)[temp_length]), &(((uint16 *)fifo->buffer)[fifo->head - *length]), (*length - temp_length) * 2);
|
||||
break;
|
||||
case FIFO_DATA_32BIT:
|
||||
memcpy(dat, &(((uint32 *)fifo->buffer)[fifo->max - temp_length]), temp_length * 4);
|
||||
memcpy(&(((uint32 *)dat)[temp_length]), &(((uint32 *)fifo->buffer)[fifo->head - *length]), (*length - temp_length) * 4);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(flag == FIFO_READ_AND_CLEAN) // <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO ״̬
|
||||
{
|
||||
if(FIFO_CLEAR & fifo->execution)
|
||||
{
|
||||
return_state = FIFO_CLEAR_UNDO;
|
||||
break;
|
||||
}
|
||||
fifo->execution |= FIFO_CLEAR;
|
||||
fifo_end_offset(fifo, (fifo->max - fifo->size));
|
||||
fifo->size = fifo->max;
|
||||
fifo->execution &= ~FIFO_CLEAR;
|
||||
}
|
||||
}while(0);
|
||||
fifo->execution &= FIFO_READ;
|
||||
|
||||
return return_state;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO <20><>ʼ<EFBFBD><CABC> <20><><EFBFBD>ض<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *fifo FIFO <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> type FIFO <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buffer_addr Ҫ<><D2AA><EFBFBD>صĻ<D8B5><C4BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> size <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> fifo_state_enum <20><><EFBFBD><EFBFBD>״̬
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> fifo_init(&user_fifo, user_buffer, 64);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
|
||||
{
|
||||
zf_assert(fifo != NULL);
|
||||
fifo_state_enum return_value = FIFO_SUCCESS;
|
||||
do
|
||||
{
|
||||
if(NULL == buffer_addr)
|
||||
{
|
||||
return_value = FIFO_BUFFER_NULL;
|
||||
break;
|
||||
}
|
||||
fifo->buffer = buffer_addr;
|
||||
fifo->execution = FIFO_IDLE;
|
||||
fifo->type = type;
|
||||
fifo->head = 0;
|
||||
fifo->end = 0;
|
||||
fifo->size = size;
|
||||
fifo->max = size;
|
||||
}while(0);
|
||||
return return_value;
|
||||
}
|
||||
96
libraries/zf_common/zf_common_fifo.h
Normal file
96
libraries/zf_common/zf_common_fifo.h
Normal file
@@ -0,0 +1,96 @@
|
||||
/*********************************************************************************************************************
|
||||
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD>⣩<EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
|
||||
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
|
||||
*
|
||||
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
*
|
||||
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᷢ<EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD>棨<EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><DEB8><EFBFBD>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
|
||||
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
|
||||
*
|
||||
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_common_fifo
|
||||
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* <20>汾<EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
|
||||
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
|
||||
*
|
||||
* <20>ļ<DEB8>¼
|
||||
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
|
||||
* 2022-09-15 <20><>W first version
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _zf_common_fifo_h_
|
||||
#define _zf_common_fifo_h_
|
||||
|
||||
#include "zf_common_typedef.h"
|
||||
|
||||
typedef enum
|
||||
{
|
||||
FIFO_SUCCESS,
|
||||
|
||||
FIFO_WRITE_UNDO,
|
||||
FIFO_CLEAR_UNDO,
|
||||
FIFO_BUFFER_NULL,
|
||||
FIFO_SPACE_NO_ENOUGH,
|
||||
FIFO_DATA_NO_ENOUGH,
|
||||
}fifo_state_enum;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
FIFO_IDLE = 0x00,
|
||||
FIFO_CLEAR = 0x01,
|
||||
FIFO_WRITE = 0x02,
|
||||
FIFO_READ = 0x04,
|
||||
}fifo_execution_enum;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
FIFO_READ_AND_CLEAN,
|
||||
FIFO_READ_ONLY,
|
||||
}fifo_operation_enum;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
FIFO_DATA_8BIT,
|
||||
FIFO_DATA_16BIT,
|
||||
FIFO_DATA_32BIT,
|
||||
}fifo_data_type_enum;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8 execution; // ִ<>в<EFBFBD><D0B2><EFBFBD>
|
||||
fifo_data_type_enum type; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void *buffer; // <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
uint32 head; // <20><><EFBFBD><EFBFBD>ͷָ<CDB7><D6B8> <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>յĻ<D5B5><C4BB><EFBFBD>
|
||||
uint32 end; // <20><><EFBFBD><EFBFBD>βָ<CEB2><D6B8> <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ǿջ<C7BF><D5BB>棨<EFBFBD><E6A3A8><EFBFBD><EFBFBD>ȫ<EFBFBD>ճ<EFBFBD><D5B3>⣩
|
||||
uint32 size; // <20><><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD>С
|
||||
uint32 max; // <20><><EFBFBD><EFBFBD><EFBFBD>ܴ<EFBFBD>С
|
||||
}fifo_struct;
|
||||
|
||||
fifo_state_enum fifo_clear (fifo_struct *fifo);
|
||||
uint32 fifo_used (fifo_struct *fifo);
|
||||
|
||||
fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat);
|
||||
fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length);
|
||||
fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag);
|
||||
fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
|
||||
fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
|
||||
|
||||
fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
|
||||
|
||||
#endif
|
||||
|
||||
2718
libraries/zf_common/zf_common_font.c
Normal file
2718
libraries/zf_common/zf_common_font.c
Normal file
File diff suppressed because it is too large
Load Diff
67
libraries/zf_common/zf_common_font.h
Normal file
67
libraries/zf_common/zf_common_font.h
Normal file
@@ -0,0 +1,67 @@
|
||||
/*********************************************************************************************************************
|
||||
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD>⣩<EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
|
||||
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
|
||||
*
|
||||
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
*
|
||||
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᷢ<EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD>棨<EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><DEB8><EFBFBD>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
|
||||
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
|
||||
*
|
||||
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_common_font
|
||||
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* <20>汾<EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
|
||||
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
|
||||
*
|
||||
* <20>ļ<DEB8>¼
|
||||
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
|
||||
* 2022-09-15 <20><>W first version
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _zf_common_font_h_
|
||||
#define _zf_common_font_h_
|
||||
|
||||
#include "zf_common_typedef.h"
|
||||
|
||||
//-------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ----------
|
||||
typedef enum
|
||||
{
|
||||
RGB565_WHITE = (0xFFFF), // <20><>ɫ
|
||||
RGB565_BLACK = (0x0000), // <20><>ɫ
|
||||
RGB565_BLUE = (0x001F), // <20><>ɫ
|
||||
RGB565_PURPLE = (0xF81F), // <20><>ɫ
|
||||
RGB565_PINK = (0xFE19), // <20><>ɫ
|
||||
RGB565_RED = (0xF800), // <20><>ɫ
|
||||
RGB565_MAGENTA = (0xF81F), // Ʒ<><C6B7>
|
||||
RGB565_GREEN = (0x07E0), // <20><>ɫ
|
||||
RGB565_CYAN = (0x07FF), // <20><>ɫ
|
||||
RGB565_YELLOW = (0xFFE0), // <20><>ɫ
|
||||
RGB565_BROWN = (0xBC40), // <20><>ɫ
|
||||
RGB565_GRAY = (0x8430), // <20><>ɫ
|
||||
|
||||
RGB565_39C5BB = (0x3616),
|
||||
RGB565_66CCFF = (0x665F),
|
||||
}rgb565_color_enum;
|
||||
|
||||
extern const uint8 ascii_font_8x16[][16];
|
||||
extern const uint8 ascii_font_6x8[][6];
|
||||
extern const uint8 chinese_test[8][16];
|
||||
extern const uint8 oled_16x16_chinese[][16];
|
||||
extern const uint8 gImage_seekfree_logo[38400];
|
||||
|
||||
#endif
|
||||
907
libraries/zf_common/zf_common_function.c
Normal file
907
libraries/zf_common/zf_common_function.c
Normal file
@@ -0,0 +1,907 @@
|
||||
/*********************************************************************************************************************
|
||||
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD>⣩<EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
|
||||
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
|
||||
*
|
||||
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
*
|
||||
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᷢ<EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD>棨<EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><DEB8><EFBFBD>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
|
||||
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
|
||||
*
|
||||
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_common_function
|
||||
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* <20>汾<EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
|
||||
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
|
||||
*
|
||||
* <20>ļ<DEB8>¼
|
||||
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
|
||||
* 2022-09-15 <20><>W first version
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "zf_common_debug.h"
|
||||
#include "zf_common_function.h"
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> num1 <20><><EFBFBD><EFBFBD>1
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> num2 <20><><EFBFBD><EFBFBD>2
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> return func_get_greatest_common_divisor(144, 36); // <20><>ȡ 144 <20><> 36 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC>
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint32 func_get_greatest_common_divisor (uint32 num1, uint32 num2)
|
||||
{
|
||||
while(num1 != num2)
|
||||
{
|
||||
if(num1 > num2)
|
||||
{
|
||||
num1 = num1 - num2;
|
||||
}
|
||||
if(num1 < num2)
|
||||
{
|
||||
num2 = num2 - num1;
|
||||
}
|
||||
}
|
||||
return num1;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> t <20><>ʱʱ<CAB1><CAB1>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> func_soft_delay(100);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void func_soft_delay (volatile long t)
|
||||
{
|
||||
while(t --);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ַ<EFBFBD><D6B7><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ݷ<EFBFBD>Χ<EFBFBD><CEA7> [-32768,32767]
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> <20>ɴ<EFBFBD><C9B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> int32 ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> int32 dat = func_str_to_int("-100");
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
int32 func_str_to_int (char *str)
|
||||
{
|
||||
zf_assert(str != NULL);
|
||||
uint8 sign = 0; // <20><><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD> 0-<2D><><EFBFBD><EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
|
||||
int32 temp = 0; // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
do
|
||||
{
|
||||
if(NULL == str)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if('-' == *str) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7>Ǹ<EFBFBD><C7B8><EFBFBD>
|
||||
{
|
||||
sign = 1; // <20><><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD>
|
||||
str ++;
|
||||
}
|
||||
else if('+' == *str) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
str ++;
|
||||
}
|
||||
|
||||
while(('0' <= *str) && ('9' >= *str)) // ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
temp = temp * 10 + ((uint8)(*str) - 0x30); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
str ++;
|
||||
}
|
||||
|
||||
if(sign)
|
||||
{
|
||||
temp = -temp;
|
||||
}
|
||||
}while(0);
|
||||
return temp;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> <20><><EFBFBD>ݷ<EFBFBD>Χ<EFBFBD><CEA7> [-32768,32767]
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str <20>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> number <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> func_int_to_str(data_buffer, -300);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void func_int_to_str (char *str, int32 number)
|
||||
{
|
||||
zf_assert(str != NULL);
|
||||
uint8 data_temp[16]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8 bit = 0; // <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
||||
int32 number_temp = 0;
|
||||
|
||||
do
|
||||
{
|
||||
if(NULL == str)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if(0 > number) // <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
*str ++ = '-';
|
||||
number = -number;
|
||||
}
|
||||
else if(0 == number) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD> 0
|
||||
{
|
||||
*str = '0';
|
||||
break;
|
||||
}
|
||||
|
||||
while(0 != number) // ѭ<><D1AD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
{
|
||||
number_temp = number % 10;
|
||||
data_temp[bit ++] = func_abs(number_temp); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
number /= 10; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ĸ<EFBFBD>λ<EFBFBD><CEBB>
|
||||
}
|
||||
while(0 != bit) // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
*str ++ = (data_temp[bit - 1] + 0x30); // <20><><EFBFBD><EFBFBD><EFBFBD>ִӵ<D6B4><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>ȡ<EFBFBD><C8A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
bit --;
|
||||
}
|
||||
}while(0);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ַ<EFBFBD><D6B7><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ݷ<EFBFBD>Χ<EFBFBD><CEA7> [0,65535]
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> <20><EFBFBD><DEB7><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> uint32 dat = func_str_to_uint("100");
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint32 func_str_to_uint (char *str)
|
||||
{
|
||||
zf_assert(str != NULL);
|
||||
uint32 temp = 0; // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
do
|
||||
{
|
||||
if(NULL == str)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
while(('0' <= *str) && ('9' >= *str)) // ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
temp = temp * 10 + ((uint8)(*str) - 0x30); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
str ++;
|
||||
}
|
||||
}while(0);
|
||||
|
||||
return temp;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> <20><><EFBFBD>ݷ<EFBFBD>Χ<EFBFBD><CEA7> [0,65535]
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str <20>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> number <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> func_uint_to_str(data_buffer, 300);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void func_uint_to_str (char *str, uint32 number)
|
||||
{
|
||||
zf_assert(str != NULL);
|
||||
int8 data_temp[16]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8 bit = 0; // <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
||||
|
||||
do
|
||||
{
|
||||
if(NULL == str)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if(0 == number) // <20><><EFBFBD>Ǹ<EFBFBD> 0
|
||||
{
|
||||
*str = '0';
|
||||
break;
|
||||
}
|
||||
|
||||
while(0 != number) // ѭ<><D1AD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
{
|
||||
data_temp[bit ++] = (number % 10); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
number /= 10; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ĸ<EFBFBD>λ<EFBFBD><CEBB>
|
||||
}
|
||||
while(0 != bit) // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
*str ++ = (data_temp[bit - 1] + 0x30); // <20><><EFBFBD><EFBFBD><EFBFBD>ִӵ<D6B4><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>ȡ<EFBFBD><C8A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
bit --;
|
||||
}
|
||||
}while(0);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ַ<EFBFBD><D6B7><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ч<EFBFBD>ۼƾ<DBBC><C6BE><EFBFBD>ΪС<CEAA><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> <20>ɴ<EFBFBD><C9B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> float ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> float dat = func_str_to_float("-100.2");
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
float func_str_to_float (char *str)
|
||||
{
|
||||
zf_assert(str != NULL);
|
||||
uint8 sign = 0; // <20><><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD> 0-<2D><><EFBFBD><EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
|
||||
float temp = 0.0; // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
float temp_point = 0.0; // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
float point_bit = 1; // С<><D0A1><EFBFBD>ۼƳ<DBBC><C6B3><EFBFBD>
|
||||
|
||||
do
|
||||
{
|
||||
if(NULL == str)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if('-' == *str) // <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
sign = 1; // <20><><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD>
|
||||
str ++;
|
||||
}
|
||||
else if('+' == *str) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
str ++;
|
||||
}
|
||||
|
||||
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
while(('0' <= *str) && ('9' >= *str)) // ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
temp = temp * 10 + ((uint8)(*str) - 0x30); // <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
str ++;
|
||||
}
|
||||
if('.' == *str)
|
||||
{
|
||||
str ++;
|
||||
while(('0' <= *str) && ('9' >= *str) && point_bit < 1000000.0) // ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ҿ<EFBFBD><D2BE>ȿ<EFBFBD><C8BF>ƻ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>λ
|
||||
{
|
||||
temp_point = temp_point * 10 + ((uint8)(*str) - 0x30); // <20><>ȡС<C8A1><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
point_bit *= 10; // <20><><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF>С<EFBFBD><D0A1><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
str ++;
|
||||
}
|
||||
temp_point /= point_bit; // <20><><EFBFBD><EFBFBD>С<EFBFBD><D0A1>
|
||||
}
|
||||
temp += temp_point; // <20><><EFBFBD><EFBFBD>ֵƴ<D6B5><C6B4>
|
||||
|
||||
if(sign)
|
||||
{
|
||||
temp = -temp;
|
||||
}
|
||||
}while(0);
|
||||
return temp;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str <20>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> number <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> point_bit С<><D0A1><EFBFBD>㾫<EFBFBD><E3BEAB>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> func_float_to_str(data_buffer, 3.1415, 2); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> data_buffer = "3.14"
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void func_float_to_str (char *str, float number, uint8 point_bit)
|
||||
{
|
||||
zf_assert(str != NULL);
|
||||
int data_int = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int data_float = 0.0; // С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int data_temp[8]; // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
int data_temp_point[6]; // С<><D0A1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8 bit = point_bit; // ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
||||
|
||||
do
|
||||
{
|
||||
if(NULL == str)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
data_int = (int)number; // ֱ<><D6B1>ǿ<EFBFBD><C7BF>ת<EFBFBD><D7AA>Ϊ int
|
||||
if(0 > number) // <20>ж<EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD>
|
||||
{
|
||||
*str ++ = '-';
|
||||
}
|
||||
else if(0.0 == number) // <20><><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD> 0
|
||||
{
|
||||
*str ++ = '0';
|
||||
*str ++ = '.';
|
||||
*str = '0';
|
||||
break;
|
||||
}
|
||||
|
||||
// <20><>ȡС<C8A1><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
number = number - data_int; // <20><>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>
|
||||
while(bit --)
|
||||
{
|
||||
number = number * 10; // <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>С<EFBFBD><D0A1>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
data_float = (int)number; // <20><>ȡ<EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>ֵ
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>תΪ<D7AA>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
bit = 0;
|
||||
do
|
||||
{
|
||||
data_temp[bit ++] = data_int % 10; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
data_int /= 10;
|
||||
}while(0 != data_int);
|
||||
while(0 != bit)
|
||||
{
|
||||
*str ++ = (func_abs(data_temp[bit - 1]) + 0x30); // <20>ٵ<EFBFBD><D9B5><EFBFBD><F2BDABB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵд<D6B5><D0B4><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
bit --;
|
||||
}
|
||||
|
||||
// С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>תΪ<D7AA>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
if(point_bit != 0)
|
||||
{
|
||||
bit = 0;
|
||||
*str ++ = '.';
|
||||
if(0 == data_float)
|
||||
{
|
||||
*str = '0';
|
||||
}
|
||||
else
|
||||
{
|
||||
while(0 != point_bit) // <20>ж<EFBFBD><D0B6><EFBFBD>Чλ<D0A7><CEBB>
|
||||
{
|
||||
data_temp_point[bit ++] = data_float % 10; // <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
data_float /= 10;
|
||||
point_bit --;
|
||||
}
|
||||
while(0 != bit)
|
||||
{
|
||||
*str ++ = (func_abs(data_temp_point[bit - 1]) + 0x30); // <20>ٵ<EFBFBD><D9B5><EFBFBD><F2BDABB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵд<D6B5><D0B4><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
bit --;
|
||||
}
|
||||
}
|
||||
}
|
||||
}while(0);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ַ<EFBFBD><D6B7><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ч<EFBFBD>ۼƾ<DBBC><C6BE><EFBFBD>ΪС<CEAA><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> str <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> <20>ɴ<EFBFBD><C9B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> double ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> double dat = func_str_to_double("-100.2");
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
double func_str_to_double (char *str)
|
||||
{
|
||||
zf_assert(str != NULL);
|
||||
uint8 sign = 0; // <20><><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD> 0-<2D><><EFBFBD><EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
|
||||
double temp = 0.0; // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double temp_point = 0.0; // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double point_bit = 1; // С<><D0A1><EFBFBD>ۼƳ<DBBC><C6B3><EFBFBD>
|
||||
|
||||
do
|
||||
{
|
||||
if(NULL == str)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if('-' == *str) // <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
sign = 1; // <20><><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD>
|
||||
str ++;
|
||||
}
|
||||
else if('+' == *str) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
str ++;
|
||||
}
|
||||
|
||||
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
while(('0' <= *str) && ('9' >= *str)) // ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
temp = temp * 10 + ((uint8)(*str) - 0x30); // <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
str ++;
|
||||
}
|
||||
if('.' == *str)
|
||||
{
|
||||
str ++;
|
||||
while(('0' <= *str) && ('9' >= *str) && point_bit < 1000000000.0) // ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ҿ<EFBFBD><D2BE>ȿ<EFBFBD><C8BF>ƻ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>λ
|
||||
{
|
||||
temp_point = temp_point * 10 + ((uint8)(*str) - 0x30); // <20><>ȡС<C8A1><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
point_bit *= 10; // <20><><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF>С<EFBFBD><D0A1><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
str ++;
|
||||
}
|
||||
temp_point /= point_bit; // <20><><EFBFBD><EFBFBD>С<EFBFBD><D0A1>
|
||||
}
|
||||
temp += temp_point; // <20><><EFBFBD><EFBFBD>ֵƴ<D6B5><C6B4>
|
||||
|
||||
if(sign)
|
||||
{
|
||||
temp = -temp;
|
||||
}
|
||||
}while(0);
|
||||
return temp;
|
||||
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str <20>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> number <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> point_bit С<><D0A1><EFBFBD>㾫<EFBFBD><E3BEAB>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> func_double_to_str(data_buffer, 3.1415, 2); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> data_buffer = "3.14"
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void func_double_to_str (char *str, double number, uint8 point_bit)
|
||||
{
|
||||
zf_assert(str != NULL);
|
||||
int data_int = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int data_float = 0.0; // С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int data_temp[12]; // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
int data_temp_point[9]; // С<><D0A1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8 bit = point_bit; // ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
||||
|
||||
do
|
||||
{
|
||||
if(NULL == str)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
data_int = (int)number; // ֱ<><D6B1>ǿ<EFBFBD><C7BF>ת<EFBFBD><D7AA>Ϊ int
|
||||
if(0 > number) // <20>ж<EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD>
|
||||
{
|
||||
*str ++ = '-';
|
||||
}
|
||||
else if(0.0 == number) // <20><><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD> 0
|
||||
{
|
||||
*str ++ = '0';
|
||||
*str ++ = '.';
|
||||
*str = '0';
|
||||
break;
|
||||
}
|
||||
|
||||
// <20><>ȡС<C8A1><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
number = number - data_int; // <20><>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>
|
||||
while(bit --)
|
||||
{
|
||||
number = number * 10; // <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>С<EFBFBD><D0A1>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
data_float = (int)number; // <20><>ȡ<EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>ֵ
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>תΪ<D7AA>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
bit = 0;
|
||||
do
|
||||
{
|
||||
data_temp[bit ++] = data_int % 10; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
data_int /= 10;
|
||||
}while(0 != data_int);
|
||||
while(0 != bit)
|
||||
{
|
||||
*str ++ = (func_abs(data_temp[bit - 1]) + 0x30); // <20>ٵ<EFBFBD><D9B5><EFBFBD><F2BDABB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵд<D6B5><D0B4><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
bit --;
|
||||
}
|
||||
|
||||
// С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>תΪ<D7AA>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
if(point_bit != 0)
|
||||
{
|
||||
bit = 0;
|
||||
*str ++ = '.';
|
||||
if(0 == data_float)
|
||||
*str = '0';
|
||||
else
|
||||
{
|
||||
while(0 != point_bit) // <20>ж<EFBFBD><D0B6><EFBFBD>Чλ<D0A7><CEBB>
|
||||
{
|
||||
data_temp_point[bit ++] = data_float % 10; // <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
data_float /= 10;
|
||||
point_bit --;
|
||||
}
|
||||
while(0 != bit)
|
||||
{
|
||||
*str ++ = (func_abs(data_temp_point[bit - 1]) + 0x30); // <20>ٵ<EFBFBD><D9B5><EFBFBD><F2BDABB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵд<D6B5><D0B4><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
bit --;
|
||||
}
|
||||
}
|
||||
}
|
||||
}while(0);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ַ<EFBFBD><D6B7><EFBFBD>ת Hex
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> str <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> <20><EFBFBD><DEB7><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> uint32 dat = func_str_to_hex("0x11");
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint32 func_str_to_hex (char *str)
|
||||
{
|
||||
zf_assert(str != NULL);
|
||||
uint32 str_len = strlen(str); // <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint32 result_data = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8 temp = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8 flag = 0; // <20><>־λ
|
||||
|
||||
do
|
||||
{
|
||||
if(NULL == str)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if(flag)
|
||||
{
|
||||
if(('a' <= *str) && ('f' >= *str))
|
||||
{
|
||||
temp = (*str - 87);
|
||||
}
|
||||
else if(('A' <= *str) && ('F' >= *str))
|
||||
{
|
||||
temp = (*str - 55);
|
||||
}
|
||||
else if(('0' <= *str) && ('9' >= *str))
|
||||
{
|
||||
temp = (*str - 48);
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
result_data = ((result_data << 4) | (temp & 0x0F));
|
||||
}
|
||||
else
|
||||
{
|
||||
// if(strncmp("0x", str, 2))
|
||||
if((*str == '0') && (*(str + 1) == 'x'))
|
||||
{
|
||||
str ++;
|
||||
flag = 1;
|
||||
}
|
||||
}
|
||||
str ++;
|
||||
}while(str_len --);
|
||||
|
||||
return result_data;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Hex ת<>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str <20>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> number <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> func_hex_to_str(data_buffer, 0x11); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> data_buffer = "0x11"
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void func_hex_to_str (char *str, uint32 number)
|
||||
{
|
||||
zf_assert(str != NULL);
|
||||
const char hex_index[16] = {
|
||||
'0', '1', '2', '3',
|
||||
'4', '5', '6', '7',
|
||||
'8', '9', 'A', 'B',
|
||||
'C', 'D', 'E', 'F'};
|
||||
int8 data_temp[12]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8 bit = 0; // <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
||||
|
||||
*str++ = '0';
|
||||
*str++ = 'x';
|
||||
do
|
||||
{
|
||||
if(NULL == str)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if(0 == number) // <20><><EFBFBD>Ǹ<EFBFBD> 0
|
||||
{
|
||||
*str = '0';
|
||||
break;
|
||||
}
|
||||
|
||||
while(0 != number) // ѭ<><D1AD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
{
|
||||
data_temp[bit ++] = (number & 0xF); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
number >>= 4; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ĸ<EFBFBD>λ<EFBFBD><CEBB>
|
||||
}
|
||||
while(0 != bit) // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
*str ++ = hex_index[data_temp[bit - 1]]; // <20><><EFBFBD><EFBFBD><EFBFBD>ִӵ<D6B4><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>ȡ<EFBFBD><C8A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
bit --;
|
||||
}
|
||||
}while(0);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ ASCII ֵ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dat <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *p <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> neg_type <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> radix <20><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> number_conversion_ascii((uint32)ival, vstr, 1, 10);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ù<EFBFBD>ע Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 number_conversion_ascii (uint32 dat, int8 *p, uint8 neg_type, uint8 radix)
|
||||
{
|
||||
int32 neg_dat;
|
||||
uint32 pos_dat;
|
||||
uint8 temp_data = 0;
|
||||
uint8 valid_num = 0;
|
||||
|
||||
if(neg_type)
|
||||
{
|
||||
neg_dat = (int32)dat;
|
||||
if(0 > neg_dat)
|
||||
{
|
||||
neg_dat = -neg_dat;
|
||||
}
|
||||
while(1)
|
||||
{
|
||||
*p = neg_dat%radix + '0';
|
||||
neg_dat = neg_dat/radix;
|
||||
valid_num ++;
|
||||
|
||||
if(!neg_dat)
|
||||
{
|
||||
break;
|
||||
}
|
||||
p ++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pos_dat = dat;
|
||||
while(1)
|
||||
{
|
||||
temp_data = pos_dat%radix;
|
||||
if(10 <= temp_data)
|
||||
{
|
||||
temp_data += 'A'-10;
|
||||
}
|
||||
else
|
||||
{
|
||||
temp_data += '0';
|
||||
}
|
||||
|
||||
*p = temp_data;
|
||||
|
||||
pos_dat = pos_dat/radix;
|
||||
valid_num ++;
|
||||
|
||||
if(!pos_dat)
|
||||
{
|
||||
break;
|
||||
}
|
||||
p ++;
|
||||
}
|
||||
}
|
||||
return valid_num;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> printf <20><>ʾת<CABE><D7AA>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *d_buff <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> printf_reverse_order(vstr, vlen);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ù<EFBFBD>ע Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void printf_reverse_order (int8 *d_buff, uint32 len)
|
||||
{
|
||||
uint32 i;
|
||||
int8 temp_data;
|
||||
for(i = 0; len / 2 > i; i ++)
|
||||
{
|
||||
temp_data = d_buff[len - 1 - i];
|
||||
d_buff[len - 1 -i ] = d_buff[i];
|
||||
d_buff[i] = temp_data;
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> sprintf <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buff <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *format Դ<>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> ... <20>ɱ<EFBFBD><C9B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> zf_sprintf(buff, "Data : %d", 100);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ù<EFBFBD>ע Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint32 zf_sprintf (int8 *buff, const int8 *format, ...)
|
||||
{
|
||||
uint32 buff_len = 0;
|
||||
va_list arg;
|
||||
va_start(arg, format);
|
||||
|
||||
while (*format)
|
||||
{
|
||||
int8 ret = *format;
|
||||
if ('%' == ret)
|
||||
{
|
||||
switch (*++ format)
|
||||
{
|
||||
case 'a':// ʮ<><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>δʵ<CEB4><CAB5>
|
||||
{
|
||||
}
|
||||
break;
|
||||
|
||||
case 'c':// һ<><D2BB><EFBFBD>ַ<EFBFBD>
|
||||
{
|
||||
int8 ch = (int8)va_arg(arg, uint32);
|
||||
*buff = ch;
|
||||
buff ++;
|
||||
buff_len ++;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
case 'i':// <20>з<EFBFBD><D0B7><EFBFBD>ʮ<EFBFBD><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
int8 vstr[33];
|
||||
int32 ival = (int32)va_arg(arg, int32);
|
||||
uint8 vlen = number_conversion_ascii((uint32)ival, vstr, 1, 10);
|
||||
|
||||
if(0 > ival)
|
||||
{
|
||||
vstr[vlen] = '-';
|
||||
vlen ++;
|
||||
}
|
||||
printf_reverse_order(vstr, vlen);
|
||||
memcpy(buff, vstr, vlen);
|
||||
buff += vlen;
|
||||
buff_len += vlen;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'f':// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
case 'F':// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
int8 vstr[33];
|
||||
double ival = (double)va_arg(arg, double);
|
||||
uint8 vlen = number_conversion_ascii((uint32)(int32)ival, vstr, 1, 10);
|
||||
|
||||
if(0 > ival)
|
||||
{
|
||||
vstr[vlen] = '-';
|
||||
vlen ++;
|
||||
}
|
||||
printf_reverse_order(vstr, vlen);
|
||||
memcpy(buff, vstr, vlen);
|
||||
buff += vlen;
|
||||
buff_len += vlen;
|
||||
|
||||
ival = ((double)ival - (int32)ival)*1000000;
|
||||
if(ival)
|
||||
{
|
||||
vlen = number_conversion_ascii((uint32)(int32)ival, vstr, 1, 10);
|
||||
}
|
||||
else
|
||||
{
|
||||
vstr[0] = vstr[1] = vstr[2] = vstr[3] = vstr[4] = vstr[5] = '0';
|
||||
vlen = 6;
|
||||
}
|
||||
|
||||
while(6 > vlen)
|
||||
{
|
||||
vstr[vlen] = '0';
|
||||
vlen ++;
|
||||
}
|
||||
|
||||
vstr[vlen] = '.';
|
||||
vlen ++;
|
||||
|
||||
printf_reverse_order(vstr, vlen);
|
||||
memcpy(buff, vstr, vlen);
|
||||
buff += vlen;
|
||||
buff_len += vlen;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'u':// <20><EFBFBD><DEB7><EFBFBD>ʮ<EFBFBD><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
int8 vstr[33];
|
||||
uint32 ival = (uint32)va_arg(arg, uint32);
|
||||
uint8 vlen = number_conversion_ascii(ival, vstr, 0, 10);
|
||||
|
||||
printf_reverse_order(vstr, vlen);
|
||||
memcpy(buff, vstr, vlen);
|
||||
buff += vlen;
|
||||
buff_len += vlen;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'o':// <20><EFBFBD><DEB7>Ű˽<C5B0><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
int8 vstr[33];
|
||||
uint32 ival = (uint32)va_arg(arg, uint32);
|
||||
uint8 vlen = number_conversion_ascii(ival, vstr, 0, 8);
|
||||
|
||||
printf_reverse_order(vstr, vlen);
|
||||
memcpy(buff, vstr, vlen);
|
||||
buff += vlen;
|
||||
buff_len += vlen;
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case 'x':// <20><EFBFBD><DEB7><EFBFBD>ʮ<EFBFBD><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
case 'X':// <20><EFBFBD><DEB7><EFBFBD>ʮ<EFBFBD><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
int8 vstr[33];
|
||||
uint32 ival = (uint32)va_arg(arg, uint32);
|
||||
uint8 vlen = number_conversion_ascii(ival, vstr, 0, 16);
|
||||
|
||||
printf_reverse_order(vstr, vlen);
|
||||
memcpy(buff, vstr, vlen);
|
||||
buff += vlen;
|
||||
buff_len += vlen;
|
||||
}
|
||||
break;
|
||||
|
||||
case 's':// <20>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
{
|
||||
int8 *pc = va_arg(arg, int8 *);
|
||||
while (*pc)
|
||||
{
|
||||
*buff = *pc;
|
||||
buff ++;
|
||||
buff_len ++;
|
||||
pc ++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'p':// <20><>16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
{
|
||||
int8 vstr[33];
|
||||
uint32 ival = (uint32)va_arg(arg, uint32);
|
||||
//uint8 vlen = number_conversion_ascii(ival, vstr, 0, 16);
|
||||
number_conversion_ascii(ival, vstr, 0, 16);
|
||||
printf_reverse_order(vstr, 8);
|
||||
memcpy(buff, vstr, 8);
|
||||
buff += 8;
|
||||
buff_len += 8;
|
||||
}
|
||||
break;
|
||||
|
||||
case '%':// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>%
|
||||
{
|
||||
*buff = '%';
|
||||
buff ++;
|
||||
buff_len ++;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
*buff = (int8)(*format);
|
||||
buff ++;
|
||||
buff_len ++;
|
||||
}
|
||||
format ++;
|
||||
}
|
||||
va_end(arg);
|
||||
|
||||
return buff_len;
|
||||
}
|
||||
|
||||
|
||||
97
libraries/zf_common/zf_common_function.h
Normal file
97
libraries/zf_common/zf_common_function.h
Normal file
@@ -0,0 +1,97 @@
|
||||
/*********************************************************************************************************************
|
||||
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD>⣩<EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
|
||||
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
|
||||
*
|
||||
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
*
|
||||
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᷢ<EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD>棨<EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><DEB8><EFBFBD>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
|
||||
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
|
||||
*
|
||||
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_common_function
|
||||
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* <20>汾<EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
|
||||
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
|
||||
*
|
||||
* <20>ļ<DEB8>¼
|
||||
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> s <20><>ע
|
||||
* 2022-09-15 <20><>W first version
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _zf_common_function_h_
|
||||
#define _zf_common_function_h_
|
||||
|
||||
#include "zf_common_typedef.h"
|
||||
|
||||
//====================================================<3D>궨<EFBFBD>庯<EFBFBD><E5BAAF><EFBFBD><EFBFBD>====================================================
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> <20><><EFBFBD>ݷ<EFBFBD>Χ<EFBFBD><CEA7> [-32767,32767]
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dat <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> int <20><><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>ֵ
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> dat = func_abs(dat); // <20><>dat<61><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
#define func_abs(x) ((x) >= 0 ? (x): -(x))
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD>ݷ<EFBFBD>Χ<EFBFBD><CEA7> [-32768,32767]
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> x <20><><EFBFBD><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> y <20><EFBFBD><DEB7><EFBFBD>Χ(<28><><EFBFBD>ݻᱻ<DDBB><E1B1BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-y<><79>+y֮<79><D6AE>)
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> int <20><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> int dat = func_limit(500, 300); // <20><><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-300<30><30>+300֮<30><D6AE> <20><><EFBFBD>˷<EFBFBD><CBB7>صĽ<D8B5><C4BD><EFBFBD><EFBFBD><EFBFBD>300
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
#define func_limit(x, y) ((x) > (y) ? (y) : ((x) < -(y) ? -(y) : (x)))
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ˫<><CBAB><EFBFBD><EFBFBD> <20><><EFBFBD>ݷ<EFBFBD>Χ<EFBFBD><CEA7> [-32768,32767]
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> x <20><><EFBFBD><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> a <20><EFBFBD><DEB7><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD>߽<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> b <20><EFBFBD><DEB7><EFBFBD>Χ<EFBFBD>ұ߽<D2B1>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> int <20><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> int dat = func_limit_ab(500, -300, 400); //<2F><><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-300<30><30>+400֮<30><D6AE> <20><><EFBFBD>˷<EFBFBD><CBB7>صĽ<D8B5><C4BD><EFBFBD><EFBFBD><EFBFBD>400
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
#define func_limit_ab(x, a, b) ((x) < (a) ? (a) : ((x) > (b) ? (b) : (x)))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//====================================================<3D>궨<EFBFBD>庯<EFBFBD><E5BAAF><EFBFBD><EFBFBD>====================================================
|
||||
|
||||
//=====================================================<3D><><EFBFBD>溯<EFBFBD><E6BAAF><EFBFBD><EFBFBD>=====================================================
|
||||
uint32 func_get_greatest_common_divisor (uint32 num1, uint32 num2);
|
||||
|
||||
void func_soft_delay (volatile long t);
|
||||
|
||||
int32 func_str_to_int (char *str);
|
||||
void func_int_to_str (char *str, int32 number);
|
||||
uint32 func_str_to_uint (char *str);
|
||||
void func_uint_to_str (char *str, uint32 number);
|
||||
float func_str_to_float (char *str);
|
||||
void func_float_to_str (char *str, float number, uint8 point_bit);
|
||||
double func_str_to_double (char *str);
|
||||
void func_double_to_str (char *str, double number, uint8 point_bit);
|
||||
uint32 func_str_to_hex (char *str);
|
||||
void func_hex_to_str (char *str, uint32 number);
|
||||
|
||||
uint32 zf_sprintf (int8 *buff, const int8 *format, ...);
|
||||
//=====================================================<3D><><EFBFBD>溯<EFBFBD><E6BAAF><EFBFBD><EFBFBD>=====================================================
|
||||
|
||||
#endif
|
||||
146
libraries/zf_common/zf_common_headfile.h
Normal file
146
libraries/zf_common/zf_common_headfile.h
Normal file
@@ -0,0 +1,146 @@
|
||||
/*********************************************************************************************************************
|
||||
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD>⣩<EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
|
||||
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
|
||||
*
|
||||
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
*
|
||||
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᷢ<EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD>棨<EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><DEB8><EFBFBD>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
|
||||
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
|
||||
*
|
||||
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_common_headfile
|
||||
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* <20>汾<EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
|
||||
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
|
||||
*
|
||||
* <20>ļ<DEB8>¼
|
||||
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
|
||||
* 2022-09-15 <20><>W first version
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef __HEADFILE_H
|
||||
#define __HEADFILE_H
|
||||
|
||||
|
||||
|
||||
|
||||
#include "stdio.h"
|
||||
#include "stdint.h"
|
||||
#include "string.h"
|
||||
|
||||
|
||||
|
||||
//===================================================оƬ SDK <20>ײ<EFBFBD>===================================================
|
||||
#include "ch32v30x_adc.h"
|
||||
#include "ch32v30x_bkp.h"
|
||||
#include "ch32v30x_can.h"
|
||||
#include "ch32v30x_crc.h"
|
||||
#include "ch32v30x_dac.h"
|
||||
#include "ch32v30x_dbgmcu.h"
|
||||
#include "ch32v30x_dma.h"
|
||||
#include "ch32v30x_exti.h"
|
||||
#include "ch32v30x_flash.h"
|
||||
#include "ch32v30x_fsmc.h"
|
||||
#include "ch32v30x_gpio.h"
|
||||
#include "ch32v30x_i2c.h"
|
||||
#include "ch32v30x_iwdg.h"
|
||||
#include "ch32v30x_pwr.h"
|
||||
#include "ch32v30x_rcc.h"
|
||||
#include "ch32v30x_rtc.h"
|
||||
#include "ch32v30x_sdio.h"
|
||||
#include "ch32v30x_spi.h"
|
||||
#include "ch32v30x_tim.h"
|
||||
#include "ch32v30x_usart.h"
|
||||
#include "ch32v30x_wwdg.h"
|
||||
|
||||
|
||||
//===================================================оƬ SDK <20>ײ<EFBFBD>===================================================
|
||||
|
||||
//====================================================<3D><>Դ<EFBFBD><EFBFBD><E2B9AB><EFBFBD><EFBFBD>====================================================
|
||||
#include "zf_common_clock.h"
|
||||
#include "zf_common_debug.h"
|
||||
#include "zf_common_font.h"
|
||||
#include "zf_common_function.h"
|
||||
#include "zf_common_interrupt.h"
|
||||
#include "zf_common_fifo.h"
|
||||
#include "zf_common_typedef.h"
|
||||
//====================================================<3D><>Դ<EFBFBD><EFBFBD><E2B9AB><EFBFBD><EFBFBD>====================================================
|
||||
|
||||
//===================================================оƬ<D0BE><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================================================
|
||||
#include "zf_driver_adc.h"
|
||||
#include "zf_driver_delay.h"
|
||||
#include "zf_driver_dvp.h"
|
||||
#include "zf_driver_encoder.h"
|
||||
#include "zf_driver_exti.h"
|
||||
#include "zf_driver_flash.h"
|
||||
#include "zf_driver_gpio.h"
|
||||
//#include "zf_driver_iic.h"
|
||||
#include "zf_driver_pit.h"
|
||||
#include "zf_driver_pwm.h"
|
||||
//#include "zf_driver_soft_iic.h"
|
||||
//#include "zf_driver_soft_spi.h"
|
||||
#include "zf_driver_spi.h"
|
||||
#include "zf_driver_timer.h"
|
||||
#include "zf_driver_uart.h"
|
||||
#include "zf_driver_usb_cdc.h"
|
||||
|
||||
//===================================================оƬ<D0BE><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================================================
|
||||
|
||||
//===================================================<3D><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================================================
|
||||
#include "zf_device_camera.h"
|
||||
#include "zf_device_icm20602.h"
|
||||
#include "zf_device_ips114.h"
|
||||
#include "zf_device_tft180.h"
|
||||
#include "zf_device_ips200.h"
|
||||
#include "zf_device_mt9v03x_dvp.h"
|
||||
#include "zf_device_mpu6050.h"
|
||||
#include "zf_device_type.h"
|
||||
#include "zf_device_wireless_uart.h"
|
||||
#include "zf_device_oled.h"
|
||||
#include "zf_device_scc8660_dvp.h"
|
||||
#include "zf_device_bluetooth_ch9141.h"
|
||||
#include "zf_device_wireless_ch573.h"
|
||||
#include "zf_device_wireless_uart.h"
|
||||
#include "zf_device_virtual_oscilloscope.h"
|
||||
#include "zf_device_w25q32.h"
|
||||
#include "zf_device_k24c02.h"
|
||||
#include "zf_device_aht20.h"
|
||||
#include "zf_device_wifi_uart.h"
|
||||
#include "zf_device_imu660ra.h"
|
||||
#include "zf_device_imu963ra.h"
|
||||
#include "zf_device_key.h"
|
||||
#include "zf_device_gps_tau1201.h"
|
||||
#include "zf_device_dl1a.h"
|
||||
#include "zf_device_dm1xa.h"
|
||||
#include "zf_device_wifi_spi.h"
|
||||
#include "zf_device_detector.h"
|
||||
#include "zf_device_dl1b.h"
|
||||
|
||||
//===================================================<3D><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================================================
|
||||
|
||||
|
||||
//===================================================Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================================================
|
||||
|
||||
//===================================================Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================================================
|
||||
|
||||
//===================================================<3D>û<EFBFBD><C3BB>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ļ<EFBFBD>===================================================
|
||||
|
||||
//===================================================<3D>û<EFBFBD><C3BB>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ļ<EFBFBD>===================================================
|
||||
|
||||
#endif
|
||||
|
||||
135
libraries/zf_common/zf_common_interrupt.c
Normal file
135
libraries/zf_common/zf_common_interrupt.c
Normal file
@@ -0,0 +1,135 @@
|
||||
/*********************************************************************************************************************
|
||||
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD>⣩<EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
|
||||
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
|
||||
*
|
||||
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
*
|
||||
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᷢ<EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD>棨<EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><DEB8><EFBFBD>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
|
||||
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
|
||||
*
|
||||
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_common_interrupt
|
||||
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* <20>汾<EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
|
||||
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
|
||||
*
|
||||
* <20>ļ<DEB8>¼
|
||||
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
|
||||
* 2022-09-15 <20><>W first version
|
||||
********************************************************************************************************************/
|
||||
|
||||
|
||||
#include "zf_common_interrupt.h"
|
||||
|
||||
static uint32 interrupt_nest_count = 0;
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ָ<><D6B8><EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> irqn ָ<><D6B8><EFBFBD>жϺ<D0B6> <20>ɲ鿴 isr.c <20><>Ӧ<EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>ע
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> interrupt_enable(UART1_IRQn);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void interrupt_enable (IRQn_Type irqn)
|
||||
{
|
||||
NVIC_EnableIRQ(irqn);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ָ<><D6B8><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> irqn ָ<><D6B8><EFBFBD>жϺ<D0B6> <20>ɲ鿴 isr.c <20><>Ӧ<EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>ע
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> interrupt_disable(UART1_IRQn);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void interrupt_disable (IRQn_Type irqn)
|
||||
{
|
||||
NVIC_DisableIRQ(irqn);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ָ<><D6B8><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> irqn ָ<><D6B8><EFBFBD>жϺ<D0B6> <20>ɲ鿴 isr.c <20><>Ӧ<EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>ע
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> priority bit7-bit5Ϊ<35><CEAA>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>bit4-bit0Ϊ<30><CEAA><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>ֵԽ<D6B5><D4BD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>Խ<EFBFBD><D4BD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> interrupt_enable(UART1_IRQn, (1<<5) | 2);
|
||||
// <20><>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ1,<2C><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ2
|
||||
// <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>ch32v30x_misc<73><63><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void interrupt_set_priority (IRQn_Type irqn, uint8 priority)
|
||||
{
|
||||
NVIC_SetPriority(irqn, priority);
|
||||
}
|
||||
|
||||
////-------------------------------------------------------------------------------------------------------------------
|
||||
//// @brief <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC> clock_init <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
//// @param void
|
||||
//// @return void
|
||||
//// Sample usage: interrupt_init();
|
||||
////-------------------------------------------------------------------------------------------------------------------
|
||||
//void interrupt_init (void)
|
||||
//{
|
||||
// NVIC_PriorityGroupConfig(4);
|
||||
//
|
||||
//}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȫ<><C8AB><EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void <20><>ԭ<EFBFBD><D4AD>Ƕ<EFBFBD>ײ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0 <20><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> interrupt_global_enable();
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void interrupt_global_enable (uint32 primask)
|
||||
{
|
||||
if(primask)
|
||||
{
|
||||
interrupt_nest_count --;
|
||||
}
|
||||
if(!interrupt_nest_count)
|
||||
{
|
||||
__enable_irq();
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȫ<><C8AB><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> interrupt_disable_all();
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint32 interrupt_global_disable (void)
|
||||
{
|
||||
|
||||
if(!interrupt_nest_count)
|
||||
{
|
||||
__disable_irq();
|
||||
}
|
||||
interrupt_nest_count ++;
|
||||
return interrupt_nest_count;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>жϳ<D0B6>ʼ<EFBFBD><CABC>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> interrupt_init();
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD> clock_init <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void interrupt_init (void)
|
||||
{
|
||||
interrupt_global_enable(0); //ʹ<><CAB9>ȫ<EFBFBD><C8AB><EFBFBD>ж<EFBFBD>
|
||||
}
|
||||
51
libraries/zf_common/zf_common_interrupt.h
Normal file
51
libraries/zf_common/zf_common_interrupt.h
Normal file
@@ -0,0 +1,51 @@
|
||||
/*********************************************************************************************************************
|
||||
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD>⣩<EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
|
||||
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
|
||||
*
|
||||
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
*
|
||||
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᷢ<EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD>棨<EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><DEB8><EFBFBD>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
|
||||
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
|
||||
*
|
||||
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_common_interrupt
|
||||
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* <20>汾<EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
|
||||
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
|
||||
*
|
||||
* <20>ļ<DEB8>¼
|
||||
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
|
||||
* 2022-09-15 <20><>W first version
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _zf_nvic_h
|
||||
#define _zf_nvic_h
|
||||
|
||||
#include "ch32v30x.h"
|
||||
#include "zf_common_typedef.h"
|
||||
|
||||
|
||||
|
||||
void interrupt_init (void);
|
||||
void interrupt_global_enable (uint32 primask);
|
||||
uint32 interrupt_global_disable (void);
|
||||
void interrupt_enable (IRQn_Type irqn);
|
||||
void interrupt_disable (IRQn_Type irqn);
|
||||
void interrupt_set_priority (IRQn_Type irqn, uint8 priority);
|
||||
|
||||
#endif
|
||||
82
libraries/zf_common/zf_common_typedef.h
Normal file
82
libraries/zf_common/zf_common_typedef.h
Normal file
@@ -0,0 +1,82 @@
|
||||
/*********************************************************************************************************************
|
||||
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD>⣩<EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
|
||||
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
|
||||
*
|
||||
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
*
|
||||
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᷢ<EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD>棨<EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><DEB8><EFBFBD>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
|
||||
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
|
||||
*
|
||||
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_common_typedef
|
||||
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* <20>汾<EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
|
||||
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
|
||||
*
|
||||
* <20>ļ<DEB8>¼
|
||||
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
|
||||
* 2022-09-15 <20><>W first version
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _zf_common_typedef_h_
|
||||
#define _zf_common_typedef_h_
|
||||
|
||||
#include "stdio.h"
|
||||
#include "stdint.h"
|
||||
#include "stdbool.h"
|
||||
#include "stdarg.h"
|
||||
#include "string.h"
|
||||
#include "stdlib.h"
|
||||
|
||||
//=================================================== <20><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD> ===================================================
|
||||
|
||||
//#define COMPATIBLE_WITH_OLDER_VERSIONS // <20><><EFBFBD>ݾɰ濪Դ<E6BFAA><D4B4><EFBFBD>ӿ<EFBFBD>
|
||||
#define USE_ZF_TYPEDEF (1) // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#if USE_ZF_TYPEDEF
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> stdint.h <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բü<D4B2>
|
||||
typedef unsigned char uint8; // <20><EFBFBD><DEB7><EFBFBD> 8 bits
|
||||
typedef unsigned short int uint16; // <20><EFBFBD><DEB7><EFBFBD> 16 bits
|
||||
typedef unsigned int uint32; // <20><EFBFBD><DEB7><EFBFBD> 32 bits
|
||||
typedef unsigned long long uint64; // <20><EFBFBD><DEB7><EFBFBD> 64 bits
|
||||
|
||||
typedef signed char int8; // <20>з<EFBFBD><D0B7><EFBFBD> 8 bits
|
||||
typedef signed short int int16; // <20>з<EFBFBD><D0B7><EFBFBD> 16 bits
|
||||
typedef signed int int32; // <20>з<EFBFBD><D0B7><EFBFBD> 32 bits
|
||||
typedef signed long long int64; // <20>з<EFBFBD><D0B7><EFBFBD> 64 bits
|
||||
|
||||
typedef volatile uint8 vuint8; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEB7><EFBFBD> 8 bits
|
||||
typedef volatile uint16 vuint16; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEB7><EFBFBD> 16 bits
|
||||
typedef volatile uint32 vuint32; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEB7><EFBFBD> 32 bits
|
||||
typedef volatile uint64 vuint64; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEB7><EFBFBD> 64 bits
|
||||
|
||||
typedef volatile int8 vint8; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>з<EFBFBD><D0B7><EFBFBD> 8 bits
|
||||
typedef volatile int16 vint16; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>з<EFBFBD><D0B7><EFBFBD> 16 bits
|
||||
typedef volatile int32 vint32; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>з<EFBFBD><D0B7><EFBFBD> 32 bits
|
||||
typedef volatile int64 vint64; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>з<EFBFBD><D0B7><EFBFBD> 64 bits
|
||||
|
||||
#define ZF_ENABLE (1)
|
||||
#define ZF_DISABLE (0)
|
||||
|
||||
#define ZF_TRUE (1)
|
||||
#define ZF_FALSE (0)
|
||||
#endif
|
||||
|
||||
//=================================================== <20><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD> ===================================================
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user