Keil v5 警告問題 找不到警告的原因

2019-12-16 22:38发布

小弟最近在編寫程式時發現了三個警告,但我一值找不到解決的辦法

目前有三個我無法去除的警告
..SrcWayne_Init.c(42): warning:  #61-D: integer operation result is out of range
NVIC->IP[USART1_IRQn>>2]|=        2        <<        ( (USART1_IRQn&0x3)*8 + 6 );
..SrcWayne_Init.c(42): warning:  #68-D: integer conversion resulted in a change of sign
NVIC->IP[USART1_IRQn>>2]|=        2        <<        ( (USART1_IRQn&0x3)*8 + 6 );

這兩項的來源是中斷(NVIC的初始化)

  1. void        Wayne_Init_NVIC(void)
  2. {
  3.                 NVIC->IP[TIM16_IRQn>>2]        |=        3        <<        ( (TIM16_IRQn&0x3)*8 + 6 );        //設定優先權3
  4.                 NVIC->IP[USART1_IRQn>>2]        |=        2        <<        ( (USART1_IRQn&0x3)*8 + 6 );        //設定優先權3
  5.                
  6.                 NVIC->ISER[0]                                |=        1        <<        TIM16_IRQn                                //TIM16中斷啟用
  7.                                                                 |        1        <<        USART1_IRQn;                                //USART1中斷啟用
  8. }
复制代码



..SrcWayne_Init.c(78): warning:  #61-D: integer operation result is out of range
I2C1->TIMINGR        =                0x0F<<        28
這一項的來源是中斷(I2C的初始化)
  1.                 I2C1->TIMINGR        =                0x0F<<        28        //除頻值= 48M/(7+1)                =        3MHz
  2.                                                 |                0x0F<<        20        //數據建立時間(4bit)        =        16
  3.                                                 |                0x0F<<        16        //數據保持時間(4bit)        =        16
  4.                                                 |                0xFF<<        8        //高電平保持時間(8bit)=        32
  5.                                                 |                0xFF<<        0;        //低電平保持時間(8bit)=        32
复制代码

請各位幫我看看,是不是我哪裡寫錯了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
banyai
1楼-- · 2019-12-17 04:00
 精彩回答 2  元偷偷看……
.titrwh
2楼-- · 2019-12-17 09:16
最简单的办法,注释掉这部分,一行行打开看是哪里有问题
陳聖文
3楼-- · 2019-12-17 14:58
.titrwh 发表于 2018-10-22 15:17
最简单的办法,注释掉这部分,一行行打开看是哪里有问题

試過了,看不出為啥發生
然後系統掛掉...
畢竟這幾個是非常重要的關鍵性初始化
TANK99
4楼-- · 2019-12-17 17:37
本帖最后由 TANK99 于 2018-10-22 15:44 编辑

没有错,就是这个死样子。移位多了就出 warning
mangolu
5楼-- · 2019-12-17 17:51
0b0011向左移位如果是32位,肯定是超出范围 了!同样,下面的移位也是。
  1. 1 /**
  2. 2   * @brief  配置嵌套向量中断控制器 NVIC
  3. 3   * @param  无
  4. 4   * @retval 无
  5. 5   */
  6. 6 static void NVIC_Config_PWM(void)
  7. 7 {
  8. 8     NVIC_InitTypeDef NVIC_InitStructure;
  9. 9  
  10. 10     /* Configure one bit for preemption priority */
  11. 11     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  12. 12  
  13. 13     /* 配置 TIM3_IRQ 中断为中断源 */
  14. 14     NVIC_InitStructure.NVIC_IRQChannel = BRE_TIMx_IRQn;
  15. 15     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  16. 16     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
  17. 17     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  18. 18     NVIC_Init(&NVIC_InitStructure);
  19. 19 }
复制代码

为什么人家的NVIC是这样配置的?
TANK99
6楼-- · 2019-12-17 21:37
 精彩回答 2  元偷偷看……

一周热门 更多>