搜索
bottom↓
回复: 10

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

[复制链接]

出0入0汤圆

发表于 2018-10-22 15:14:39 | 显示全部楼层 |阅读模式
小弟最近在編寫程式時發現了三個警告,但我一值找不到解決的辦法

目前有三個我無法去除的警告
..\Src\Wayne_Init.c(42): warning:  #61-D: integer operation result is out of range
NVIC->IP[USART1_IRQn>>2]|=        2        <<        ( (USART1_IRQn&0x3)*8 + 6 );
..\Src\Wayne_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. }
复制代码




..\Src\Wayne_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
复制代码


請各位幫我看看,是不是我哪裡寫錯了

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入4汤圆

发表于 2018-10-22 16:27:11 | 显示全部楼层
立即数2, 0xf等默认是有符号数,0xF << 28之后,符号位变成1了,改成无符号数就可以了。写成:0xFu << 28,试一下。

出0入0汤圆

发表于 2018-10-22 15:17:35 | 显示全部楼层
最简单的办法,注释掉这部分,一行行打开看是哪里有问题

出0入0汤圆

 楼主| 发表于 2018-10-22 15:21:17 | 显示全部楼层
.titrwh 发表于 2018-10-22 15:17
最简单的办法,注释掉这部分,一行行打开看是哪里有问题

試過了,看不出為啥發生
然後系統掛掉...
畢竟這幾個是非常重要的關鍵性初始化

出0入0汤圆

发表于 2018-10-22 15:43:26 | 显示全部楼层
本帖最后由 TANK99 于 2018-10-22 15:44 编辑

没有错,就是这个死样子。移位多了就出 warning

出0入0汤圆

发表于 2018-10-22 15:48:02 | 显示全部楼层
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是这样配置的?

出0入0汤圆

发表于 2018-10-22 15:49:31 | 显示全部楼层
不过你这个确是越界了。

typedef struct
{
  __IO uint32_t ISER[8];                      /*!< Offset: 0x000  Interrupt Set Enable Register           */
       uint32_t RESERVED0[24];                                   
  __IO uint32_t ICER[8];                      /*!< Offset: 0x080  Interrupt Clear Enable Register         */
       uint32_t RSERVED1[24];                                    
  __IO uint32_t ISPR[8];                      /*!< Offset: 0x100  Interrupt Set Pending Register          */
       uint32_t RESERVED2[24];                                   
  __IO uint32_t ICPR[8];                      /*!< Offset: 0x180  Interrupt Clear Pending Register        */
       uint32_t RESERVED3[24];                                   
  __IO uint32_t IABR[8];                      /*!< Offset: 0x200  Interrupt Active bit Register           */
       uint32_t RESERVED4[56];                                   
  __IO uint8_t  IP[240];                      /*!< Offset: 0x300  Interrupt Priority Register (8Bit wide) */
       uint32_t RESERVED5[644];                                 
  __O  uint32_t STIR;                         /*!< Offset: 0xE00  Software Trigger Interrupt Register     */
}  NVIC_Type;

IP是 8bit 的数组

出0入0汤圆

 楼主| 发表于 2018-10-23 13:01:09 | 显示全部楼层
TANK99 发表于 2018-10-22 15:49
不过你这个确是越界了。

typedef struct

我這邊是32bit的

typedef struct
{
  __IO uint32_t ISER[1];                 /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register           */
       uint32_t RESERVED0[31];
  __IO uint32_t ICER[1];                 /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register          */
       uint32_t RSERVED1[31];
  __IO uint32_t ISPR[1];                 /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register           */
       uint32_t RESERVED2[31];
  __IO uint32_t ICPR[1];                 /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register         */
       uint32_t RESERVED3[31];
       uint32_t RESERVED4[64];
  __IO uint32_t IP[8];                   /*!< Offset: 0x300 (R/W)  Interrupt Priority Register              */
}  NVIC_Type;

出0入0汤圆

 楼主| 发表于 2018-10-23 13:02:50 | 显示全部楼层
banyai 发表于 2018-10-22 16:27
立即数2, 0xf等默认是有符号数,0xF

看來真是因為有號無號的問題
感謝
我之前都不知道 0x??是默認為有號

出0入0汤圆

 楼主| 发表于 2018-10-23 13:10:02 | 显示全部楼层
TANK99 发表于 2018-10-22 15:49
不过你这个确是越界了。

typedef struct

不過看來警告也是跟7樓說的一樣
是因為莫認為有號的關係

出0入0汤圆

 楼主| 发表于 2018-10-23 13:11:53 | 显示全部楼层
mangolu 发表于 2018-10-22 15:48
0b0011向左移位如果是32位,肯定是超出范围 了!同样,下面的移位也是。

大哥舉例的,這種NVIC是使用有保護的函式庫
即使設定有誤也不會導致全面崩潰
而小弟公司使用的晶片容量小塞不進去
所以改用自己編寫的方式
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-18 12:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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