關(guān)于STM32空閑中斷

有一次做一個(gè)東西,為了盡量不占用CPU的處理數(shù)據(jù)時(shí)間,所以就使用DMA接收串口的數(shù)據(jù),但是呢問題來了.,,,,,怎么樣才能確定接收到了一條完整的數(shù)據(jù)了,,我們都知道只要打開DMA

那家伙就不停的把接收的數(shù)據(jù)放到我們指定的地方.

只要接收到一條完整的數(shù)據(jù)我就該去處理了

關(guān)于空閑中斷,,,就是說每接收到一條完整的數(shù)據(jù)就會置位空閑標(biāo)志位,我們只需要判斷空閑標(biāo)志位是否置一,,就能知道是不是接收到了一條完整的數(shù)據(jù)

用空閑中斷的好處就是,,對于以前我寫程序通信都會在數(shù)據(jù)的后面加上尾,,然后另一個(gè)接收的單片機(jī)通過判斷數(shù)據(jù)的尾來確定是不是一條完整的數(shù)據(jù),,,有了空閑中斷就不需要在給數(shù)據(jù)加上尾了,,,,,

直接程序吧

u8? Usart1_RX_Cop[1024]={0};//串口2備用接收緩沖,最大 1024 個(gè)字節(jié).u8? Usart1_RX_BUF[1024]={0};//串口1接收緩沖,最大 1024 個(gè)字節(jié).u16 Usart1_REC_Cnt =0;//串口1接收的數(shù)據(jù)個(gè)數(shù)u16 Usart1_Current_Cnt =0;//串口1當(dāng)前接收的數(shù)據(jù)個(gè)數(shù)u16 Usart1_Current_cnt =0;//串口1當(dāng)前接收的數(shù)據(jù)個(gè)數(shù)u8? Usart1_AT_flage =0;//串口1接收完成標(biāo)志位u8? Usart2_RX_Cop[1024]={0};//串口2備用接收緩沖,最大 1024 個(gè)字節(jié).u8? Usart2_RX_BUF[1024]={0};//串口2接收緩沖,最大 1024 個(gè)字節(jié).u16 Usart2_REC_Cnt =0;//串口2接收的數(shù)據(jù)個(gè)數(shù)u16 Usart2_Current_Cnt =0;//串口2當(dāng)前接收的數(shù)據(jù)個(gè)數(shù)u16 Usart2_Current_cnt =0;//串口2當(dāng)前接收的數(shù)據(jù)個(gè)數(shù)u8? Usart2_AT_flage =0;//串口2接收完成標(biāo)志位u8? Usart3_RX_BUF[1024]={0};//串口3接收緩沖,最大 1024 個(gè)字節(jié).u16 Usart3_REC_Cnt =0;//串口3接收的數(shù)據(jù)個(gè)數(shù)u8? Usart3_AT_flage =0;//串口3接收完成標(biāo)志位u8 Free_Read_Rst=0;//讀DR清除空閑中斷

voidUSART123_Init(uint32_t bound_1,uint32_t bound_2,uint32_t bound_3)

{

USART_InitTypeDef USART_InitStructure;

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2|RCC_APB1Periph_USART3, ENABLE);//使能USART2,USART3時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_USART1|RCC_APB2Periph_AFIO , ENABLE);//USART1_TX? PA9GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;;

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);//USART1_RX? PA10GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING ;

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;

GPIO_Init(GPIOA,&GPIO_InitStructure);//USART2_TX? GPIOA.2GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//PA.2GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF_PP;//復(fù)用推挽輸出GPIO_Init(GPIOA, &GPIO_InitStructure);//USART2_RX? ? ? GPIOA.3初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA3GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入GPIO_Init(GPIOA, &GPIO_InitStructure);//USART3_TX? GPIOB.10GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PB10GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF_PP;//復(fù)用推挽輸出GPIO_Init(GPIOB, &GPIO_InitStructure);//USART3_RX? ? ? GPIOB.11初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//PB11GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入GPIO_Init(GPIOB, &GPIO_InitStructure);

USART_InitStructure.USART_BaudRate=bound_1;

USART_InitStructure.USART_WordLength=USART_WordLength_8b;

USART_InitStructure.USART_StopBits=USART_StopBits_1;

USART_InitStructure.USART_Parity=USART_Parity_No ;

USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode= USART_Mode_Rx |USART_Mode_Tx;

USART_Init(USART1,&USART_InitStructure);

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//開啟串口接受中斷USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//開啟串口接受中斷USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//開啟串口接受中斷USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);//開啟串口1總線空閑中斷USART_ITConfig(USART2, USART_IT_IDLE, ENABLE);//開啟串口2總線空閑中斷USART_InitStructure.USART_BaudRate=bound_2;

USART_Init(USART2,&USART_InitStructure);

