收藏官网首页
查看: 59712|回复: 2

[求助] ESP8266 SOC方案枚举数据点总是越界,无默认值

5

主题

28

帖子

321

积分

中级会员

Rank: 3Rank: 3

积分
321
跳转到指定楼层
楼主
发表于 2018-9-21 14:40:32 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
免费使用STM32、APP自动代码生成工具
本帖最后由 simonliu009 于 2018-9-21 14:43 编辑

你好:
我现在用SOC源码定义了一个枚举数据点,如下:

显示名称:风力模式
标识名:windmode
读写类型:可写
数据类型:枚举

枚举范围:0.普通 1.自然风 2.睡眠风

备注: 风力模式调节



但是现在遇到了问题:
1. 使用了机智云通用APP进行控制,但是每次打开APP,默认总是没有选择任何值,如图

2. 同时看Log有提示越界:[ERROR] valuewindmode Error , Illegal Overstep
值是-1


3. 代码中,只在user_main.c的按键里面更改枚举值:
  1. LOCAL void ICACHE_FLASH_ATTR key2LongPress(void)
  2. {

  3.         currentDataPoint.valuewindmode = (currentDataPoint.valuewindmode + 1)%3;
  4.         GIZWITS_LOG(" \r\n ========== Windmode changes to: %d ========== \r\n", currentDataPoint.valuewindmode);
  5. }
复制代码


所以我的问题是:1. 枚举数据点是否有默认值?

2. 哪里的代码会导致枚举值为-1?

3. 对于这个问题有什么建议?

enum datapoint.png (45.8 KB, 下载次数: 64)

enum datapoint.png

15

主题

135

帖子

2183

积分

金牌会员

Rank: 6Rank: 6

积分
2183
沙发
发表于 2018-9-21 15:12:38 | 只看该作者
  1. void ICACHE_FLASH_ATTR userInit(void)
  2. {
  3.     gizMemset((uint8_t *)¤tDataPoint, 0, sizeof(dataPoint_t));

  4.         /** Warning !!! DataPoint Variables Init , Must Within The Data Range **/
  5.     /*
  6.                    currentDataPoint.valueLED_OnOff = ;
  7.                    currentDataPoint.valueLED_Color = ;
  8.                    currentDataPoint.valueLED_R = ;
  9.                    currentDataPoint.valueLED_G = ;
  10.                    currentDataPoint.valueLED_B = ;
  11.                    currentDataPoint.valueMotor_Speed = ;
  12.                    currentDataPoint.valueInfrared = ;
  13.                    currentDataPoint.valueTemperature = ;
  14.                    currentDataPoint.valueHumidity = ;
  15.                    currentDataPoint.valueAlert_1 = ;
  16.                    currentDataPoint.valueAlert_2 = ;
  17.                    currentDataPoint.valueFault_LED = ;
  18.                    currentDataPoint.valueFault_Motor = ;
  19.                    currentDataPoint.valueFault_TemHum = ;
  20.                    currentDataPoint.valueFault_IR = ;
  21.     */
  22. }
复制代码
在gizwits_product.c文件中 ,userInit函数是赋初值的地方,另外枚举类型的在没有明确赋值的情况下,默认是从0开始,依次递增+1

点评

默认是0  详情 回复 发表于 2018-9-21 15:14

5

主题

28

帖子

321

积分

中级会员

Rank: 3Rank: 3

积分
321
板凳
 楼主| 发表于 2018-9-21 15:14:28 | 只看该作者
Seasonic 发表于 2018-9-21 15:12
在gizwits_product.c文件中 ,userInit函数是赋初值的地方,另外枚举类型的在没有明确赋值的情 ...

默认是0
  1. void ICACHE_FLASH_ATTR userInit(void)
  2. {
  3.     gizMemset((uint8_t *)&currentDataPoint, 0, sizeof(dataPoint_t));

  4.         /** Warning !!! DataPoint Variables Init , Must Within The Data Range **/

  5.                    currentDataPoint.valueoscillating = 0;
  6.                    currentDataPoint.valuepower = 0;
  7.                    currentDataPoint.valuewindmode = 0;
  8.                    currentDataPoint.valuespeed = 0;

  9. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

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