OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8202|回复: 5

初学uCosiii,现在想在app里面调用OS_CRITICAL_ENTER();和OS_CRITICAL_EXIT(); MDK编译总是报错,请大侠指点啊!!!

[复制链接]

6

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
437
金钱
437
注册时间
2013-4-9
在线时间
76 小时
发表于 2015-7-22 12:22:34 | 显示全部楼层 |阅读模式
5金钱
报错:..\App\app.c(261): error:  #20: identifier "cpu_sr" is undefined
app.c 已经包含了#include "includes.h"
includes中包含了如下文件:
#include  <stdio.h>
#include  <string.h>
#include  <ctype.h>
#include  <stdlib.h>
#include  <stdarg.h>
#include  <math.h>
#include  <os.h>
#include  <cpu.h>
#include  <lib_def.h>
#include  <lib_ascii.h>
#include  <lib_math.h>
#include  <lib_mem.h>
#include  <lib_str.h>
#include  <app_cfg.h>
#include  <bsp.h>

最佳答案

查看完整内容[请看2#楼]

如果要使用OS_CRITICAL_ENTER()和OS_CRITICAL_EXIT()的话需要在函数的开始地方调用下面两句 OS_ERR err; CPU_SR_ALLOC();
签名必须手写!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-7-22 12:22:35 | 显示全部楼层
如果要使用OS_CRITICAL_ENTER()和OS_CRITICAL_EXIT()的话需要在函数的开始地方调用下面两句
OS_ERR err;
CPU_SR_ALLOC();

开往春天的手扶拖拉机
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-7-22 13:50:46 | 显示全部楼层
你需要在函数内添加
#if OS_CRITICAL_METHOD == 3  
OS_CPU_SR   cpu_sr = 0;  
#endif
//......
OS_ENTER_CRITICAL();  
//.......
OS_EXIT_CRITICAL();
//......
这才是标准的开关临界区代码
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-7-22 13:51:34 | 显示全部楼层
OS_CRITICAL_METHOD要定义为3
在os_cpu.h里面
回复

使用道具 举报

6

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
437
金钱
437
注册时间
2013-4-9
在线时间
76 小时
 楼主| 发表于 2015-7-22 14:13:16 | 显示全部楼层
回复【2楼】zc123:
---------------------------------
uCosIII这样定义的,
#define  CPU_CFG_CRITICAL_METHOD    CPU_CRITICAL_METHOD_STATUS_LOCAL

typedef  CPU_INT32U                 CPU_SR;                     /* Defines   CPU status register size (see Note #3b).   */

                                                                /* Allocates CPU status register word (see Note #3a).   */
#if     (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
#define  CPU_SR_ALLOC()             CPU_SR  cpu_sr = (CPU_SR)0
#else
#define  CPU_SR_ALLOC()
#endif
签名必须手写!
回复

使用道具 举报

6

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
437
金钱
437
注册时间
2013-4-9
在线时间
76 小时
 楼主| 发表于 2015-7-22 15:37:41 | 显示全部楼层
回复【5楼】zuozhongkai:
---------------------------------
我刚刚找到这个原因,哈哈哈,不过还是要谢谢!!!
使用OS_CRITICAL_ENTER()和OS_CRITICAL_EXIT()前要调用CPU_SR_ALLOC();
签名必须手写!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 16:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表