?? memory.c
字號(hào):
/*
本實(shí)驗(yàn)實(shí)現(xiàn)了Vxworks任務(wù)通信方法中的共享內(nèi)存通信,實(shí)驗(yàn)演示了如果操作一個(gè)雙向數(shù)據(jù)鏈表
taskSend1負(fù)責(zé)添加數(shù)據(jù)至雙向數(shù)據(jù)鏈表
taskTake1負(fù)責(zé)從數(shù)據(jù)鏈表中刪除數(shù)據(jù)
*/
#include <stdlib.h>
#include <stdio.h>
#include "lstLib.h"
#include "semLib.h"
#include "taskLib.h"
/*定義堆棧大小*/
#define STACK_SIZE 20000
int taskSendID; /*發(fā)送任務(wù)的任務(wù)ID*/
int taskTakeID; /*接受任務(wù)的任務(wù)ID*/
SEM_ID listSemID; /*信號(hào)量ID*/
void taskSend1(); /*發(fā)送任務(wù)的功能函數(shù)*/
void taskTake1(); /*接受任務(wù)的功能函數(shù)*/
/*定義doublelist結(jié)構(gòu)*/
typedef struct double_list
{
NODE* next;
NODE* prev;
int list_n;
}doublelist;
/*定義鏈表描述符*/
LIST list;
/*子任務(wù)是否運(yùn)行開關(guān)*/
BOOL isWork = TRUE;
void myListStart()
{
/*初始化雙向鏈表模塊*/
lstLibInit();
/*初始化鏈表描述符*/
lstInit(&list);
/*創(chuàng)建二進(jìn)制信號(hào)量*/
listSemID = semBCreate(SEM_Q_FIFO, SEM_FULL);
/*運(yùn)行任務(wù)tSend1和任務(wù)tTake1*/
taskSendID = taskSpawn("tSend1", 99, 0, STACK_SIZE, (FUNCPTR)taskSend1, 0,0,0,0,0,0,0,0,0,0 );
taskTakeID = taskSpawn("tTake1", 99, 0, STACK_SIZE, (FUNCPTR)taskTake1, 0,0,0,0,0,0,0,0,0,0 );
/*任務(wù)延遲15秒*/
taskDelay(sysClkRateGet()*15);
/*讓子任務(wù)停止工作*/
isWork = FALSE;
printf("\n BYE \n");
/*釋放雙向鏈表*/
lstFree(&list);
/*刪除信號(hào)量*/
semDelete(listSemID);
}
void taskSend1()
{
int i = 0;
/*定義一個(gè)指向doublelist數(shù)據(jù)結(jié)構(gòu)的指針*/
doublelist *p;
while(isWork)
{
/*獲取信號(hào)量*/
semTake(listSemID, WAIT_FOREVER);
p = malloc(sizeof(doublelist));
p -> list_n = i ++ ;
/*在鏈表結(jié)尾追加一個(gè)節(jié)點(diǎn)*/
lstAdd(&list, (NODE*)p);
/*釋放信號(hào)量*/
semGive(listSemID);
/*任務(wù)延遲1秒*/
taskDelay(sysClkRateGet()*1);
}
}
void taskTake1()
{
doublelist *p;
while(isWork)
{
/*獲取信號(hào)量*/
semTake(listSemID, WAIT_FOREVER);
/*獲取首節(jié)點(diǎn),并將其從鏈表刪除*/
p = (doublelist*)lstGet(&list);
if(p)
{
printf(" %d \n ", p->list_n) ;
free(p);
}
/*釋放信號(hào)量*/
semGive(listSemID);
/*任務(wù)延遲*/
taskDelay(sysClkRateGet()*1);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -