基于ucosii的通讯联系 主要部分

基于ucosii的通讯联系 主要部分

/*
1.初始化操作系统 OSInit(&err);
2.建立任务,至少需要一个任务;
3.建立操作系统提供的各种服务, 信号量服务 消息邮箱服务 消息队列服务等;
4.运行操作系统; OSStart();

说明:当按键按下通讯录增加一个名单,当按键按下另外一个名单时候删掉一个名单。名单都是已经做好在文本,当然也可以scanf通过串口获取信息,这里就没有写。
如有不足帮忙指正谢谢。
*/

//START 任务
//设置任务优先级
#define START_TASK_PRIO 10 //开始任务的优先级设置为最低
//设置任务堆栈大小
#define START_STK_SIZE 64
//任务堆栈
OS_STK START_TASK_STK[START_STK_SIZE];
//任务函数
void start_task(void *pdata);

//LED0任务
//设置任务优先级
#define LED0_TASK_PRIO 7
//设置任务堆栈大小
#define LED0_STK_SIZE 64
//任务堆栈
OS_STK LED0_TASK_STK[LED0_STK_SIZE];
//任务函数
void led0_task(void *pdata);

//LED1任务
//设置任务优先级
#define LED1_TASK_PRIO 8
//设置任务堆栈大小
#define LED1_STK_SIZE 64
//任务堆栈
OS_STK LED1_TASK_STK[LED1_STK_SIZE];
//任务函数
void led1_task(void *pdata);

//BEEP任务
//设置任务优先级
#define BEEP_TASK_PRIO 6
//设置任务堆栈大小
#define BEEP_STK_SIZE 64
//任务堆栈
OS_STK BEEP_TASK_STK[BEEP_STK_SIZE];
//任务函数
void BEEP_task(void *pdata);

//KEY任务
//设置任务优先级
#define KEY_TASK_PRIO 5
//设置任务堆栈大小
#define KEY_STK_SIZE 64
//任务堆栈
OS_STK KEY_TASK_STK[KEY_STK_SIZE];
//任务函数
void KEY_task(void *pdata);

const int KEY_NUM = 10;
INT8U KeyData[KEY_NUM] = {0};
OS_EVENT *pquene; //指向消息队列的指针

//定义联系人用户信息结构体
typedef struct
{
char Name[20];
char TelNum[12];
}USER_INFO;

//定义可用的内存块
const int USER_NUM = 100; //保存最多可以是100个联系人
const int USER_ONE_SIZE = sizeof(USER_INFO); // 每一个联系人所在的空间大小
USER_INFO User[USER_NUM] = {0};
OS_MEM *pTelUser; //内存指针

int main(void)
{
INT8U err;
OSInit();
OSTaskCreate(start_task,(void )0,(OS_STK )&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务
OSTimeSet(0);
//创建消息队列
pquene = OSQCreate((void
)&KeyData,KEY_NUM);
//创建内存块供ucos管理
pTelUser = OSMemCreat(User,USER_NUM,USER_ONE_SIZE,&err);
OSStart();
}

//开始任务
void start_task(void *pdata)
{
OS_CPU_SR cpu_sr=0;
pdata = pdata;
OSTaskCreate(led0_task,(void )0,(OS_STK)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);
OSTaskCreate(BEEP_task,(void )0,(OS_STK)&BEEP_TASK_STK[BEEP_STK_SIZE-1],BEEP_TASK_PRIO);
OSTaskCreate(KEY_task,(void )0,(OS_STK)&KEY_TASK_STK[KEY_STK_SIZE-1],KEY_TASK_PRIO);
OSTaskSuspend(START_TASK_PRIO); //挂起起始任务.
}

//BEEP任务
void BEEP_task(void *pdata)
{
INT8U err;
INT8U *pkey;
INT8U *keydata;
USER_INFO *pTel[USER_NUM];
static int num = 0;
BEEP_Init(); //初始化beep硬件
while(1)
{
//等待接收到消息
pkey = (INT8U *)OSQPend(pquene,0,&err);
keydata = *pkey;
//让蜂鸣器响一声


//判断按下的按键
if(keydata == KEY0) //如果按下的是KEY0
{
//是增加一个用户联系人信息,首先是申请一段内存空间,然后把联系人信息填上
if(num<USER_NUM)
{
pTel[num] = (USER_INFO *)OSMemGet(pTelUser,&err);
if((err == OS_ERR_NONE)&&(pTel !=(void *)0))
{
strcpy(pTel[num]->Name,“zhangshan”);
strcpy(pTel[num]->TelNum,“123456123456”);
}
num++;
}
}
else if(keydata == KEY1)
{
//是删除一个用户联系人信息,释放一段内存空间
if(num>0)
{
num–;
OSMemPut(pTelUser,pTel[num]);
}
}
}
}
//KEY任务
void KEY_task(void *pdata)
{
INT8U keyvalue = 0;
Key_Init();
while(1)
{
OSTimeDlyHMSM(0,0,0,50);
if((!KEY0)||(!KEY1))
{
if(!KEY0)
{
keyvalue = 1;
}
if(!KEY1)
{
keyvalue = 2;
}
//发送消息
OSQPost(pquene,&keyvalue);
//等待按键抬起
while((!KEY0)||(!KEY1)) OSTimeDlyHMSM(0,0,0,10);
}
}
}
还没有写完,是这样的简单的思路。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值