📄 os_core.lst
字号:
156:OSsrc/os_core.c **** case OS_EVENT_TYPE_MBOX:
157:OSsrc/os_core.c **** case OS_EVENT_TYPE_Q:
158:OSsrc/os_core.c **** break;
159:OSsrc/os_core.c ****
160:OSsrc/os_core.c **** default:
161:OSsrc/os_core.c **** OS_EXIT_CRITICAL();
162:OSsrc/os_core.c **** *err = OS_ERR_EVENT_TYPE;
163:OSsrc/os_core.c **** return (0);
164:OSsrc/os_core.c **** }
165:OSsrc/os_core.c **** len = OS_StrCopy(pname, pevent->OSEventName); /* Copy name from OS_EVENT
166:OSsrc/os_core.c **** OS_EXIT_CRITICAL();
167:OSsrc/os_core.c **** *err = OS_NO_ERR;
168:OSsrc/os_core.c **** return (len);
169:OSsrc/os_core.c **** }
170:OSsrc/os_core.c **** #endif
171:OSsrc/os_core.c ****
172:OSsrc/os_core.c **** /*$PAGE*/
173:OSsrc/os_core.c **** /*
174:OSsrc/os_core.c **** ***************************************************************************************************
175:OSsrc/os_core.c **** * ASSIGN A NAME TO A SEMAPHORE, MUTEX, MAILBOX or QUEUE
176:OSsrc/os_core.c **** *
177:OSsrc/os_core.c **** * Description: This function assigns a name to a semaphore, mutex, mailbox or queue.
178:OSsrc/os_core.c **** *
179:OSsrc/os_core.c **** * Arguments : pevent is a pointer to the event group. 'pevent' can point either to a semaphore
180:OSsrc/os_core.c **** * a mutex, a mailbox or a queue. Where this function is concerned, it doesn
181:OSsrc/os_core.c **** * matter the actual type.
182:OSsrc/os_core.c **** *
183:OSsrc/os_core.c **** * pname is a pointer to an ASCII string that will be used as the name of the semap
184:OSsrc/os_core.c **** * mutex, mailbox or queue. The string must be able to hold at least
185:OSsrc/os_core.c **** * OS_EVENT_NAME_SIZE characters.
186:OSsrc/os_core.c **** *
187:OSsrc/os_core.c **** * err is a pointer to an error code that can contain one of the following values
188:OSsrc/os_core.c **** *
189:OSsrc/os_core.c **** * OS_NO_ERR if the requested task is resumed
190:OSsrc/os_core.c **** * OS_ERR_EVENT_TYPE if 'pevent' is not pointing to the proper event
191:OSsrc/os_core.c **** * control block type.
192:OSsrc/os_core.c **** * OS_ERR_PNAME_NULL You passed a NULL pointer for 'pname'
193:OSsrc/os_core.c **** * OS_ERR_PEVENT_NULL if you passed a NULL pointer for 'pevent'
194:OSsrc/os_core.c **** *
195:OSsrc/os_core.c **** * Returns : None
196:OSsrc/os_core.c **** ***************************************************************************************************
197:OSsrc/os_core.c **** */
198:OSsrc/os_core.c ****
199:OSsrc/os_core.c **** #if OS_EVENT_EN && (OS_EVENT_NAME_SIZE > 1)
200:OSsrc/os_core.c **** void OSEventNameSet (OS_EVENT *pevent, char *pname, INT8U *err)
201:OSsrc/os_core.c **** {
202:OSsrc/os_core.c **** INT8U len;
203:OSsrc/os_core.c **** #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register
204:OSsrc/os_core.c **** OS_CPU_SR cpu_sr;
205:OSsrc/os_core.c ****
206:OSsrc/os_core.c ****
207:OSsrc/os_core.c ****
208:OSsrc/os_core.c **** cpu_sr = 0; /* Prevent compiler warning
209:OSsrc/os_core.c **** #endif
210:OSsrc/os_core.c **** OS_ENTER_CRITICAL();
211:OSsrc/os_core.c **** #if OS_ARG_CHK_EN > 0
212:OSsrc/os_core.c **** if (pevent == (OS_EVENT *)0) { /* Is 'pevent' a NULL pointer?
213:OSsrc/os_core.c **** OS_EXIT_CRITICAL(); /* Yes
214:OSsrc/os_core.c **** *err = OS_ERR_PEVENT_NULL;
215:OSsrc/os_core.c **** return;
216:OSsrc/os_core.c **** }
217:OSsrc/os_core.c **** if (pname == (char *)0) { /* Is 'pname' a NULL pointer?
218:OSsrc/os_core.c **** OS_EXIT_CRITICAL(); /* Yes
219:OSsrc/os_core.c **** *err = OS_ERR_PNAME_NULL;
220:OSsrc/os_core.c **** return;
221:OSsrc/os_core.c **** }
222:OSsrc/os_core.c **** #endif
223:OSsrc/os_core.c **** switch (pevent->OSEventType) {
224:OSsrc/os_core.c **** case OS_EVENT_TYPE_SEM:
225:OSsrc/os_core.c **** case OS_EVENT_TYPE_MUTEX:
226:OSsrc/os_core.c **** case OS_EVENT_TYPE_MBOX:
227:OSsrc/os_core.c **** case OS_EVENT_TYPE_Q:
228:OSsrc/os_core.c **** break;
229:OSsrc/os_core.c ****
230:OSsrc/os_core.c **** default:
231:OSsrc/os_core.c **** OS_EXIT_CRITICAL();
232:OSsrc/os_core.c **** *err = OS_ERR_EVENT_TYPE;
233:OSsrc/os_core.c **** return;
234:OSsrc/os_core.c **** }
235:OSsrc/os_core.c **** len = OS_StrLen(pname); /* Can we fit the string in the storage area?
236:OSsrc/os_core.c **** if (len > (OS_EVENT_NAME_SIZE - 1)) { /* No
237:OSsrc/os_core.c **** OS_EXIT_CRITICAL();
238:OSsrc/os_core.c **** *err = OS_ERR_EVENT_NAME_TOO_LONG;
239:OSsrc/os_core.c **** return;
240:OSsrc/os_core.c **** }
241:OSsrc/os_core.c **** (void)OS_StrCopy(pevent->OSEventName, pname); /* Yes, copy name to the event control block
242:OSsrc/os_core.c **** OS_EXIT_CRITICAL();
243:OSsrc/os_core.c **** *err = OS_NO_ERR;
244:OSsrc/os_core.c **** }
245:OSsrc/os_core.c **** #endif
246:OSsrc/os_core.c ****
247:OSsrc/os_core.c **** /*$PAGE*/
248:OSsrc/os_core.c **** /*
249:OSsrc/os_core.c **** ***************************************************************************************************
250:OSsrc/os_core.c **** * INITIALIZATION
251:OSsrc/os_core.c **** *
252:OSsrc/os_core.c **** * Description: This function is used to initialize the internals of uC/OS-II and MUST be called pri
253:OSsrc/os_core.c **** * creating any uC/OS-II object and, prior to calling OSStart().
254:OSsrc/os_core.c **** *
255:OSsrc/os_core.c **** * Arguments : none
256:OSsrc/os_core.c **** *
257:OSsrc/os_core.c **** * Returns : none
258:OSsrc/os_core.c **** ***************************************************************************************************
259:OSsrc/os_core.c **** */
260:OSsrc/os_core.c ****
261:OSsrc/os_core.c **** void OSInit (void)
262:OSsrc/os_core.c **** {
263:OSsrc/os_core.c **** #if OS_VERSION >= 204
264:OSsrc/os_core.c **** OSInitHookBegin(); /* Call port specific initializati
265:OSsrc/os_core.c **** #endif
266:OSsrc/os_core.c ****
267:OSsrc/os_core.c **** OS_InitMisc(); /* Initialize miscellaneous variab
268:OSsrc/os_core.c ****
269:OSsrc/os_core.c **** OS_InitRdyList(); /* Initialize the Ready List
270:OSsrc/os_core.c ****
271:OSsrc/os_core.c **** OS_InitTCBList(); /* Initialize the free list of OS_
272:OSsrc/os_core.c ****
273:OSsrc/os_core.c **** OS_InitEventList(); /* Initialize the free list of OS_
274:OSsrc/os_core.c ****
275:OSsrc/os_core.c **** #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
276:OSsrc/os_core.c **** OS_FlagInit(); /* Initialize the event flag struc
277:OSsrc/os_core.c **** #endif
278:OSsrc/os_core.c ****
279:OSsrc/os_core.c **** #if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
280:OSsrc/os_core.c **** OS_MemInit(); /* Initialize the memory manager
281:OSsrc/os_core.c **** #endif
282:OSsrc/os_core.c ****
283:OSsrc/os_core.c **** #if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
284:OSsrc/os_core.c **** OS_QInit(); /* Initialize the message queue st
285:OSsrc/os_core.c **** #endif
286:OSsrc/os_core.c ****
287:OSsrc/os_core.c **** OS_InitTaskIdle(); /* Create the Idle Task
288:OSsrc/os_core.c **** #if OS_TASK_STAT_EN > 0
289:OSsrc/os_core.c **** OS_InitTaskStat(); /* Create the Statistic Task
290:OSsrc/os_core.c **** #endif
291:OSsrc/os_core.c ****
292:OSsrc/os_core.c **** #if OS_VERSION >= 204
293:OSsrc/os_core.c **** OSInitHookEnd(); /* Call port specific init. code
294:OSsrc/os_core.c **** #endif
295:OSsrc/os_core.c ****
296:OSsrc/os_core.c **** #if OS_VERSION >= 270 && OS_DEBUG_EN > 0
297:OSsrc/os_core.c **** OSDebugInit();
298:OSsrc/os_core.c **** #endif
299:OSsrc/os_core.c **** }
300:OSsrc/os_core.c **** /*$PAGE*/
301:OSsrc/os_core.c **** /*
302:OSsrc/os_core.c **** ***************************************************************************************************
303:OSsrc/os_core.c **** * ENTER ISR
304:OSsrc/os_core.c **** *
305:OSsrc/os_core.c **** * Description: This function is used to notify uC/OS-II that you are about to service an interrupt
306:OSsrc/os_core.c **** * service routine (ISR). This allows uC/OS-II to keep track of interrupt nesting and
307:OSsrc/os_core.c **** * only perform rescheduling at the last nested ISR.
308:OSsrc/os_core.c **** *
309:OSsrc/os_core.c **** * Arguments : none
310:OSsrc/os_core.c **** *
311:OSsrc/os_core.c **** * Returns : none
312:OSsrc/os_core.c **** *
313:OSsrc/os_core.c **** * Notes : 1) This function should be called ith interrupts already disabled
314:OSsrc/os_core.c **** * 2) Your ISR can directly increment OSIntNesting without calling this function becaus
315:OSsrc/os_core.c **** * OSIntNesting has been declared 'global'.
316:OSsrc/os_core.c **** * 3) You MUST still call OSIntExit() even though you increment OSIntNesting directly.
317:OSsrc/os_core.c **** * 4) You MUST invoke OSIntEnter() and OSIntExit() in pair. In other words, for every
318:OSsrc/os_core.c **** * to OSIntEnter() at the beginning of the ISR you MUST have a call to OSIntExit() a
319:OSsrc/os_core.c **** * end of the ISR.
320:OSsrc/os_core.c **** * 5) You are allowed to nest interrupts up to 255 levels deep.
321:OSsrc/os_core.c **** * 6) I removed the OS_ENTER_CRITICAL() and OS_EXIT_CRITICAL() around the increment bec
322:OSsrc/os_core.c **** * OSIntEnter() is always called with interrupts disabled.
323:OSsrc/os_core.c **** ***************************************************************************************************
324:OSsrc/os_core.c **** */
325:OSsrc/os_core.c ****
326:OSsrc/os_core.c **** void OSIntEnter (void)
327:OSsrc/os_core.c **** {
328:OSsrc/os_core.c **** if (OSRunning == TRUE) {
329:OSsrc/os_core.c **** if (OSIntNesting < 255u) {
330:OSsrc/os_core.c **** OSIntNesting++; /* Increment ISR nesting level
331:OSsrc/os_core.c **** }
332:OSsrc/os_core.c **** }
333:OSsrc/os_core.c **** }
334:OSsrc/os_core.c **** /*$PAGE*/
335:OSsrc/os_core.c **** /*
336:OSsrc/os_core.c **** ***************************************************************************************************
337:OSsrc/os_core.c **** * EXIT ISR
338:OSsrc/os_core.c **** *
339:OSsrc/os_core.c **** * Description: This function is used to notify uC/OS-II that you have completed serviving an ISR.
340:OSsrc/os_core.c **** * the last nested ISR has completed, uC/OS-II will call the scheduler to determine whe
341:OSsrc/os_core.c **** * a new, high-priority task, is ready to run.
342:OSsrc/os_core.c **** *
343:OSsrc/os_core.c **** * Arguments : none
344:OSsrc/os_core.c **** *
345:OSsrc/os_core.c **** * Returns : none
346:OSsrc/os_core.c **** *
347:OSsrc/os_core.c **** * Notes : 1) You MUST invoke OSIntEnter() and OSIntExit() in pair. In other words, for every
348:OSsrc/os_core.c **** * to OSIntEnter() at the beginning of the ISR you MUST have a call to OSIntExit() a
349:OSsrc/os_core.c **** * end of the ISR.
350:OSsrc/os_core.c **** * 2) Rescheduling is prevented when the scheduler is locked (see OS_SchedLock())
351:OSsrc/os_core.c **** ***************************************************************************************************
352:OSsrc/os_core.c **** */
353:OSsrc/os_core.c ****
354:OSsrc/os_core.c **** void OSIntExit (void)
355:OSsrc/os_core.c **** {
356:OSsrc/os_core.c **** INT8U y;
357:OSsrc/os_core.c **** #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status regis
358:OSsrc/os_core.c **** OS_CPU_SR cpu_sr;
359:OSsrc/os_core.c ****
360:OSsrc/os_core.c ****
361:OSsrc/os_core.c ****
362:OSsrc/os_core.c **** cpu_sr = 0; /* Prevent compiler warning
363:OSsrc/os_core.c **** #endif
364:OSsrc/os_core.c **** if (OSRunning == TRUE) {
365:OSsrc/os_core.c **** OS_ENTER_CRITICAL();
366:OSsrc/os_core.c **** if (OSIntNesting > 0) { /* Prevent OSIntNesting from wrapping
367:OSsrc/os_core.c **** OSIntNesting--;
368:OSsrc/os_core.c **** }
369:OSsrc/os_core.c **** if (OSIntNesting == 0) { /* Reschedule only if all ISRs complete
370:OSsrc/os_core.c **** if (OSLockNesting == 0) { /* ... and not locked.
371:OSsrc/os_core.c **** #ifndef ALL_IN_ROM
372:OSsrc/os_core.c **** y = OSUnMapTbl[OSRdyGrp];
373:OSsrc/os_core.c **** OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);
374:OSsrc/os_core.c **** #else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -