- 博客(20)
- 收藏
- 关注
原创 Pend Lists
typedef struct os_pend_data OS_PEND_DATA; //在等待对象任务的堆栈中分配 即OSxxxPend()所在任务typedef struct os_pend_list OS_PEND_LIST; //被封装到OS_PEND_OBJ中typedef struct os_pend_obj
2016-02-21 19:28:42
770
原创 os_pend_multi.c
这个功能没有用过。OS_OBJ_QTY OSPendMulti (OS_PEND_DATA *p_pend_data_tbl, OS_OBJ_QTY tbl_size, OS_TICK timeout,
2016-02-21 19:21:27
1142
原创 os_int.c
uC在处理从中断中post事件有两个模式:Direct、Deferred Post 。配置OS_CFG_ISR_POST_DEFERRED_EN选择两种模式。个人比较倾向于Direct。此文件中的函数与Deferred有关。typedef struct os_int_q OS_INT_Q;struct os_i
2016-02-21 19:19:13
882
原创 os_flag.c
typedef struct os_flag_grp OS_FLAG_GRP;struct os_flag_grp { /* Event Flag Group */
2016-02-21 19:16:53
1125
原创 os_mem.c
typedef struct os_mem OS_MEM;struct os_mem { /* MEMORY CONTROL BLOCK */ OS_OBJ_TYPE
2016-02-21 19:14:36
430
原创 os_mutex.c
Mutex:一种特殊类型的binary semaphores,可以克服优先级翻转。typedef struct os_mutex OS_MUTEX;struct os_mutex { /* Mutual Exclusion Semaphore
2016-02-21 19:13:42
609
原创 os_sem.c
共享资源的方法:关中断、关调度器、Sem、Mutex。 关中断:任务与中断共享资源的唯一方法(CPU_SR_ALLOC(); CPU_CRITICAL_ENTER(); *****; CPU_CRITICAL_EXIT();)。 关调度:当调度被关闭的时候,中断是开启的,当中断发生时,ISR会立即执行,执行完不管有没有高优先级的任务,都会回到被中断的任务。(OSSch
2016-02-21 19:10:22
1659
原创 os_q.c
生产者、消费者模式是个好东西,可以多多利用。typedef struct os_q OS_Q;struct os_q { /* Message Queue
2016-02-21 19:06:42
620
原创 os_msg.c
typedef struct os_msg OS_MSG;typedef struct os_msg_pool OS_MSG_POOL;typedef struct os_msg_q OS_MSG_Q;struct os_msg {
2016-02-21 19:04:10
603
原创 os_task.c
typedef struct os_tcb OS_TCB;struct os_tcb { CPU_STK *StkPtr; /* Pointer to current top of stack */任务栈顶
2016-02-21 18:59:58
2386
原创 os_tmr.c
回调函数OS_TMR_CALLBACK_PTR在OS_TmrTask的上下文中执行,执行时调度器锁状态,在回调函数中需要确保不要有阻塞操作,并且要确保OS_TmrTask的堆栈不要溢出。typedef void (*OS_TMR_CALLBACK_PTR)(void *p_tmr, void *p_arg);typedef st
2016-02-21 18:55:24
1422
原创 os_time.c
void OSTimeTick (void): 处理System Tick,在System Tick中断函数中调用。 调用钩子函数,根据OS_CFG_ISR_POST_DEFERRED_EN给OSTickTask发出Sem,根据OS_CFG_SCHED_ROUND_ROBIN_EN调用时间片轮询,根据OS_CFG_TMR_EN当OSTmrUpdateCtr==0时给OST
2016-02-21 18:54:06
559
原创 os_tick.c
typedef struct os_tick_spoke OS_TICK_SPOKE;struct os_tick_spoke { OS_TCB *FirstPtr; /* Pointer to list of tasks in tick spoke
2016-02-21 18:50:32
2204
原创 os_core.c
os_core.c :OS的核心函数(例如:OSInit()初始化uC , OSSched()任务级别调度 , OSIntExit() 中断级别调度,pend,post,PendList,RdyList管理等)。void OSInit (OS_ERR *p_err): 调用初始化钩子函数 (设置中断使用的堆栈地址) 初始化系统全局变量
2016-02-21 18:46:53
1262
原创 os_prio.c
CPU_DATA OSPrioTbl[OS_PRIO_TBL_SIZE]; //bitmap定义 保存要运行和正在运行任务的优先级void OS_PrioInit (void) : 清空bitmap(OSPrioTbl) OS_PRIO OS_PrioGetHighest (void) : 确定最高优先
2016-02-21 18:42:54
848
原创 Ready List
typedef struct os_rdy_list OS_RDY_LIST;struct os_rdy_list { OS_TCB *HeadPtr; /* Pointer to task that will run at selected priority
2016-02-21 18:40:35
530
原创 uC CPU port
cpu_core.c :CPU相关初始化(时间戳,测量中断时间,CPUName),模拟CLZ(count leading zeros)指令,测量中断关闭时间方法等。cpu_core.h :cpu_core.c的函数、变量声明。cpu_def.h :CPU模块使用的各种#define(大端小端字节序、堆栈的增长方向、Critical Section处理)cpu.h :CPU模块
2016-02-21 18:37:24
1333
原创 uC OSIII port
os_cpu.h : OS_TASK_SW()、OSIntCtxSw()任务切换宏声明、OSStartHighRdy()、OS_SysTick相关方法声明。 OS_CPU_CFG_SYSTICK_PRIO:设置SysTick的中断优先级 中断优先级只有高四位有效 OS_CPU_ExceptStkBase:MSP中断使用的堆栈地址
2016-02-21 18:35:41
816
原创 读uCOSIII源码笔记
首先谈一下自己读RTOS的粗略认识吧,刚开始接触单片机时使用的都是while(true),一个循环处理所有的任务。直到写了一个通过GPRS模块与上层服务通信(长连接)之后,才发现在while(true)中处理好恶心,老是掉线之后连接不上。可能是对AT指令的处理没有搞好,就开始各种找怎么解决,接触到了uC/OSIII,阅读了他提供的文档,阅读了源代码,慢慢看,感觉进步很多,用着用着就爱上了。
2016-02-21 18:31:59
8156
原创 Atomthreads&STM8S207C8
Atomthreads is a free, lightweight, portable, real-time scheduler for embedded systems.在STM8S207C8上跑AtomThreads嵌入式系统,AtomThreads官网有移植到STM8S207C8的工程可以下载。
2015-08-31 18:49:48
3792
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人