原子哥,mdk代码之间变量定义是不允许的,但是像这种#define OS_ENTER_CRITICAL() {OS_CPU_SR cpu_sr = 0u; cpu_sr = OS_CPU_SR_Save();} 应该是属于函数开始定义吧。 类似于 void delay(int x) { int y=x*100; while(y--); } 作为延时函数被调用。我理解对吗? 回复 使用道具 举报 ...
OS是操作系统的简写 CPU_SR是CPU的status register 就是CPU的状态寄存器 你这个应该是ucos-ii或者其他操作系统里面的函数或者宏定义
OS_ENTER_CRITICAL 和OS_EXIT_CRITICAL 的实现方法有3种,取决于处理器的类型以及C编译器的特性。实现方法1 OS_CRITICAL_METHOD == 1 这是最简单的方法,直接使用处理器指令关中断;这种方式的缺点是: 如果在禁止中断的情况下,调用UCOSII功能函数,从函数返回时,中断可能会变成允许的!实现方法2 OS...
typedef unsigned int OS_CPU_SR; 指定堆栈的生长方向,cortex-m3的生长方向是高地址到低地址 #define OS_STK_GROWTH 1 选择cpu进入中断时候(临界段)的切换方式,有三种选择,第一是直接利用cpu的开关中断指令来实现,第二是通过堆栈保存和恢复cpu的状态,第三是通过编译器扩展功能 获取程序状态字,保存在变量cpu_sr中...
U8 err;#ifOS_CRITICAL_METHOD == 3//关中断的方法为3OS_CPU_SR cpu_sr;#endifOS_ENTER_CRITICAL(); OS_CPU_SysTickInit(100000000/OS_TICKS_PER_SEC); OS_EXIT_CRITICAL(); OSStatInit();//统计任务 优先级最低MyFirstSem= *(OSSemCreate(1));//PIT0_Init(50000000);UART4_Init(115200); ...
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' */ ...
OS_CPU_SR cpu_sr; #endif BOOLEAN tasks_waiting; if (OSIntNesting > 0) { /* ISR中,不允许删除信号量 */ *err = OS_ERR_DEL_ISR; return (pevent); } #if OS_ARG_CHK_EN > 0 if (pevent == (OS_EVENT *)0) { /* 参数验证 */ ...
OS_CPU_SR cpu_sr; #endif char s[100]; INT16S key; pdata = pdata; /* 这步是为了防止编译错误*/ TaskStartDispInit(); /* 初始化显示屏*/ OS_ENTER_CRITICAL(); PC_VectSet(0x08, OSTickISR); /*替换机器的时钟中断函数为uC/OS-II所需要的中断函数*/ ...
OSCPUSaveSR以及OSCPURestoreSR是在os_cpu_a.s文件中定义的,使用汇编指令实现的。 这种方法的优点就是安全可靠,缺点就是执行速度较上面两种慢,因为进入和退出临界区的汇编代码可能不止一条,而且还需要访问内存变量cpu_sr。 3、获取UCOS源码 可以在官网中获取一些单片机型号的示例代码,如下链接。
OS_CPU_SR cpu_sr; //OS_CPU_SR即为unsigned int endif if OS_EVENT_EN > 0 //OS_EVENT_EN 定义为:(((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0) || (OS_SEM_EN > 0) || (OS_MUTEX_EN > 0))//OS_EVENT_EN 定义为:能使队列代码产生&&申...