331 lines
9.0 KiB
C
331 lines
9.0 KiB
C
|
/**
|
|||
|
******************************************************************************
|
|||
|
* @file
|
|||
|
* @author
|
|||
|
* @version
|
|||
|
* @date
|
|||
|
* @brief
|
|||
|
* @function List:
|
|||
|
******************************************************************************
|
|||
|
* @attention
|
|||
|
*
|
|||
|
*
|
|||
|
* <h2><center>© COPYRIGHT 2021 </center></h2>
|
|||
|
******************************************************************************
|
|||
|
* @History:
|
|||
|
* @Author:
|
|||
|
* @Data:
|
|||
|
* @Version:
|
|||
|
*/
|
|||
|
|
|||
|
#include "queue_entity.h"
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* @brief
|
|||
|
* @param input:
|
|||
|
* @param output:
|
|||
|
* @return none:
|
|||
|
* @calls
|
|||
|
* @calls by
|
|||
|
* @others
|
|||
|
*/
|
|||
|
#ifdef TEST_MODEL_QUEUE
|
|||
|
|
|||
|
|
|||
|
#define MAX_QUEUE_QSIZE 8u
|
|||
|
|
|||
|
typedef u32 queue_data_elem;
|
|||
|
|
|||
|
static sequential_queue_s Q1 ;
|
|||
|
static queue_data_elem Q1buf[MAX_QUEUE_QSIZE]; /* 隊列 */
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
QUEUE_RIGHT_FLAG_E empty;
|
|||
|
u16 length;
|
|||
|
queue_data_elem value;
|
|||
|
}queue_test_s;
|
|||
|
|
|||
|
static queue_test_s queue_test = {QUEUE_FALSE,0u,0u } ;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/*考虙到測試代碼中都包含11.4 條 批量過虙*/
|
|||
|
/*PCLINT_ERROS_928*/ /*lint -e928 */ /* 928 11.4(建議): 不應在某類型對像指針和其他不同類型對像指針之間進行強制轉換。*/
|
|||
|
/*考虙到測試代碼中都包含 該無返回值的過虙 批量過虙*/
|
|||
|
/*PCLINT_ERROS*/ /*lint -e534 */ /*忽略該函數的返回結果*/
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 若隊列不空,則刪除Q中的某一個元素
|
|||
|
* @param input: seq : 順序隊列;i表示元素地址; fdo 刪除的方法
|
|||
|
* @param output: element: 將頭元素數據傳給外部的變量;
|
|||
|
* @return 是否操作成功
|
|||
|
* @calls
|
|||
|
* @calls by
|
|||
|
* @others
|
|||
|
*/
|
|||
|
void queue_test_task(void)
|
|||
|
{
|
|||
|
|
|||
|
u16 i,j;
|
|||
|
u16 start,end ;
|
|||
|
queue_data_elem l_value;
|
|||
|
|
|||
|
/*PCLINT_ERROS_928*/ /*lint --e(928) */ /* 928 11.4(建議): 不應在某類型對像指針和其他不同類型對像指針之間進行強制轉換。*/
|
|||
|
/*PCLINT_ERROS_960*/ /*lint --e(960) */ /*表達式是函數參數 不能強制隱制轉換*/
|
|||
|
queue_init(&Q1,(sequential_queue_elem*)&Q1buf[0],MAX_QUEUE_QSIZE,sizeof(queue_data_elem));
|
|||
|
|
|||
|
queue_test.empty = queue_get_empty(Q1); /* 初始化隊列 */
|
|||
|
|
|||
|
if(queue_test.empty == QUEUE_TRUE)
|
|||
|
{
|
|||
|
|
|||
|
#if 0
|
|||
|
|
|||
|
queue_add_element(&Q1,0xa1);
|
|||
|
queue_add_element(&Q1,0xa2);
|
|||
|
queue_add_element(&Q1,0xa3);
|
|||
|
queue_add_element(&Q1,0xa4);
|
|||
|
queue_add_element(&Q1,0xa5);
|
|||
|
|
|||
|
length = queue_get_length(Q1);
|
|||
|
|
|||
|
queue_del_element(&Q1,&queue_test.value);
|
|||
|
length = queue_get_length(Q1);
|
|||
|
queue_del_element(&Q1,&queue_test.value);
|
|||
|
length = queue_get_length(Q1);
|
|||
|
queue_del_element(&Q1,&queue_test.value);
|
|||
|
length = queue_get_length(Q1);
|
|||
|
queue_del_element(&Q1,&queue_test.value);
|
|||
|
length = queue_get_length(Q1);
|
|||
|
|
|||
|
queue_add_element(&Q1,0xb1);
|
|||
|
queue_add_element(&Q1,0xb2);
|
|||
|
queue_add_element(&Q1,0xb3);
|
|||
|
queue_add_element(&Q1,0xb4);
|
|||
|
queue_add_element(&Q1,0xb5);
|
|||
|
|
|||
|
length = queue_get_length(Q1);
|
|||
|
|
|||
|
queue_del_element(&Q1,&queue_test.value);
|
|||
|
length = queue_get_length(Q1);
|
|||
|
queue_del_element(&Q1,&queue_test.value);
|
|||
|
length = queue_get_length(Q1);
|
|||
|
queue_del_element(&Q1,&queue_test.value);
|
|||
|
length = queue_get_length(Q1);
|
|||
|
|
|||
|
queue_add_element(&Q1,0xc1);
|
|||
|
queue_add_element(&Q1,0xc2);
|
|||
|
queue_add_element(&Q1,0xc3);
|
|||
|
queue_add_element(&Q1,0xc4);
|
|||
|
queue_add_element(&Q1,0xc5);
|
|||
|
|
|||
|
queue_del_element(&Q1,&queue_test.value);
|
|||
|
length = queue_get_length(Q1);
|
|||
|
|
|||
|
|
|||
|
for(i=0;i<(MAX_QUEUE_QSIZE+5);i++)
|
|||
|
{
|
|||
|
queue_add_element(&Q1,0xa1 + i);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
for(i=Q1.front;i<Q1.rear;i++)
|
|||
|
{
|
|||
|
if( Q1.base[i%MAX_QUEUE_QSIZE] != 0)
|
|||
|
queue_del_element(&Q1,&queue_test.value);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
length = queue_get_length(Q1);
|
|||
|
|
|||
|
queue_add_element(&Q1,0xa1);
|
|||
|
queue_add_element(&Q1,0xa1);
|
|||
|
queue_add_element(&Q1,0xa1);
|
|||
|
queue_add_element(&Q1,0xa1);
|
|||
|
|
|||
|
queue_del_element(&Q1,&queue_test.value);
|
|||
|
queue_del_element(&Q1,&queue_test.value);
|
|||
|
queue_del_element(&Q1,&queue_test.value);
|
|||
|
queue_del_element(&Q1,&queue_test.value);
|
|||
|
|
|||
|
|
|||
|
queue_add_element(&Q1,0xa1);
|
|||
|
queue_add_element(&Q1,0xa1);
|
|||
|
queue_add_element(&Q1,0xa1);
|
|||
|
queue_add_element(&Q1,0xa1);
|
|||
|
queue_add_element(&Q1,0xa1);
|
|||
|
queue_add_element(&Q1,0xa1);
|
|||
|
queue_add_element(&Q1,0xa1);
|
|||
|
queue_add_element(&Q1,0xa1);
|
|||
|
|
|||
|
|
|||
|
length = queue_get_length(Q1);
|
|||
|
if( length == 0u)
|
|||
|
{
|
|||
|
queue_add_element(&Q1,0xa1);
|
|||
|
}
|
|||
|
|
|||
|
queue_del_element(&Q1,&queue_test.value);
|
|||
|
queue_del_element(&Q1,&queue_test.value);
|
|||
|
|
|||
|
#else
|
|||
|
|
|||
|
l_value = 0xa1u;
|
|||
|
/*PCLINT_ERROS_928*/ /*lint --e(928) */ /* 928 11.4(建議): 不應在某類型對像指針和其他不同類型對像指針之間進行強制轉換。*/
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
|
|||
|
l_value++;
|
|||
|
/*PCLINT_ERROS_928*/ /*lint --e(928) */ /* 928 11.4(建議): 不應在某類型對像指針和其他不同類型對像指針之間進行強制轉換。*/
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
|
|||
|
l_value++;
|
|||
|
/*PCLINT_ERROS_928*/ /*lint --e(928) */ /* 928 11.4(建議): 不應在某類型對像指針和其他不同類型對像指針之間進行強制轉換。*/
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
|
|||
|
l_value++;
|
|||
|
/*PCLINT_ERROS_928*/ /*lint --e(928) */ /* 928 11.4(建議): 不應在某類型對像指針和其他不同類型對像指針之間進行強制轉換。*/
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
|
|||
|
queue_test.length = queue_get_length(Q1);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
queue_test.length = queue_get_length(Q1);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
queue_test.length = queue_get_length(Q1);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
queue_test.length = queue_get_length(Q1);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
queue_test.length = queue_get_length(Q1);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
queue_test.length = queue_get_length(Q1);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
queue_test.length = queue_get_length(Q1);
|
|||
|
|
|||
|
|
|||
|
/*PCLINT_ERROS_928*/ /*lint --e(928) */ /* 928 11.4(建議): 不應在某類型對像指針和其他不同類型對像指針之間進行強制轉換。*/
|
|||
|
queue_del_one_element(&Q1,0u,(sequential_queue_elem*)&queue_test.value);
|
|||
|
queue_del_one_element(&Q1,1u,(sequential_queue_elem*)&queue_test.value);
|
|||
|
/*PCLINT_ERROS_928*/ /*lint --e(928) */ /* 928 11.4(建議): 不應在某類型對像指針和其他不同類型對像指針之間進行強制轉換。*/
|
|||
|
queue_del_one_element(&Q1,3u,(sequential_queue_elem*)&queue_test.value);
|
|||
|
|
|||
|
queue_test.length = queue_get_length(Q1);
|
|||
|
|
|||
|
l_value = 0xa1u;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
|
|||
|
queue_test.length = queue_get_length(Q1);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
queue_test.length = queue_get_length(Q1);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
queue_test.length = queue_get_length(Q1);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
queue_test.length = queue_get_length(Q1);
|
|||
|
|
|||
|
/* queue_del_one_element(&Q1,5,&queue_test.value); */
|
|||
|
|
|||
|
queue_test.value = 9u;
|
|||
|
queue_del_element(&Q1,(sequential_queue_elem*)&queue_test.value);
|
|||
|
|
|||
|
queue_del_element(&Q1,(sequential_queue_elem*)&queue_test.value);
|
|||
|
|
|||
|
queue_del_element(&Q1,(sequential_queue_elem*)&queue_test.value);
|
|||
|
|
|||
|
queue_del_element(&Q1,(sequential_queue_elem*)&queue_test.value);
|
|||
|
|
|||
|
l_value = 0xa1u;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
|
|||
|
queue_test.length = queue_get_length(Q1);
|
|||
|
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
|
|||
|
|
|||
|
start = Q1.front;
|
|||
|
|
|||
|
end = start + queue_get_length(Q1);
|
|||
|
|
|||
|
#if 1
|
|||
|
for(i=start;i<end;i++)
|
|||
|
#else
|
|||
|
//for(i=Q1.front;i<(Q1.front + QueueLength(Q1));i++)
|
|||
|
#endif
|
|||
|
{
|
|||
|
j = i%Q1.length;
|
|||
|
if( Q1buf[j] != 0u)
|
|||
|
{
|
|||
|
queue_del_one_element(&Q1,j,(sequential_queue_elem*)&queue_test.value);
|
|||
|
queue_test.length = queue_get_length(Q1);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
l_value = 0xa1u;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
l_value++;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
|
|||
|
queue_test.length = queue_get_length(Q1);
|
|||
|
queue_del_element(&Q1,(sequential_queue_elem*)&queue_test.value);
|
|||
|
queue_del_element(&Q1,(sequential_queue_elem*)&queue_test.value);
|
|||
|
|
|||
|
if( queue_test.length == 0u)
|
|||
|
{
|
|||
|
l_value = 0xa1u;
|
|||
|
queue_add_element(&Q1,(sequential_queue_elem*)&l_value);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|