找回密码
 立即注册

使用微信账号登录

只需一步,快速开始

查看: 6557|回复: 9

[CSR8系列] source例程有一段代码完全不理解

[复制链接]
连续签到天数:1天
签到总天数:1023天
签到总奖励:12600金币
发表于 2016-12-7 16:38:11 | 显示全部楼层 |阅读模式
悬赏10金币已解决
本帖最后由 pkuzhx 于 2016-12-7 16:41 编辑

在source_states.c中,有一个函数states_set_state,按字面和注释理解,应该实现的功能是进入一个新的state,代码如下。
  1. /****************************************************************************
  2. NAME   
  3.     states_set_state - Sets the new application state
  4. */
  5. void states_set_state(SOURCE_STATE_T new_state)
  6. {
  7.     if (new_state < SOURCE_STATES_MAX)
  8.     {
  9.         SOURCE_STATE_T old_state = theSource->app_data.app_state;
  10.         
  11.         /* leaving current state */
  12.         states_exit_state(new_state);
  13.         
  14.         /* store new state */
  15.         theSource->app_data.app_state = new_state;
  16.         STATES_DEBUG(("STATE: new state [%s]\n", state_strings[new_state]));
  17.         
  18.         /* entered new state */
  19.         states_enter_state(old_state);               
  20.         
  21.         /* fudge states reported to Host, so that IDLE state is converted to a known state */
  22.         if (new_state == SOURCE_STATE_IDLE)
  23.         {
  24.             theSource->app_data.pre_idle_state = old_state;
  25.             new_state = theSource->app_data.pre_idle_state;
  26.         }   
  27.         if (old_state == SOURCE_STATE_IDLE)
  28.         {
  29.             old_state = theSource->app_data.pre_idle_state;
  30.         }
  31.         if (old_state != new_state)
  32.         {
  33.             /* send new state via Vendor USB command */
  34.             usb_send_vendor_state();

  35. #ifdef INCLUDE_LEDS            
  36.             /* update LED state indication */
  37.             leds_show_state(new_state);
  38. #endif /* INCLUDE_LEDS */              
  39.         }
  40.     }
  41. }
复制代码
我的理解是,应该先退出旧的状态,再进入新的状态,即:
  1.         /* leaving current state */
  2.         states_exit_state(old_state);
  3.         
  4.         /* entered new state */
  5.         states_enter_state(new_state);
复制代码

可是例程中确实完全相反的,它是先退出新状态,然后又进入了旧的状态,我完全不能理解。

但是例程不可能是错的啊,谁能告诉我,我哪里理解错了?






最佳答案

查看完整内容

对,就是这样啦,进入 之后,switch里面调用的函数是 不是使用开头的的参数;
楼主热帖
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!

暂无签到数据

发表于 2016-12-7 16:38:12 | 显示全部楼层
pkuzhx 发表于 2016-12-7 16:52
好吧,是我自己想当然了states_enter_state并不是进入参数中的state,而是读取source state后,进入这个sta ...

对,就是这样啦,进入
  1. static void states_exit_state(SOURCE_STATE_T new_state)
  2. {
  3.     switch (states_get_state())
  4.     {
  5.         case SOURCE_STATE_INITIALISING:
  6.         {
  7.             states_exit_state_initialising();
  8.         }
  9.         break;
复制代码


之后,switch里面调用的函数是
  1. states_get_state()
复制代码

不是使用开头的的参数;
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复

使用道具 举报

连续签到天数:1天
签到总天数:1023天
签到总奖励:12600金币
 楼主| 发表于 2016-12-7 16:42:10 | 显示全部楼层
论坛的代码功能<>好像有时会有bug,修改了好几次才搞好。
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复

使用道具 举报

连续签到天数:1天
签到总天数:1023天
签到总奖励:12600金币
 楼主| 发表于 2016-12-7 16:52:39 | 显示全部楼层
好吧,是我自己想当然了states_enter_state并不是进入参数中的state,而是读取source state后,进入这个state
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复

使用道具 举报

连续签到天数:1天
签到总天数:1023天
签到总奖励:12600金币
 楼主| 发表于 2016-12-8 08:49:58 | 显示全部楼层
luckcee 发表于 2016-12-7 18:06
对,就是这样啦,进入

之后,switch里面调用的函数是

嗯,多谢。刚开始确实想当然了
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复

使用道具 举报

连续签到天数:1天
签到总天数:881天
签到总奖励:11162金币
发表于 2016-12-8 08:58:55 | 显示全部楼层
传入的参数不是用来改变状态的
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复

使用道具 举报

连续签到天数:1天
签到总天数:1023天
签到总奖励:12600金币
 楼主| 发表于 2016-12-8 09:00:28 | 显示全部楼层
co9 发表于 2016-12-8 08:58
传入的参数不是用来改变状态的

是的,刚开始没有看函数实现,按照字面去理解了
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复

使用道具 举报

连续签到天数:1天
签到总天数:881天
签到总奖励:11162金币
发表于 2016-12-8 09:25:45 | 显示全部楼层
函数名和参数看起来确实有很大的歧义
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复

使用道具 举报

连续签到天数:1天
签到总天数:201天
签到总奖励:2777金币
发表于 2016-12-9 12:15:38 | 显示全部楼层
,学习了!
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复

使用道具 举报

连续签到天数:1天
签到总天数:494天
签到总奖励:15082金币
发表于 2017-5-9 11:30:19 | 显示全部楼层
了解一下.
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|我爱蓝牙网 - 52Bluetooth

GMT+8, 2024-4-20 04:52 , Processed in 0.208514 second(s), 25 queries , Gzip On, MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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