USART_InitStructure.USART_BaudRate=bound_3;

USART_Init(USART3,&USART_InitStructure);

USART_Cmd(USART1, ENABLE);

USART_Cmd(USART2, ENABLE);

USART_Cmd(USART3, ENABLE);

}

/********************串口 1 中斷服務(wù)程序**********************/voidUSART1_IRQHandler(void)

{if(USART_GetITStatus(USART1, USART_IT_RXNE) !=RESET) //正常情況下進(jìn)入這個(gè)接收

{

USART_ClearITPendingBit(USART1, USART_FLAG_ORE);

USART_ClearITPendingBit(USART1,USART_IT_ORE);//清除中斷標(biāo)志Usart1_RX_BUF[Usart1_REC_Cnt] =USART_ReceiveData(USART1);//讀取接收到的數(shù)據(jù)Usart1_REC_Cnt++;

}elseif(USART_GetITStatus(USART1,USART_IT_IDLE) ==SET)//傳輸完一條完整的數(shù)據(jù)就會進(jìn)入這個(gè)

{

Free_Read_Rst= USART1->DR;//清USART_IT_IDLE標(biāo)志Usart1_AT_flage =1;//接收到一條完整的數(shù)據(jù)Usart1_Current_Cnt = Usart1_REC_Cnt;//復(fù)制接收到的數(shù)據(jù)個(gè)數(shù)Usart1_REC_Cnt =0;//清零接收的個(gè)數(shù)}

}

主函數(shù)循環(huán)里只需要......

先說一點(diǎn):單片機(jī)的串口可以接收任意波特率的數(shù)據(jù),你所寫的9600意思是以這個(gè)波特率發(fā)送....

其實(shí)昨天才發(fā)現(xiàn)這家伙真的太準(zhǔn)確了,,準(zhǔn)確到如果碰見通信中速率如果不是設(shè)置的波特率,就是說通信的速率慢了不是(我上面設(shè)置的波特率是9600)1/9600(S)發(fā)過來一位數(shù)據(jù)了,低于了這個(gè)值假設(shè)是2400吧!接受到一位數(shù)據(jù)后如果1/9600(s)后沒有接收到數(shù)據(jù),那么這家伙也會進(jìn)空閑中斷.......因?yàn)槟闶窃O(shè)置的9600,,,,那么在1/9600(s)后理應(yīng)接收到下一位數(shù)據(jù)....而其實(shí)是在1/2400(S)后才會接收到另一位數(shù)據(jù).....如果能把空閑中斷的檢測時(shí)間降到滿足的要求就好了....

所以嘛,,,,,自己寫個(gè)別這么苛刻的,昨天寫好了,不過呢今天主要是把自己遇到的問題說一下

其實(shí)思路都知道

串口接收的時(shí)候打開一個(gè)定時(shí)器,并且只要接收到數(shù)據(jù)就清零一個(gè)變量,這個(gè)變量是在定時(shí)器里面執(zhí)行自加一操作,,

如果串口一段時(shí)間(空閑中斷的檢測時(shí)間)不接收數(shù)據(jù)了這個(gè)變量就能自加到我們設(shè)置的數(shù),然后關(guān)掉定時(shí)器,置位接收完成標(biāo)志位,...

直接上程序

/********************串口 1 中斷服務(wù)程序**********************/voidUSART1_IRQHandler(void)

{if(USART_GetITStatus(USART1, USART_IT_RXNE) !=RESET)

{

USART_ClearITPendingBit(USART1, USART_FLAG_ORE);

USART_ClearITPendingBit(USART1,USART_IT_ORE);//清除中斷標(biāo)志Usart1_RX_BUF[Usart1_REC_Cnt] =USART_ReceiveData(USART1);//讀取接收到的數(shù)據(jù)Usart1_REC_Cnt++;

TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE );//打開定時(shí)器開始計(jì)時(shí)Time2_cnt =0;//清零計(jì)數(shù)}

}

voidtimer_config(void)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);/*Resets the TIM2*/TIM_DeInit(TIM2);//設(shè)置了時(shí)鐘分割。TIM_TimeBaseStructure.TIM_ClockDivision =0;//選擇了計(jì)數(shù)器模式。TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up;//初值TIM_TimeBaseStructure.TIM_Period =10;//定時(shí)時(shí)間1ms進(jìn)一次//設(shè)置了用來作為 TIMx 時(shí)鐘頻率除數(shù)的預(yù)分頻值。72M / 7099+1 = 0.01MTIM_TimeBaseStructure.TIM_Prescaler =7199;//TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

TIM_ClearITPendingBit(TIM2, TIM_IT_Update);/*Enables the TIM2 counter*/TIM_Cmd(TIM2, ENABLE);/*Enables the TIM2 Capture Compare channel 1 Interrupt source*/TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE );

}

voidTIM2_IRQHandler(void)

