OpenEdv-开源电子网

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

μc/os 中 adc采样时间控制

[复制链接]

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-9-23 08:22:35 | 显示全部楼层 |阅读模式
5金钱
我把可以跑的adc采样例程加入到μc/os里面,采样时间那里,systick那个flag一直不翻转为1,永远0.打印看到给的重载值一直是300不递减。不加入系统的话一切正常。不知道μc/os里面如何实现采样时间控制呢?

最佳答案

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

用我们的system文件夹,直接支持ucosii
小小蜗牛
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-9-23 08:22:36 | 显示全部楼层
用我们的system文件夹,直接支持ucosii
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1841
金钱
1841
注册时间
2014-6-27
在线时间
982 小时
发表于 2014-9-23 08:22:36 | 显示全部楼层
回复【5楼】jiutianshenjian:
---------------------------------
看来你对节拍还是没有什么概念,给个例子给你看看
//adc任务
void adc_task(void *pdata)
{   
u8 getADC;
while(1)
{
if(catchTemperatureParameter(ADC_CH0,&getADC,21,9,20))
{
if(getADC>=HIGH_TEMP)
{
drive_fan(FAN_ON);
   
                                                               }
else if(getADC<LOW_TEMP)
{
 drive_fan(FAN_OFF);
 
                                                                }

}   
OSTimeDly(1);
}

}
OSTimeDly(1);是不是1个节拍进来扫描一次,函数里面不要有延时,查询就行了,函数的实参20就代表20*节拍ADC一次,不就实现时间控制了,你说的SysTick_Config()我没看到这个函数。>
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-9-23 11:13:44 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
大哥您好,我还想问个问题。我用OSTimeGet();得到的数字网上说是时钟节拍,怎么理解呢? 和SysTick_Config(72M/1000)设定的1ms有什么关系没有?
小小蜗牛
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1841
金钱
1841
注册时间
2014-6-27
在线时间
982 小时
发表于 2014-9-23 13:40:14 | 显示全部楼层
回复【3楼】jiutianshenjian:
---------------------------------
UCOS里面的延时函数就具有的调度和延时的作用,在一个任务里面直接使用,就可以很方便的控制采样时间了。
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-9-23 15:55:47 | 显示全部楼层
回复【4楼】TinyBoy:
---------------------------------
能说仔细点吗,OSTimeDlyHMSM()可以实现吗?又发现一个问题,SysTick_Config()定义里面,ticks-1干嘛?如果输入ticks是2,减去1,从1数到0不是只有1个脉冲吗?
小小蜗牛
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-9-23 19:19:48 | 显示全部楼层
回复【6楼】TinyBoy:
---------------------------------
先谢谢了,我再想想
小小蜗牛
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-9-23 19:28:36 | 显示全部楼层
回复【6楼】TinyBoy:
---------------------------------
我怎么让OSTimeDly(1)之后执行adc呢?延时之后不是cpu继续查找就绪任务中优先级最高的任务执行吗。我怎么控制让1个节拍执行adc呢?前面没加入μc的时候做法是那个systick到0就触发systick中断,中断函数去调用adc。用这个我完全没概念了,很晕。
小小蜗牛
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-9-24 00:28:58 | 显示全部楼层
回复【8楼】jiutianshenjian:
---------------------------------
和你写死循环代码一样。
delay之后
ADC采集就是。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1841
金钱
1841
注册时间
2014-6-27
在线时间
982 小时
发表于 2014-9-24 08:12:06 | 显示全部楼层
回复【8楼】jiutianshenjian:
---------------------------------
OSTimeDly(1)除了delay的作用以外,还有调度的作用,就根据这个来做delay,只是它不是空delay,调用它之后,它就调度去了,并且在每次节拍中断以后查询dealy计数减到0了没有,到0了,又进来,所以,dealy也实现了,其他事情也同时做了,就说这个可以知道的delay时间,你要做什么事情不是随便可以控制了么。
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-9-24 09:04:45 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
我看了下书,把adc采样函数放在 App_TimeTickHook()里面了,时间一到就去执行了。这么干没问题吧?
小小蜗牛
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-9-24 09:08:06 | 显示全部楼层
回复【10楼】TinyBoy:
---------------------------------
如果不把adc采样函数放到钩子函数里面,延时到了不知道去哪执行吧?其实钩子函数啥意思,也没搞懂。就发现放里面可以用。
小小蜗牛
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1841
金钱
1841
注册时间
2014-6-27
在线时间
982 小时
发表于 2014-9-24 09:43:26 | 显示全部楼层
回复【12楼】jiutianshenjian:
---------------------------------

UCOS的特点是节拍和任务调度,你应该把你做的事情作为一个任务,你放里面执行可以,但是你最终还是要回到任务里面来,而且那里的函数都是用宏选择的,你在里面使用,要关心的东西很多,你应该用它提供给你的任务接口来建立自己的任务,设置好节拍就可以了,方便程序管理。
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-9-24 10:16:49 | 显示全部楼层
回复【13楼】TinyBoy:
---------------------------------
那我直接放任务函数里,给个延时就行了。让他自己跑吧。谢谢了
小小蜗牛
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-1 03:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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