OpenEdv-开源电子网

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

UCOSIII的疑问,大家想过这些问题没?

[复制链接]

39

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2014-11-7
在线时间
44 小时
发表于 2015-4-24 10:52:44 | 显示全部楼层 |阅读模式
5金钱
针对UCOSIII的移植,自己完成了大半年了, 在自己又一遍的时候,觉得自己可以独立试着移植的时候,我觉得移植改动的地方不多呀,一个得为系统提供时间基准,  SysTick便用上了,
在初始化时看到原子哥 用的 N多寄存器,看完我参考的资料里面只用了一句? SysTick_Config(SystemCoreClock/OS_CFG_TICK_RATE_HZ);     //OS_CFG_TICK_RATE_HZ这个为宏定义、
SystemCoreClock为系统时钟  函数在core_cm3.h(曾看到过帖子说这个问价删了没用,大概用处在此吧),代码如下


static __INLINE uint32_t SysTick_Config(uint32_t ticks)

  if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            /* Reload value impossible */
                                                               
  SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;      /* set reload register */
  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Cortex-M0 System Interrupts */
  SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk | 
                   SysTick_CTRL_TICKINT_Msk   | 
                   SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */
  return (0);                                                  /* Function successful */
}
那么问题就来了?  这个滴答中断的优先级在哪儿呢?  顺藤摸瓜 来看看  
static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
{
  if(IRQn < 0) {
    SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M3 System Interrupts */
  else {
    NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff);    }        /* set Priority for device specific Interrupts  */
}

自己算了下  直接把滴答的中断优先级设置为 1110 0000    也就是0XE0    ( __NVIC_PRIO_BITS 的宏定义为         4 
怎么回事呀?  把滴答的优先级设置的这么低?  立马想到原子哥 的  中断寄存器设置为 0XFF见附图


那么 问题就来了,这么低的优先级 如果别的中断抢占了的话,岂不是整个延时 什么的都不准了么?  新手 还望高手别见笑!

再牛逼的梦想都禁不住傻逼的坚持!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-4-24 12:14:21 | 显示全部楼层
将滴答定时器优先级设置为最低是会导致计时不准的,其他中断的中断处理函数一定要快!快速处理完
开往春天的手扶拖拉机
回复

使用道具 举报

39

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2014-11-7
在线时间
44 小时
 楼主| 发表于 2015-4-24 13:26:47 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
那我们 应该怎么设置呢?我见原子哥的是设置为低了!
再牛逼的梦想都禁不住傻逼的坚持!
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-4-24 14:55:52 | 显示全部楼层
就设置到最低就可以了。
开往春天的手扶拖拉机
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 15:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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