{if(TIM_GetITStatus(TIM2, TIM_IT_Update) ==SET)

{

TIM_ClearITPendingBit(TIM2, TIM_IT_Update);if(Time2_cnt<100)//防止累加循環(huán)過去

{

Time2_cnt++;

}if(Time2_cnt>3)//空閑時(shí)間大于約3毫秒

{

TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE );//關(guān)閉定時(shí)器---注意千萬不要放到主函數(shù)里面關(guān),,,,大家可以試一試會出現(xiàn)什么問題.....Usart1_AT_flage =1;//接收完成標(biāo)志位置一

Usart1_Current_Cnt=Usart1_REC_Cnt;//賦值接收的數(shù)據(jù)個(gè)數(shù)

Usart1_REC_Cnt=0;//清零接收的數(shù)據(jù)個(gè)數(shù)? ? ? }

}

然后昨天又寫了一個(gè)兩個(gè)串口的,因?yàn)橛昧藘蓚€(gè)串口做數(shù)據(jù)轉(zhuǎn)換(用的串口1和串口3),,,,其實(shí)其中一個(gè)也可以用空閑中斷,,但是擔(dān)心數(shù)據(jù)傳輸過程中萬一速率有所變化,,,,,,,,完蛋啦

uint8_t? Usart1_TimeFlage =0;//串口1空閑變量允許累加標(biāo)志uint16_t Usart1_IdealTime =0;//串口1空閑累加變量uint8_t? Usart3_TimeFlage =0;//串口3空閑變量允許累加標(biāo)志uint16_t Usart3_IdealTime =0;//串口3空閑累加變量u8? Usart1_RX_Cop[1024]={0};//串口2備用接收緩沖,最大 1024 個(gè)字節(jié).u8? Usart1_RX_BUF[1024]={0};//串口1接收緩沖,最大 1024 個(gè)字節(jié).u16 Usart1_REC_Cnt =0;//串口1接收的數(shù)據(jù)個(gè)數(shù)u16 Usart1_Current_Cnt =0;//串口2當(dāng)前接收的數(shù)據(jù)個(gè)數(shù)u16 Usart1_Current_cnt =0;//串口2當(dāng)前接收的數(shù)據(jù)個(gè)數(shù)u8? Usart1_AT_flage =0;//串口1接收完成標(biāo)志位u8? Usart2_RX_Cop[1024]={0};//串口2備用接收緩沖,最大 1024 個(gè)字節(jié).u8? Usart2_RX_BUF[1024]={0};//串口2接收緩沖,最大 1024 個(gè)字節(jié).u16 Usart2_REC_Cnt =0;//串口2接收的數(shù)據(jù)個(gè)數(shù)u16 Usart2_Current_Cnt =0;//串口2當(dāng)前接收的數(shù)據(jù)個(gè)數(shù)u16 Usart2_Current_cnt =0;//串口2當(dāng)前接收的數(shù)據(jù)個(gè)數(shù)u8? Usart2_AT_flage =0;//串口2接收完成標(biāo)志位u8? Usart3_RX_Cop[1024]={0};//串口2備用接收緩沖,最大 1024 個(gè)字節(jié).u8? Usart3_RX_BUF[1024]={0};//串口2接收緩沖,最大 1024 個(gè)字節(jié).u16 Usart3_REC_Cnt =0;//串口2接收的數(shù)據(jù)個(gè)數(shù)u16 Usart3_Current_Cnt =0;//串口2當(dāng)前接收的數(shù)據(jù)個(gè)數(shù)u16 Usart3_Current_cnt =0;//串口2當(dāng)前接收的數(shù)據(jù)個(gè)數(shù)u8? Usart3_AT_flage =0;//串口2接收完成標(biāo)志位

voidtimer3_config(void)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);/*Resets the TIM2*/TIM_DeInit(TIM3);//設(shè)置了時(shí)鐘分割沮焕。TIM_TimeBaseStructure.TIM_ClockDivision =0;//選擇了計(jì)數(shù)器模式吨岭。TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up;//初值TIM_TimeBaseStructure.TIM_Period =10;//定時(shí)時(shí)間1Ms進(jìn)一次//設(shè)置了用來作為 TIMx 時(shí)鐘頻率除數(shù)的預(yù)分頻值拉宗。72M / 7099+1 = 0.01MTIM_TimeBaseStructure.TIM_Prescaler =7199;//TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);

TIM_ClearITPendingBit(TIM3, TIM_IT_Update);/*Enables the TIM2 counter*/TIM_Cmd(TIM3, ENABLE);/*Enables the TIM2 Capture Compare channel 1 Interrupt source*/TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE );

}

voidTIM3_IRQHandler(void)

