本文整理汇总了C++中OS_ENTER_CRITICAL函数 的典型用法代码示例。如果您正苦于以下问题:C++ OS_ENTER_CRITICAL函数的具体用法?C++ OS_ENTER_CRITICAL怎么用?C++ OS_ENTER_CRITICAL使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了OS_ENTER_CRITICAL函数 的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: OS_SAFETY_CRITICAL_EXCEPTION
OS_EVENT *OSSemDel (OS_EVENT *pevent,
INT8U opt,
INT8U *perr)
{
BOOLEAN tasks_waiting;
OS_EVENT *pevent_return;
#if OS_CRITICAL_METHOD == 3u /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0u;
#endif
#ifdef OS_SAFETY_CRITICAL
if (perr == (INT8U *)0) {
OS_SAFETY_CRITICAL_EXCEPTION();
return ((OS_EVENT *)0);
}
#endif
#if OS_ARG_CHK_EN > 0u
if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
*perr = OS_ERR_PEVENT_NULL;
return (pevent);
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type */
*perr = OS_ERR_EVENT_TYPE;
return (pevent);
}
if (OSIntNesting > 0u) { /* See if called from ISR ... */
*perr = OS_ERR_DEL_ISR; /* ... can't DELETE from an ISR */
return (pevent);
}
OS_ENTER_CRITICAL();
/* 检查是否有任务在等待该信号量 */
if (pevent->OSEventGrp != 0u) { /* See if any tasks waiting on semaphore */
tasks_waiting = OS_TRUE; /* Yes */
} else {
tasks_waiting = OS_FALSE; /* No */
}
switch (opt) {
/* 没有任务等待该信号量时,才删除该信号量 */
case OS_DEL_NO_PEND: /* Delete semaphore only if no task waiting */
/* 没有任务等待,则直接删除该信号量 */
if (tasks_waiting == OS_FALSE) {
#if OS_EVENT_NAME_EN > 0u
pevent->OSEventName = (INT8U *)(void *)"?";
#endif
pevent->OSEventType = OS_EVENT_TYPE_UNUSED;
/* 把事件控制块放入空事件控制块链表 */
pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */
pevent->OSEventCnt = 0u;
OSEventFreeList = pevent; /* Get next free event control block */
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
pevent_return = (OS_EVENT *)0; /* Semaphore has been deleted */
} else {
OS_EXIT_CRITICAL();
*perr = OS_ERR_TASK_WAITING;
pevent_return = pevent;
}
break;
/* 强制删除信号量,并取消所有等待任务的等待状态 */
case OS_DEL_ALWAYS: /* Always delete the semaphore */
/* 取消所有等待任务的等待状态,如果任务没有被挂起,则使任务就绪 */
while (pevent->OSEventGrp != 0u) { /* Ready ALL tasks waiting for semaphore */
(void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM, OS_STAT_PEND_ABORT);
}
#if OS_EVENT_NAME_EN > 0u
pevent->OSEventName = (INT8U *)(void *)"?";
#endif
pevent->OSEventType = OS_EVENT_TYPE_UNUSED;
/* 把事件控制块放入空事件控制块链表 */
pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */
pevent->OSEventCnt = 0u;
OSEventFreeList = pevent; /* Get next free event control block */
OS_EXIT_CRITICAL();
/* 如果有任务在等待该事件,说明已经将所有等待该事件的任务就绪了,进行调度 */
if (tasks_waiting == OS_TRUE) { /* Reschedule only if task(s) were waiting */
OS_Sched(); /* Find highest priority task ready to run */
}
*perr = OS_ERR_NONE;
pevent_return = (OS_EVENT *)0; /* Semaphore has been deleted */
break;
default:
OS_EXIT_CRITICAL();
*perr = OS_ERR_INVALID_OPT;
pevent_return = pevent;
break;
}
return (pevent_return);
}
开发者ID:sdwuyawen, 项目名称:uCOS-II_V2.92, 代码行数:94, 代码来源:os_sem.c
示例2: eth_ocm_raw_send
/**
* Raw send function to initiate a transfer to the mac
*
* @param net - NET structure associated with the Opencores MAC instance
* @param data - pointer to the data payload
*
* @return SUCCESS if success, else a negative value
*/
int eth_ocm_raw_send(NET net, char * data, unsigned data_bytes){
int result;
int i;
unsigned len;
eth_ocm_dev *dev;
eth_ocm_info *info;
eth_ocm_regs *regs;
alt_u8 *buf;
#ifdef UCOS_II
int cpu_sr;
#endif
OS_ENTER_CRITICAL(); //disable interrupts
dev = (eth_ocm_dev *)net->n_local;
info = dev->info;
regs = dev->regs;
len = data_bytes - ETHHDR_BIAS;
result = 0;
//Check to see if someone is nesting send calls (BAD!)
if(info->sem){
dprintf("[eth_ocm_raw_send] ERROR: Nested raw send call\n");
OS_EXIT_CRITICAL();
return ENP_RESOURCE;
}
//Grab the semaphore
info->sem = 1;
// clear bit-31 before passing it to SGDMA Driver
buf = (alt_u8 *)alt_remap_cached( (volatile void *)data, 4);
//advance the pointer beyond the header bias
buf = (alt_u8 *)((unsigned int)buf + ETHHDR_BIAS);
//Some error checks first
if(len < ETH_OCM_MIN_MTU)
result = -1; //packet too small
if(len > ETH_OCM_MAX_MTU)
result = -EFBIG; //packet too big
if(regs->txdescs[0].ctrl & ETH_OCM_TXDESC_READY_MSK)
result = -EBUSY; //DMA not available
if(!result){
//Write pointer to descriptor
regs->txdescs[0].ptr = (unsigned int)buf;
//Write length and setup transfer
regs->txdescs[0].ctrl =
((len << ETH_OCM_TXDESC_LEN_OFST) |
ETH_OCM_TXDESC_READY_MSK |
ETH_OCM_TXDESC_WRAP_MSK |
ETH_OCM_TXDESC_PAD_MSK |
ETH_OCM_TXDESC_CRC_MSK);
//Wait for transfer to complete
i=0;
do{
result = regs->txdescs[0].ctrl;
i++;
}while((result & ETH_OCM_TXDESC_READY_MSK) && i<ETH_OCM_TRANSMIT_TIMEOUT);
//Make sure no timeout occurred
if(i<ETH_OCM_TRANSMIT_TIMEOUT){
if(result &
(ETH_OCM_TXDESC_UR_MSK |
ETH_OCM_TXDESC_RL_MSK |
ETH_OCM_TXDESC_LC_MSK |
ETH_OCM_TXDESC_CS_MSK)){
#if (ETH_OCM_DBG_LVL >= 2)
dprintf("[eth_ocm_raw_send] Transmit error 0x%x\n", result);
#endif // if ETH_OCM_DBG_LVL
result = -EIO; //Some error occured
}
else{
#if (ETH_OCM_DBG_LVL >= 5)
if(result & ETH_OCM_TXDESC_RTRY_MSK)
dprintf("[eth_ocm_raw_send] Transmit retries: %d\n", (result & ETH_OCM_TXDESC_RTRY_MSK)>>ETH_OCM_TXDESC_RTRY_OFST);
#endif
result = 0;
}
}
else{ //Timeout
开发者ID:franzwc, 项目名称:FPGA-Testes, 代码行数:87, 代码来源:ins_eth_ocm.c
示例3: OSSemPend
/*$PAGE*/
void OSSemPend (OS_EVENT *pevent, INT16U timeout, INT8U *perr)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
#endif
#if OS_ARG_CHK_EN > 0
if (perr == (INT8U *)0) { /* Validate 'perr' */
return;
}
if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
*perr = OS_ERR_PEVENT_NULL;
return;
}
#endif
if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type */
*perr = OS_ERR_EVENT_TYPE;
return;
}
if (OSIntNesting > 0) { /* See if called from ISR ... */
*perr = OS_ERR_PEND_ISR; /* ... can't PEND from an ISR */
return;
}
if (OSLockNesting > 0) { /* See if called with scheduler locked ... */
*perr = OS_ERR_PEND_LOCKED; /* ... can't PEND when locked */
return;
}
OS_ENTER_CRITICAL();
if (pevent->OSEventCnt > 0) { /* If sem. is positive, resource available ... */
pevent->OSEventCnt--; /* ... decrement semaphore only if positive. */
OS_EXIT_CRITICAL();
*perr = OS_ERR_NONE;
return;
}
/* Otherwise, must wait until event occurs */
OSTCBCur->OSTCBStat |= OS_STAT_SEM; /* Resource not available, pend on semaphore */
OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK;
OSTCBCur->OSTCBDly = timeout; /* Store pend timeout in TCB */
OS_EventTaskWait(pevent); /* Suspend task until event or timeout occurs */
OS_EXIT_CRITICAL();
OS_Sched(); /* Find next highest priority task ready */
OS_ENTER_CRITICAL();
switch (OSTCBCur->OSTCBStatPend) { /* See if we timed-out or aborted */
case OS_STAT_PEND_OK:
*perr = OS_ERR_NONE;
break;
case OS_STAT_PEND_ABORT:
*perr = OS_ERR_PEND_ABORT; /* Indicate that we aborted */
break;
case OS_STAT_PEND_TO:
default:
OS_EventTaskRemove(OSTCBCur, pevent);
*perr = OS_ERR_TIMEOUT; /* Indicate that we didn't get event within TO */
break;
}
OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set task status to ready */
OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; /* Clear pend status */
OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* Clear event pointers */
#if (OS_EVENT_MULTI_EN > 0)
OSTCBCur->OSTCBEventMultiPtr = (OS_EVENT **)0;
#endif
OS_EXIT_CRITICAL();
}
开发者ID:ThucVD2704, 项目名称:femto-usb-blink-example, 代码行数:68, 代码来源:os_sem.c
示例4: OSTaskChangePrio
INT8U OSTaskChangePrio (INT8U oldprio, INT8U newprio)
{
#if (OS_EVENT_EN)
OS_EVENT *pevent;
#if (OS_EVENT_MULTI_EN > 0)
OS_EVENT **pevents;
#endif
#endif
OS_TCB *ptcb;
INT8U y_new;
INT8U x_new;
INT8U y_old;
#if OS_LOWEST_PRIO <= 63
INT8U bity_new;
INT8U bitx_new;
INT8U bity_old;
INT8U bitx_old;
#else
INT16U bity_new;
INT16U bitx_new;
INT16U bity_old;
INT16U bitx_old;
#endif
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0; /* Storage for CPU status register */
#endif
/*$PAGE*/
#if OS_ARG_CHK_EN > 0
if (oldprio >= OS_LOWEST_PRIO) {
if (oldprio != OS_PRIO_SELF) {
return (OS_ERR_PRIO_INVALID);
}
}
if (newprio >= OS_LOWEST_PRIO) {
return (OS_ERR_PRIO_INVALID);
}
#endif
OS_ENTER_CRITICAL();
if (OSTCBPrioTbl[newprio] != (OS_TCB *)0) { /* New priority must not already exist */
OS_EXIT_CRITICAL();
return (OS_ERR_PRIO_EXIST);
}
if (oldprio == OS_PRIO_SELF) { /* See if changing self */
oldprio = OSTCBCur->OSTCBPrio; /* Yes, get priority */
}
ptcb = OSTCBPrioTbl[oldprio];
if (ptcb == (OS_TCB *)0) { /* Does task to change exist? */
OS_EXIT_CRITICAL(); /* No, can't change its priority! */
return (OS_ERR_PRIO);
}
if (ptcb == OS_TCB_RESERVED) { /* Is task assigned to Mutex */
OS_EXIT_CRITICAL(); /* No, can't change its priority! */
return (OS_ERR_TASK_NOT_EXIST);
}
#if OS_LOWEST_PRIO <= 63
y_new = (INT8U)(newprio >> 3); /* Yes, compute new TCB fields */
x_new = (INT8U)(newprio & 0x07);
bity_new = (INT8U)(1 << y_new);
bitx_new = (INT8U)(1 << x_new);
#else
y_new = (INT8U)((newprio >> 4) & 0x0F);
x_new = (INT8U)( newprio & 0x0F);
bity_new = (INT16U)(1 << y_new);
bitx_new = (INT16U)(1 << x_new);
#endif
OSTCBPrioTbl[oldprio] = (OS_TCB *)0; /* Remove TCB from old priority */
OSTCBPrioTbl[newprio] = ptcb; /* Place pointer to TCB @ new priority */
y_old = ptcb->OSTCBY;
bity_old = ptcb->OSTCBBitY;
bitx_old = ptcb->OSTCBBitX;
if ((OSRdyTbl[y_old] & bitx_old) != 0) { /* If task is ready make it not */
OSRdyTbl[y_old] &= ~bitx_old;
if (OSRdyTbl[y_old] == 0) {
OSRdyGrp &= ~bity_old;
}
OSRdyGrp |= bity_new; /* Make new priority ready to run */
OSRdyTbl[y_new] |= bitx_new;
}
#if (OS_EVENT_EN)
pevent = ptcb->OSTCBEventPtr;
if (pevent != (OS_EVENT *)0) {
pevent->OSEventTbl[y_old] &= ~bitx_old; /* Remove old task prio from wait list */
if (pevent->OSEventTbl[y_old] == 0) {
pevent->OSEventGrp &= ~bity_old;
}
pevent->OSEventGrp |= bity_new; /* Add new task prio to wait list */
pevent->OSEventTbl[y_new] |= bitx_new;
}
#if (OS_EVENT_MULTI_EN > 0)
if (ptcb->OSTCBEventMultiPtr != (OS_EVENT **)0) {
pevents = ptcb->OSTCBEventMultiPtr;
pevent = *pevents;
while (pevent != (OS_EVENT *)0) {
pevent->OSEventTbl[y_old] &= ~bitx_old; /* Remove old task prio from wait lists */
if (pevent->OSEventTbl[y_old] == 0) {
pevent->OSEventGrp &= ~bity_old;
//.........这里部分代码省略.........
开发者ID:limao0701, 项目名称:UCOS_21XX, 代码行数:101, 代码来源:os_task.c
示例5: return
OS_EVENT *OSQDel (OS_EVENT *pevent, INT8U opt, INT8U *err)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
BOOLEAN tasks_waiting;
OS_Q *pq;
if (OSIntNesting > 0) { /* See if called from ISR ... */
*err = OS_ERR_DEL_ISR; /* ... can't DELETE from an ISR */
return ((OS_EVENT *)0);
}
#if OS_ARG_CHK_EN > 0
if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
*err = OS_ERR_PEVENT_NULL;
return (pevent);
}
if (pevent->OSEventType != OS_EVENT_TYPE_Q) { /* Validate event block type */
*err = OS_ERR_EVENT_TYPE;
return (pevent);
}
#endif
OS_ENTER_CRITICAL();
if (pevent->OSEventGrp != 0x00) { /* See if any tasks waiting on queue */
tasks_waiting = TRUE; /* Yes */
} else {
tasks_waiting = FALSE; /* No */
}
switch (opt) {
case OS_DEL_NO_PEND: /* Delete queue only if no task waiting */
if (tasks_waiting == FALSE) {
pq = (OS_Q *)pevent->OSEventPtr; /* Return OS_Q to free list */
pq->OSQPtr = OSQFreeList;
OSQFreeList = pq;
pevent->OSEventType = OS_EVENT_TYPE_UNUSED;
pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */
OSEventFreeList = pevent; /* Get next free event control block */
OS_EXIT_CRITICAL();
*err = OS_NO_ERR;
return ((OS_EVENT *)0); /* Queue has been deleted */
} else {
OS_EXIT_CRITICAL();
*err = OS_ERR_TASK_WAITING;
return (pevent);
}
case OS_DEL_ALWAYS: /* Always delete the queue */
while (pevent->OSEventGrp != 0x00) { /* Ready ALL tasks waiting for queue */
OS_EventTaskRdy(pevent, (void *)0, OS_STAT_Q);
}
pq = (OS_Q *)pevent->OSEventPtr; /* Return OS_Q to free list */
pq->OSQPtr = OSQFreeList;
OSQFreeList = pq;
pevent->OSEventType = OS_EVENT_TYPE_UNUSED;
pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */
OSEventFreeList = pevent; /* Get next free event control block */
OS_EXIT_CRITICAL();
if (tasks_waiting == TRUE) { /* Reschedule only if task(s) were waiting */
OS_Sched(); /* Find highest priority task ready to run */
}
*err = OS_NO_ERR;
return ((OS_EVENT *)0); /* Queue has been deleted */
default:
OS_EXIT_CRITICAL();
*err = OS_ERR_INVALID_OPT;
return (pevent);
}
}
开发者ID:Trietptm-on-Coding-Algorithms, 项目名称:CodeLibrary, 代码行数:70, 代码来源:os_q.c
示例6: return
// 要求获得邮箱的消息
void *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
{
void *msg;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
#endif
#if OS_ARG_CHK_EN > 0
if (err == (INT8U *)0) /* Validate 'err' */
{
return ((void *)0);
}
if (pevent == (OS_EVENT *)0) /* Validate 'pevent' */
{
*err = OS_ERR_PEVENT_NULL;
return ((void *)0);
}
#endif
// 事件类型是邮箱?
if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) /* Validate event block type */
{
*err = OS_ERR_EVENT_TYPE;
return ((void *)0);
}
// 中断处理里不允许挂起
if (OSIntNesting > 0) /* See if called from ISR ... */
{
*err = OS_ERR_PEND_ISR; /* ... can't PEND from an ISR */
return ((void *)0);
}
// 调度禁止时不允许挂起
if (OSLockNesting > 0) /* See if called with scheduler locked ... */
{
*err = OS_ERR_PEND_LOCKED; /* ... can't PEND when locked */
return ((void *)0);
}
OS_ENTER_CRITICAL();
msg = pevent->OSEventPtr;
// 可获得邮箱消息?
if (msg != (void *)0) /* See if there is already a message */
{
// 清空邮箱
pevent->OSEventPtr = (void *)0; /* Clear the mailbox */
OS_EXIT_CRITICAL();
*err = OS_NO_ERR;
// 返回
return (msg); /* Return the message received (or NULL) */
}
// 如果获取不到邮箱信息,任务会挂起
// 更新任务状态标志
OSTCBCur->OSTCBStat |= OS_STAT_MBOX; /* Message not available, task will pend */
// 延时等待最大时间未到
OSTCBCur->OSTCBPendTO = OS_FALSE;
// 设置延时等待最大时间
OSTCBCur->OSTCBDly = timeout; /* Load timeout in TCB */
// 将任务添加到事件控制块的等待任务表
OS_EventTaskWait(pevent); /* Suspend task until event or timeout occurs */
OS_EXIT_CRITICAL();
// 找出优先级最高的任务并进行任务切换
OS_Sched(); /* Find next highest priority task ready to run */
// 当邮箱有效或者等待时间到后,
// 并且调用OSMboxPend()函数的任务再一次成为最高优先级任务,
// 就会回到这里继续执行
OS_ENTER_CRITICAL();
// 延时等待最大时间到了?
if (OSTCBCur->OSTCBPendTO == OS_TRUE) /* See if we were given the message */
{
// 由于等待超时而将任务置为就绪态。
OS_EventTO(pevent); /* Timed out, Make task ready */
OS_EXIT_CRITICAL();
*err = OS_TIMEOUT; /* Indicate that a timeout occured */
return ((void *)0); /* Return a NULL message */
}
// 邮箱可被获得:
// 获得邮箱消息
msg = OSTCBCur->OSTCBMsg;
// 清空邮箱
OSTCBCur->OSTCBMsg = (void *)0; /* Yes, clear message received */
// 更新任务状态标志
OSTCBCur->OSTCBStat = OS_STAT_RDY;
// 释放TCB里的ECB
OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* No longer waiting for event */
OS_EXIT_CRITICAL();
*err = OS_NO_ERR;
return (msg); /* Return the message received */
}
开发者ID:Pengfei-Gao, 项目名称:develop-reference-data, 代码行数:91, 代码来源:os_mbox.c
示例7: ambe_decode_wav_hook
/* The ambe_decode_wav() function decodes AMBE2+ bits to 80 samples
(160 bytes) of 8kHz audio as signed shorts. This hook will
optionally print that data to the dmesg buffer, where it can be
extracted and recorded on the host.
*/
int ambe_decode_wav_hook(int *a1, signed int eighty, char *bitbuffer,
int a4, short a5, short a6, int a7){
/* This prints the AMBE2+ structure that is to be decoded. The
output is decodable with DSD, but it sounds horrible.
*/
#ifdef AMBEPRINT
int ambestate=OS_ENTER_CRITICAL();
short *bits=(short*) bitbuffer;
static int i;
/* I don't know why, but this output can only be decoded by DSD if
half the frames are dropped. The trick is to only decode those
when the sixth paramter is zero, ignoring all the ones where that
parameter is a one.
Strangely enough, we do not skip half the frames of the WAV
ouput below.
*/
if(!a6){
printf("AMBE2+ Corr: ");
for(i=0;i<49;i++){
md380_putc(NULL,bits[i]?'1':'0');
}
md380_putc(NULL,'\n');
}
OS_EXIT_CRITICAL(ambestate);
#endif //AMBEPRINT
int toret=0xdeadbeef;
#ifdef CONFIG_AMBE
//First we call the original function.
toret=ambe_decode_wav(a1, eighty, bitbuffer,
a4, a5, a6, a7);
#endif
/* Print the parameters
printf("ambe_decode_wav(0x%08x, %d, 0x%08x,\n"
"%d, %d, %d, 0x%08x);\n",
a1, eighty, bitbuffer,
a4, a5, a6, a7);
*/
/* This is very noisy, so we don't enable it by default. It prints
the WAV as hex pairs, which will quickly flood the buffer if it
isn't cleared in time.
*/
#ifdef AMBEWAVPRINT
//Does this really need to be in a critical section?
int wavstate=OS_ENTER_CRITICAL();
//A1 holds audio as signed LE shorts.
printf("WAV: ");
printhex(a1,160);
printf("\n");
OS_EXIT_CRITICAL(wavstate);
#endif //AMBEWAVPRINT
return toret;
}
开发者ID:M0IVQ, 项目名称:md380tools, 代码行数:68, 代码来源:ambe.c
示例8: TaskSet
/********************************************************************************
* FunctionName: TaskSet
*
* Description : 设置任务,设置完删除任务
*
* Parameters : None.
*
* Returns : None.
*******************************************************************************/
void TaskSet(void *p_arg)
{
unsigned char k, data_flash_temp[208]={0xAE, 0x35, 0x24, 0x70, 0x80, 0xB7, 0x80, 0xBA, 0x1F, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9B, 0x1D, 0x5C, 0x1B, 0x5E, 0x02, 0x77, 0x02, 0xED, 0xEF, 0x80, 0xB8, 0x80, 0xB9, 0x1D, 0x5C, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1F, 0x80, 0x9B, 0x1D, 0x5C, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9B, 0x1D, 0x80, 0x9A, 0x1E, 0x80, 0xF5, 0x1E, 0x8F, 0x70, 0x02, 0xEA, 0x8C, 0x80, 0xB8, 0x80, 0xB9, 0x1D, 0x5C, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9A, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9B, 0x1D, 0x80, 0x9A, 0x1E, 0x80, 0xF5, 0x1E, 0x85, 0x88, 0x80, 0xB8, 0x80, 0xB8, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9A, 0x1E, 0x5C, 0x1E, 0x5B, 0x1F, 0x5B, 0x1E, 0x5B, 0x1F, 0x5B, 0x1F, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9B, 0x15, 0x80, 0xA4, 0x02, 0x86, 0xB7, 0x04, 0x81, 0x6D, 0x02, 0x77, 0x02, 0x77, 0x02, 0x77, 0x02, 0x77, 0x02, 0x77, 0x02, 0x77, 0x02, 0xAF, 0xFB, 0x02, 0x77, 0x1F, 0x5B, 0x1F, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9B, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7};
// INT8U i;
u32 seed;
u8 random_data,i;
//INT32U msg = 0;
//INT8U err = 0;
OS_CPU_SR cpu_sr = 0;
p_arg = p_arg;
DelayMs(30);
OS_ENTER_CRITICAL();
BSP_Init();
Flash_Read(RFIR_ID_ADDR, MY_ID, 4); //读取FLASH ID存入BUF
#if 0
SendString("\n\rMY ID:");
for(i=0;i<4;i++)//sizeof(ID)
{
SendString(";");
Outint(MY_ID[i]);
}
#endif
/********************************************************************************
* Description : 任务建立 共9个任务
*******************************************************************************/
CT361SndErrSemp = OSSemCreate(0);//creat sem
//创建协议解析任务
OSTaskCreate(TaskProtocol,
(void*)0,
&TaskProtocolStk[TASK_PROTOCOL_STKSIZE-1],
TASK_PROTOCOL_PRIO);
//创建串口发送任务
OSTaskCreate(TaskProtoSend,
(void*)0,
&TaskProtoSendStk[TASK_PROTO_SEND_STKSIZE-1],
TASK_PROTO_SEND_PRIO );
//创建量产测试任务
OSTaskCreate(TaskTest,
(void*)0,
&TaskTestStk[TASK_TEST_STKSIZE-1],
TASK_TEST_PRIO );
//创建4432接收任务
OSTaskCreate(TaskSi4432Read,
(void*)0,
&TaskSi4432ReadStk[TASK_SET_STKSIZE-1],
TASK_Si4432_READ_PRIO );
//创建返回码接收任务
OSTaskCreate(TaskCT361SndErr,\
(void*)0,\
&TaskCT361SndErrStk[TASK_CT361_SND_ERR_STKSIZE-1],\
TASK_CT361_SND_ERR_PRIO);
/********************************************************************************
* Description : 创建消息队列
*******************************************************************************/
// SetMBox = OSQCreate(&SetQBuff[0], TASK_SET_QSIZE);
ProtocolMBox = OSQCreate(&ProtocolQBuff[0], TASK_PROTOCOL_QSIZE);
ProtoSendMBox = OSQCreate(&ProtoSendQBuff[0], TASK_PROTOSEND_QSIZE);
TestMBox = OSQCreate(&TestQBuff[0], TASK_TEST_QSIZE);
Si4432ReadMBox = OSQCreate(&Si4432ReadQBuff[0], TASK_Si4432READ_QSIZE);
OS_EXIT_CRITICAL();
SysTickInit();
//自我删除
// OSTaskDel(OS_PRIO_SELF);
/*自我删除函数会自动进行任务的调度,因此此处不需要添加延时*/
Flash_Write(0x800D678,data_flash_temp,208);
for (;;)
{
/**********学习状态指示灯********/
if(learn_cmd==1) //学习开始标志位
{
LED_Send(0);// 绿灯关闭
LED_Learn(1);//红灯闪烁
WatchDog_Feed(); //喂狗
OSTimeDly(4);
WatchDog_Feed(); //喂狗
LED_Learn(0);
WatchDog_Feed(); //喂狗
OSTimeDly(4);
//.........这里部分代码省略.........
开发者ID:huang87975716, 项目名称:temp, 代码行数:101, 代码来源:taskSet.c
示例9: OSStartHighRdy
void OSStartHighRdy()
{
DWORD dwID;
OSInitTrace(100000);
OS_ENTER_CRITICAL();
OSTaskSwHook();
++OSRunning;
OSCtxSwW32Event = CreateEvent(NULL,FALSE,FALSE,NULL);
OSCtxSwW32Handle = CreateThread( NULL, 0, OSCtxSwW32, 0, 0, &dwID );
SetPriorityClass(OSCtxSwW32Handle,THREAD_PRIORITY_HIGHEST);
#ifdef SET_AFFINITY_MASK
if( SetThreadAffinityMask( OSCtxSwW32Handle, 1 ) == 0 ) {
#ifdef OS_CPU_TRACE
OS_Printf("Error: SetThreadAffinityMask\n");
#endif
}
#endif
SetThreadPriority(OSCtxSwW32Handle,THREAD_PRIORITY_TIME_CRITICAL);
OSTick32Handle = CreateThread( NULL, 0, OSTickW32, 0, 0, &dwID );
SetPriorityClass(OSTick32Handle,THREAD_PRIORITY_HIGHEST);
#ifdef SET_AFFINITY_MASK
if( SetThreadAffinityMask( OSTick32Handle, 1 ) == 0 )
{
#ifdef OS_CPU_TRACE
OS_Printf("Error: SetThreadAffinityMask\n");
#endif
}
#endif
SetThreadPriority(OSTick32Handle,THREAD_PRIORITY_HIGHEST);
#ifdef WIN_MM_TICK
timeGetDevCaps(&OSTimeCap, sizeof(OSTimeCap));
if( OSTimeCap.wPeriodMin < WIN_MM_MIN_RES )
OSTimeCap.wPeriodMin = WIN_MM_MIN_RES;
timeBeginPeriod(OSTimeCap.wPeriodMin);
OSTickEventHandle = CreateEvent(NULL, FALSE, FALSE, NULL);
OSTickTimer = timeSetEvent((1000/OS_TICKS_PER_SEC),OSTimeCap.wPeriodMin,(LPTIMECALLBACK)OSTickEventHandle, dwID,TIME_PERIODIC|TIME_CALLBACK_EVENT_SET);
#endif
SS_SP = (OS_EMU_STK*) OSTCBHighRdy->OSTCBStkPtr; /* OSTCBCur = OSTCBHighRdy; */
/* OSPrioCur = OSPrioHighRdy; */
ResumeThread(SS_SP->Handle);
OS_EXIT_CRITICAL();
WaitForSingleObject(OSCtxSwW32Handle,INFINITE);
#ifdef WIN_MM_TICK
timeKillEvent(OSTickTimer);
timeEndPeriod(OSTimeCap.wPeriodMin);
CloseHandle(OSTickEventHandle);
#endif
CloseHandle(OSTick32Handle);
CloseHandle(OSCtxSwW32Event);
}
开发者ID:arviklinux, 项目名称:ucos-ii, 代码行数:70, 代码来源:os_cpu_c.c
示例10: OS_TCBInit
//任务控制块初始化 INITIALIZE TCB
//描述: 这个函数是uC/OS-II内部函数,在建立任务时调用的初始化任务控制块OS_TCB函数,含7个参数,
// (查看 OSTaskCreate() 和 OSTaskCreateExt()).
//参数: prio 任务的优先级
// ptos OSTaskInit()建立栈结构以后,ptos是指向栈顶的指针,且保存在OS_TCB的OSTCBStkPrt中
// pbos 指向栈底的指针,保存在OSTCBStkBottom变元中
// id 任务标志符(0..65535),保存在.OSTCBId中
// stk_size 堆栈的容量,保存在OS_TCB的OSTABStkSize中
// pext OS_TCB中的扩展指针,.OSTCBExtPtr的值
// opt OS_TCB的选择项,保存在.OSTCBOpt中
//返回: OS_NO_ERR 调用成功
// OS_NO_MORE_TCB 没有更多的任务控制块被分配,将无法创建新的任务
//注意: 这个函数是uC/OS-II内部函数,你不可以调用它。
INT8U OS_TCBInit (INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT32U stk_size, void *pext, INT16U opt)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
OS_TCB *ptcb;
OS_ENTER_CRITICAL();
ptcb = OSTCBFreeList; /* Get a free TCB from the free TCB list */
if (ptcb != (OS_TCB *)0) {
OSTCBFreeList = ptcb->OSTCBNext; /* Update pointer to free TCB list */
OS_EXIT_CRITICAL();
ptcb->OSTCBStkPtr = ptos; /* Load Stack pointer in TCB */
ptcb->OSTCBPrio = (INT8U)prio; /* Load task priority into TCB */
ptcb->OSTCBStat = OS_STAT_RDY; /* Task is ready to run */
ptcb->OSTCBDly = 0; /* Task is not delayed */
#if OS_TASK_CREATE_EXT_EN > 0
ptcb->OSTCBExtPtr = pext; /* Store pointer to TCB extension */
ptcb->OSTCBStkSize = stk_size; /* Store stack size */
ptcb->OSTCBStkBottom = pbos; /* Store pointer to bottom of stack */
ptcb->OSTCBOpt = opt; /* Store task options */
ptcb->OSTCBId = id; /* Store task ID */
#else
pext = pext; /* Prevent compiler warning if not used */
stk_size = stk_size;
pbos = pbos;
opt = opt;
id = id;
#endif
#if OS_TASK_DEL_EN > 0
ptcb->OSTCBDelReq = OS_NO_ERR;
#endif
ptcb->OSTCBY = prio >> 3; /* Pre-compute X, Y, BitX and BitY */
ptcb->OSTCBBitY = OSMapTbl[ptcb->OSTCBY];
ptcb->OSTCBX = prio & 0x07;
ptcb->OSTCBBitX = OSMapTbl[ptcb->OSTCBX];
#if OS_EVENT_EN > 0
ptcb->OSTCBEventPtr = (OS_EVENT *)0; /* Task is not pending on an event */
#endif
#if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0) && (OS_TASK_DEL_EN > 0)
ptcb->OSTCBFlagNode = (OS_FLAG_NODE *)0; /* Task is not pending on an event flag */
#endif
#if (OS_MBOX_EN > 0) || ((OS_Q_EN > 0) && (OS_MAX_QS > 0))
ptcb->OSTCBMsg = (void *)0; /* No message received */
#endif
#if OS_VERSION >= 204
OSTCBInitHook(ptcb);
#endif
OSTaskCreateHook(ptcb); /* Call user defined hook */
OS_ENTER_CRITICAL();
OSTCBPrioTbl[prio] = ptcb;
ptcb->OSTCBNext = OSTCBList; /* Link into TCB chain */
ptcb->OSTCBPrev = (OS_TCB *)0;
if (OSTCBList != (OS_TCB *)0) {
OSTCBList->OSTCBPrev = ptcb;
}
OSTCBList = ptcb;
OSRdyGrp |= ptcb->OSTCBBitY; /* Make task ready to run */
OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
OS_EXIT_CRITICAL();
return (OS_NO_ERR);
}
开发者ID:orkash, 项目名称:UCOS_Learn, 代码行数:85, 代码来源:OS_CORE.C
示例11: OSSemPend
void OSSemPend( OS_EVENT * pevent, INT16U timeout, INT8U * err )
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
#endif
#if OS_ARG_CHK_EN > 0
if ( err == ( INT8U * ) 0 )
{ /* Validate 'err' */
return;
}
if ( pevent == ( OS_EVENT * ) 0 )
{ /* Validate 'pevent' */
*err = OS_ERR_PEVENT_NULL;
return;
}
#endif
if ( pevent->OSEventType != OS_EVENT_TYPE_SEM )
{ /* Validate event block type */
*err = OS_ERR_EVENT_TYPE;
return;
}
if ( OSIntNesting > 0 )
{ /* See if called from ISR ... */
*err = OS_ERR_PEND_ISR; /* ... can't PEND from an ISR */
return;
}
if ( OSLockNesting > 0 )
{ /* See if called with scheduler locked ... */
*err = OS_ERR_PEND_LOCKED; /* ... can't PEND when locked */
return;
}
OS_ENTER_CRITICAL( );
if ( pevent->OSEventCnt > 0 )
{ /* If sem. is positive, resource available ... */
pevent->OSEventCnt--; /* ... decrement semaphore only if positive. */
OS_EXIT_CRITICAL( );
*err = OS_NO_ERR;
return;
}
/* Otherwise, must wait until event occurs */
OSTCBCur->OSTCBStat |= OS_STAT_SEM; /* Resource not available, pend on semaphore */
OSTCBCur->OSTCBPendTO = OS_FALSE;
OSTCBCur->OSTCBDly = timeout; /* Store pend timeout in TCB */
OS_EventTaskWait( pevent ); /* Suspend task until event or timeout occurs */
OS_EXIT_CRITICAL( );
OS_Sched( ); /* Find next highest priority task ready */
OS_ENTER_CRITICAL( );
if ( OSTCBCur->OSTCBPendTO == OS_TRUE )
{ /* See if we timedout */
OS_EventTO( pevent );
OS_EXIT_CRITICAL( );
*err = OS_TIMEOUT; /* Indicate that didn't get event within TO */
return;
}
OSTCBCur->OSTCBEventPtr = ( OS_EVENT * ) 0;
OS_EXIT_CRITICAL( );
*err = OS_NO_ERR;
}
开发者ID:jimmygaoyang, 项目名称:STM32_SPI_2_USART, 代码行数:61, 代码来源:os_sem.c
示例12: OSTaskChangePrio
INT8U OSTaskChangePrio (INT8U oldprio, INT8U newprio)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
#if OS_EVENT_EN > 0
OS_EVENT *pevent;
#endif
OS_TCB *ptcb;
INT8U x;
INT8U y;
INT8U bitx;
INT8U bity;
#if OS_ARG_CHK_EN > 0
if ((oldprio >= OS_LOWEST_PRIO && oldprio != OS_PRIO_SELF) ||
newprio >= OS_LOWEST_PRIO) {
return (OS_PRIO_INVALID);
}
#endif
OS_ENTER_CRITICAL();
if (OSTCBPrioTbl[newprio] != (OS_TCB *)0) { /* New priority must not already exist */
OS_EXIT_CRITICAL();
return (OS_PRIO_EXIST);
} else {
OSTCBPrioTbl[newprio] = (OS_TCB *)1; /* Reserve the entry to prevent others */
OS_EXIT_CRITICAL();
y = newprio >> 3; /* Precompute to reduce INT. latency */
bity = OSMapTbl[y];
x = newprio & 0x07;
bitx = OSMapTbl[x];
OS_ENTER_CRITICAL();
if (oldprio == OS_PRIO_SELF) { /* See if changing self */
oldprio = OSTCBCur->OSTCBPrio; /* Yes, get priority */
}
ptcb = OSTCBPrioTbl[oldprio];
if (ptcb != (OS_TCB *)0) { /* Task to change must exist */
OSTCBPrioTbl[oldprio] = (OS_TCB *)0; /* Remove TCB from old priority */
if ((OSRdyTbl[ptcb->OSTCBY] & ptcb->OSTCBBitX) != 0x00) { /* If task is ready make it not */
if ((OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0x00) {
OSRdyGrp &= ~ptcb->OSTCBBitY;
}
OSRdyGrp |= bity; /* Make new priority ready to run */
OSRdyTbl[y] |= bitx;
#if OS_EVENT_EN > 0
} else {
pevent = ptcb->OSTCBEventPtr;
if (pevent != (OS_EVENT *)0) { /* Remove from event wait list */
if ((pevent->OSEventTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0) {
pevent->OSEventGrp &= ~ptcb->OSTCBBitY;
}
pevent->OSEventGrp |= bity; /* Add new priority to wait list */
pevent->OSEventTbl[y] |= bitx;
}
#endif
}
OSTCBPrioTbl[newprio] = ptcb; /* Place pointer to TCB @ new priority */
ptcb->OSTCBPrio = newprio; /* Set new task priority */
ptcb->OSTCBY = y;
ptcb->OSTCBX = x;
ptcb->OSTCBBitY = bity;
ptcb->OSTCBBitX = bitx;
OS_EXIT_CRITICAL();
OS_Sched(); /* Run highest priority task ready */
return (OS_NO_ERR);
} else {
OSTCBPrioTbl[newprio] = (OS_TCB *)0; /* Release the reserved prio. */
OS_EXIT_CRITICAL();
return (OS_PRIO_ERR); /* Task to change didn't exist */
}
}
}
开发者ID:ljh0925, 项目名称:cixuanhuanzhu, 代码行数:76, 代码来源:OS_TASK.C
示例13: OSTaskDel
INT8U OSTaskDel (INT8U prio)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
#if OS_EVENT_EN > 0
OS_EVENT *pevent;
#endif
#if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
OS_FLAG_NODE *pnode;
#endif
OS_TCB *ptcb;
if (OSIntNesting > 0) { /* See if trying to delete from ISR */
return (OS_TASK_DEL_ISR);
}
#if OS_ARG_CHK_EN > 0
if (prio == OS_IDLE_PRIO) { /* Not allowed to delete idle task */
return (OS_TASK_DEL_IDLE);
}
if (prio >= OS_LOWEST_PRIO && prio != OS_PRIO_SELF) { /* Task priority valid ? */
return (OS_PRIO_INVALID);
}
#endif
OS_ENTER_CRITICAL();
if (prio == OS_PRIO_SELF) { /* See if requesting to delete self */
prio = OSTCBCur->OSTCBPrio; /* Set priority to delete to current */
}
ptcb = OSTCBPrioTbl[prio];
if (ptcb != (OS_TCB *)0) { /* Task to delete must exist */
if ((OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0x00) { /* Make task not ready */
OSRdyGrp &= ~ptcb->OSTCBBitY;
}
#if OS_EVENT_EN > 0
pevent = ptcb->OSTCBEventPtr;
if (pevent != (OS_EVENT *)0) { /* If task is waiting on event */
if ((pevent->OSEventTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0) { /* ... remove task from */
pevent->OSEventGrp &= ~ptcb->OSTCBBitY; /* ... event ctrl block */
}
}
#endif
#if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
pnode = ptcb->OSTCBFlagNode;
if (pnode != (OS_FLAG_NODE *)0) { /* If task is waiting on event flag */
OS_FlagUnlink(pnode); /* Remove from wait list */
}
#endif
ptcb->OSTCBDly = 0; /* Prevent OSTimeTick() from updating */
ptcb->OSTCBStat = OS_STAT_RDY; /* Prevent task from being resumed */
if (OSLockNesting < 255) {
OSLockNesting++;
}
OS_EXIT_CRITICAL(); /* Enabling INT. ignores next instruc. */
OS_Dummy(); /* ... Dummy ensures that INTs will be */
OS_ENTER_CRITICAL(); /* ... disabled HERE! */
if (OSLockNesting > 0) {
OSLockNesting--;
}
OSTaskDelHook(ptcb); /* Call user defined hook */
OSTaskCtr--; /* One less task being managed */
OSTCBPrioTbl[prio] = (OS_TCB *)0; /* Clear old priority entry */
if (ptcb->OSTCBPrev == (OS_TCB *)0) { /* Remove from TCB chain */
ptcb->OSTCBNext->OSTCBPrev = (OS_TCB *)0;
OSTCBList = ptcb->OSTCBNext;
} else {
ptcb->OSTCBPrev->OSTCBNext = ptcb->OSTCBNext;
ptcb->OSTCBNext->OSTCBPrev = ptcb->OSTCBPrev;
}
ptcb->OSTCBNext = OSTCBFreeList; /* Return TCB to free TCB list */
OSTCBFreeList = ptcb;
OS_EXIT_CRITICAL();
OS_Sched(); /* Find new highest priority task */
return (OS_NO_ERR);
}
OS_EXIT_CRITICAL();
return (OS_TASK_DEL_ERR);
}
开发者ID:ljh0925, 项目名称:cixuanhuanzhu, 代码行数:80, 代码来源:OS_TASK.C
六六分期app的软件客服如何联系?不知道吗?加qq群【895510560】即可!标题:六六分期
阅读:17494| 2023-10-27
今天小编告诉大家如何处理win10系统火狐flash插件总是崩溃的问题,可能很多用户都不知
阅读:9399| 2022-11-06
今天小编告诉大家如何对win10系统删除桌面回收站图标进行设置,可能很多用户都不知道
阅读:8010| 2022-11-06
今天小编告诉大家如何对win10系统电脑设置节能降温的设置方法,想必大家都遇到过需要
阅读:8376| 2022-11-06
我们在使用xp系统的过程中,经常需要对xp系统无线网络安装向导设置进行设置,可能很多
阅读:8280| 2022-11-06
今天小编告诉大家如何处理win7系统玩cf老是与主机连接不稳定的问题,可能很多用户都不
阅读:9137| 2022-11-06
电脑对日常生活的重要性小编就不多说了,可是一旦碰到win7系统设置cf烟雾头的问题,很
阅读:8257| 2022-11-06
我们在日常使用电脑的时候,有的小伙伴们可能在打开应用的时候会遇见提示应用程序无法
阅读:7679| 2022-11-06
今天小编告诉大家如何对win7系统打开vcf文件进行设置,可能很多用户都不知道怎么对win
阅读:8223| 2022-11-06
今天小编告诉大家如何对win10系统s4开启USB调试模式进行设置,可能很多用户都不知道怎
阅读:7252| 2022-11-06
请发表评论