Cstyle的札记,Freertos内核详解,第3篇

<span style="white-space:pre">	</span>RTOS里面最常见的以及最核心的数据结构,队列的实现。可在VS2008 下编译测试。

/** @file

	Copyright (c) 2008 - 2014, MX.Studio 

	All rights reserved. 

	Created by Cstyle
**/
#ifndef _QUEUE_H_
#define _QUEUE_H_

#ifdef __cplusplus
extern "C" {
#endif

#include "Syslib.h"

#define Cfg_QUE_LEN 20

typedef struct
{
    UINT8 Data[Cfg_QUE_LEN];
    UINT8 pHead;
    UINT8 pTail;
    UINT16 size;
}Queue_t;

Queue_t * Queue_Creat();
UINT8 Queue_IsEmpty(Queue_t * const q);
UINT8 Queue_IsFull(Queue_t * const q);
UINT8 Queue_Push(Queue_t * const q,UINT8 const * const Dat);
UINT8 Queue_Pop(Queue_t * const q,UINT8 * const Dat);
UINT16 Queue_GetSize(Queue_t *const q);
void Queue_Test();

#ifdef __cplusplus
}
#endif
#endif




<pre name="code" class="cpp">/** @file

	Copyright (c) 2008 - 2014, MX.Studio 

	All rights reserved. 

	Created by Cstyle
**/
#include "Queue.h"

Queue_t * Queue_Creat()
{
    Queue_t *p;
    p=malloc(sizeof(Queue_t));
    if(0!=p)
    {
        p->pHead=0;
        p->pTail=0;
        p->size=0;

        return p;
    }
    else return 0;
}

UINT8 Queue_IsEmpty(Queue_t * const q)
{
    if(!q->size) return 1;
    else return 0;
}

UINT8 Queue_IsFull(Queue_t * const q)
{
    if((q->size!=0)&&(q->pHead ==q->pTail)) return 1;//full
    else return 0;
}

UINT8 Queue_Push(Queue_t * const q,UINT8 const * const Dat)
{
        Assert(!Queue_IsFull(q));
        q->Data[q->pHead] = *Dat;
        q->pHead++;
        q->pHead = q->pHead % Cfg_QUE_LEN;
        q->size++;
        return 0;
}

UINT8 Queue_Pop(Queue_t * const q,UINT8 * const Dat)
{
    Assert(!Queue_IsEmpty(q));
    *Dat = q->Data[q->pTail];
    q->pTail++;
    q->pTail = q->pTail % Cfg_QUE_LEN;
    q->size--;
    return 0;
}

UINT16 Queue_GetSize(Queue_t *const q)
{
	return q->size;
}

void Queue_Test()
{

	 Queue_t *test;
	 UINT8 a=1,b,i;

	 printf("-----------------------------------------------\n");
	 printf("------------Start Queue Test!------------------\n");
	 printf("-----------------------------------------------\n");

	 //creat queue
	 printf("creat queue test:\n\n");
     test=Queue_Creat();
     printf("p=%x\np->pHead =%x\np->pTail =%x\np->size =%x\n",test,test->pHead,test->pTail,test->size);

	 //push queue
	 printf("push queue test1:\n\n");
     Queue_Push(test,&a);
     printf("p=%x\np->pHead =%x\np->pTail =%x\np->size =%x\n",test,test->pHead,test->pTail,test->size);
     for(i=0;i<Queue_GetSize(test);i++)
     printf("Data[%d]=%x",i,test->Data[i]);
     printf("\n \n");

	 //push queue
	 printf("push queue test2:\n\n");
	 a++;
     Queue_Push(test,&a);
     printf("p=%x\np->pHead =%x\np->pTail =%x\np->size =%x\n",test,test->pHead,test->pTail,test->size);
     for(i=0;i<Queue_GetSize(test);i++)
     printf("Data=%x",test->Data[i]);
     printf("\n \n");

	 //pop queue
	 printf("push queue test:\n\n");
     Queue_Pop(test,&b);
     printf("b=%x \n",b);

     printf("p=%x\np->pHead =%x\np->pTail =%x\np->size =%x\n",test,test->pHead,test->pTail,test->size);
     for(i=0;i<Queue_GetSize(test);i++)
     printf("Data=%x",test->Data[i]);
	 printf("\n\n");

}

Cstyle的札记,Freertos内核详解,第3篇

时间: 2024-12-06 08:59:02

Cstyle的札记,Freertos内核详解,第3篇的相关文章

Cstyle的札记,Freertos内核详解,第2篇

<span style="white-space:pre"> </span>RTOS里面最常见也最核心的数据结构,双向链表实现. VS 2008下可编译测试. <pre name="code" class="cpp">/** @file Copyright (c) 2008 - 2014, MX.Studio All rights reserved. Created by Cstyle **/ #ifndef

Cstyle的札记,Freertos内核详解,基于cortex-m3,第0篇

Freertos是一个硬实时内核,支持众多的微处理器架构,我们可以从它的官网(www.freertos.ort)下载它的sourcecode,同时也可以看出它支持了几十种的微处理器架构,这些就不罗嗦了.之所以选择研究这个,是应为窥探RTOS内核的内幕一直每一个做底层软件开发人员的心愿,选择过好几种RTOS但他们有的是需要收费,有的不太成熟也不够系统,有的虽然比较成熟但是系统太大不太适合研究.而freertos就不同了,它除了包含RTOS所需要的基本的东西之外最大的特点就是开源+简单并且支持了非常

Cstyle的札记,Freertos内核详解,第1篇

一种动态内存管理Malloc/Free服务的链表实现 , 动态内存分配与回收服务,Malloc/Free的实现,最主要的核心内容是单向链表.其数据结构定义如下,一整段内存被SRAM或SDRAM,DRAM由系统的内存管理模块统一管理,这里主要是堆的管理: typedef struct A_BLOCK_LINK { struct A_BLOCK_LINK  *pxNextFreeBlock;     /*<< The next free block in the list. */ size_t x

jQuery内核详解与实践读书笔记1:原型技术分解2

上一篇已经搭建了一个非常简陋的jQuery框架雏形,如没有阅读搭建过程,请先阅读<jQuery内核详解与实践读书笔记1:原型技术分解1>初始搭建过程.接下来,完成书中介绍的剩下三个步骤: 7. 延续--功能扩展 jQuery框架是通过extend()函数来扩展功能的,extend()函数的功能实现起来也很简单,它只是吧指定对象的方法复制给jQuery对象或jQuery.prototype对象,如下示例代码就为jQuery类和原型定义了一个扩展功能的函数extend(). 1 var $ = j

jQuery内核详解与实践读书笔记1:原型技术分解1

一直以来都有研究一下jQuery源代码的想法,但是每次看到jQuery几千行的代码,头就大了,没有一点头绪,也不知道从哪里开始.昨天去图书馆无意间发现了这本<jQuery内核详解和实践>,翻看了一下里面的内容,这正是我寻觅多时剖析jQuery源码的好书. 废话不多说,直入正题吧.第一章介绍了一下jQuery的起步和一些历史故事,没什么重要内容.这里直接进入第二章,jQuery技术解密,从这一章开始就全部是干货了.这一章主要分四部分:jQuery原型技术分解,破解jQuery选择器接口,解析jQ

ANDROID L——Material Design详解(动画篇)

转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lollipop(5.0). 前几天发现Android5.0正式版的sdk已经可以下载了,而且首次搭载Android L系统的Nexus 6和 Nexus 9也即将上市. 所以是时候开始学习Android L了! 关于Android L如何配置模拟器和创建项目,如果大家有兴趣的话可以看看我之前的一篇文章: A

TCP协议详解(理论篇)

TCP协议详解(理论篇) 1.    与UDP不同的是,TCP提供了一种面向连接的.可靠的字节流服务.面向连接比较好理解,就是连接双方在通信前需要预先建立一条连接,这犹如实际生活中的打电话.助于可靠性,TCP协议中涉及了诸多规则来保障通信链路的可靠性,总结起来,主要有以下几点: (1)应用数据分割成TCP认为最适合发送的数据块.这部分是通过"MSS"(最大数据包长度)选项来控制的,通常这种机制也被称为一种协商机制,MSS规定了TCP传往另一端的最大数据块的长度.值得注意的是,MSS只能

Spark 性能相关参数配置详解-shuffle篇

作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 随着Spark的逐渐成熟完善, 越来越多的可配置参数被添加到Spark中来, 在Spark的官方文档http://spark.apache.org/docs/latest/configuration.html 中提供了这些可配置参数中相当大一部分的说明. 但是文档的更新总是落后于代码的开发的, 还有一些配置参数没有来得及被添加到

[转]ANDROID L——Material Design详解(动画篇)

转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 转自:http://blog.csdn.net/a396901990/article/details/40187203 Android L: Google已经确认Android L就是Android Lollipop(5.0). 前几天发现Android5.0正式版的sdk已经可以下载了,而且首次搭载Android L系统的Nexus 6和 Nexus 9也即将上市. 所以是时候开始学习