{if(TIM_GetITStatus(TIM3, TIM_IT_Update) ==SET)

{

TIM_ClearITPendingBit(TIM3, TIM_IT_Update);if(Usart1_TimeFlage ==1)//開始累加空閑變量{if(Usart1_IdealTime<400)//防止累加過去,造成循環(huán){

Usart1_IdealTime++;//空閑變量累加}

}if(Usart1_IdealTime>=100)//調(diào)節(jié)這個(gè)值以適應(yīng)不同的接收速率{

Usart1_TimeFlage=0;//停止空閑變量累加Usart1_IdealTime =0;//清零空閑累加變量Usart1_AT_flage =1;//接收標(biāo)志位置一Usart1_Current_Cnt = Usart1_REC_Cnt;//拷貝接收的數(shù)據(jù)個(gè)數(shù)Usart1_REC_Cnt =0;//清零接收的數(shù)據(jù)個(gè)數(shù)}if(Usart3_TimeFlage ==1)//開始累加空閑變量{if(Usart3_IdealTime<400)//防止累加過去,造成循環(huán){

Usart3_IdealTime++;//空閑變量累加}

}if(Usart3_IdealTime>=100)//調(diào)節(jié)這個(gè)值以適應(yīng)不停的接收速率{

Usart3_TimeFlage=0;//停止空閑變量累加Usart3_IdealTime =0;//清零空閑累加變量Usart3_AT_flage =1;//接收標(biāo)志位置一Usart3_Current_Cnt = Usart3_REC_Cnt;//拷貝接收的數(shù)據(jù)個(gè)數(shù)Usart3_REC_Cnt =0;//清零接收的數(shù)據(jù)個(gè)數(shù)}

}

}

那么主循環(huán)里---具體的處理函數(shù),改為自己的就行

源碼,,這個(gè)是用的板子的空閑中斷,,,,板子的其余文件刪掉便可,,,,

鏈接:http://pan.baidu.com/s/1c228q6c密碼:pl3k

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末峦树,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子旦事,更是在濱河造成了極大的恐慌魁巩,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姐浮,死亡現(xiàn)場離奇詭異谷遂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)卖鲤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門肾扰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蛋逾,你說我怎么就攤上這事集晚。” “怎么了区匣?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵偷拔,是天一觀的道長。 經(jīng)常有香客問我亏钩,道長莲绰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任姑丑,我火速辦了婚禮蛤签,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘栅哀。我一直安慰自己震肮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布昌屉。 她就那樣靜靜地躺著钙蒙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪间驮。 梳的紋絲不亂的頭發(fā)上躬厌,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼扛施。 笑死鸿捧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的疙渣。 我是一名探鬼主播匙奴,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼妄荔!你這毒婦竟也來了泼菌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤啦租,失蹤者是張志新(化名)和其女友劉穎哗伯,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篷角,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡焊刹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了恳蹲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虐块。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嘉蕾,靈堂內(nèi)的尸體忽然破棺而出贺奠,到底是詐尸還是另有隱情,我是刑警寧澤荆针,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布敞嗡,位于F島的核電站,受9級特大地震影響航背,放射性物質(zhì)發(fā)生泄漏喉悴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一玖媚、第九天 我趴在偏房一處隱蔽的房頂上張望箕肃。 院中可真熱鬧,春花似錦今魔、人聲如沸勺像。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吟宦。三九已至,卻和暖如春涩维,著一層夾襖步出監(jiān)牢的瞬間殃姓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜗侈,地道東北人篷牌。 一個(gè)月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像踏幻,于是被迫代替她去往敵國和親枷颊。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一该面、背景 最近做一個(gè)項(xiàng)目夭苗,需要用STM32F407來做7路串口通信,由于芯片最多只有6路吆倦,所以只能用IO口來模擬...
    Andme_6444閱讀 2,766評論 0 0
  • 轉(zhuǎn)眼間天亮了...... 然后就想起了一個(gè)朋友QQ的個(gè)性簽名:年輕人總是要為一些自己認(rèn)為有意義的事情而廢寢忘食,通...
    楊奉武閱讀 10,737評論 0 4
  • 整體思路ESP8266作為TCP服務(wù)器,,手機(jī)作為TCP客戶端,自己使用Lua直接做到了芯片里面,省了單片機(jī),,節(jié)...
    楊奉武閱讀 5,844評論 0 5
  • 也許你并沒有聽說過 Realm 听诸,這是一個(gè)面向安卓(亦面向iOS)的移動端數(shù)據(jù)庫技術(shù)。和SQLite不同蚕泽,它允許你...
    goolong閱讀 1,139評論 2 1
  • 學(xué)習(xí)“六項(xiàng)精進(jìn)”半年了,六項(xiàng)精進(jìn)桥嗤,看似簡單须妻,每一項(xiàng)都和我們?nèi)粘9ぷ魃罹o密聯(lián)系在一起泛领,并沒有多少高深的道理...
    徐紹剛閱讀 127評論 0 0