一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种模拟I2C通信方法及系统与流程

2022-07-16 15:11:13 来源:中国专利 TAG:

一种模拟i2c通信方法及系统
技术领域
1.本发明涉及系统任务调度技术领域,尤其涉及一种模拟i2c通信方法及系统。


背景技术:

2.当高级任务获得资源进入就绪状态时,低级任务就从执行状态退出到就绪状态,让高级任务执行,这称为抢占式任务调度机制。
3.在现有的模拟i2c技术中,各个i2c从设备对应的程序是分别调用模拟i2c模块来向对应的i2c从设备发送数据,这在时间片单循环软件中是没有问题的。
4.但是,在freertos操作系统中使用抢占式任务机制,由于各个i2c从设备对应的程序具有不同的优先级。因此,有可能当程序1(例如收音)正在发送i2c数据时,系统调度了更高优先级的程序2(例如音量调节),打断了程序1的模拟i2c数据发送,开始发送程序2的模拟i2c数据,造成程序1的i2c数据发送异常,导致操作指令乃至系统异常。


技术实现要素:

5.本发明提供一种模拟i2c通信方法及系统,解决了现有的freertos操作系统使用抢占式任务机制,使得模拟i2c通信系统在任务调度过程中,通信中断造成i2c数据发送异常,进而导致操作指令乃至系统异常的技术问题。
6.为解决以上技术问题,本发明提供一种模拟i2c通信方法,包括步骤:
7.s1、设置一个i2c发送任务,并将其配置为最高优先级;
8.s2、根据预设策略和所述i2c发送任务,执行当前待办任务进行多轮单帧数据发送;
9.s3、当检测到更高优先级的目标待办任务时,判断本轮单帧数据发送是否完成,若是根据所述预设策略执行所述目标待办任务进行多轮单帧数据发送;否则继续执行本轮单帧数据;
10.s4、当检测到所述目标待办任务执行完成后,恢复执行所述当前待办任务的执行。
11.本基础方案在原有的抢占式任务机制上进行改进,将i2c发送任务的发送规则设置为多轮单帧数据发送,每轮只发送一帧数据;而当检测到比当前待办任务更高优先级的目标待办任务时,在本轮单帧数据发送完成后,再执行目标待办任务,如此,在各从设备进行模拟i2c通信时,低优先级的从设备与主控器的通信不会被高优先级从设备随意打断,数据发送过程中单帧数据完整,且能够快速执行高优先级目标待办任务。
12.在进一步的实施方案中,所述将其配置为最高优先级具体为:将所述i2c发送任务的优先级配置为高于所有i2c从设备对应的数据任务的优先级。
13.本方案将i2c发送任务配置为高于所有i2c从设备对应的数据任务的优先级,保证在rtos中,任何时刻只有一个任务在运行。当其中一个从设备对应的数据任务调用模拟i2c模块发送i2c数据时,就算有其它从设备的数据任务就绪,也无法打断当前i2c数据的发送,只有当前待办任务的当前帧发送完毕后,i2c发送任务才会根据任务的优先级接收优先级
高的数据任务(即目标待办任务)的数据发送申请,从而有效避免了模拟i2c冲突。
14.在进一步的实施方案中,所述步骤s2包括步骤:
15.s21、控制当前待办任务进入执行状态,并依次序将对应第一i2c数据中的一帧数据发送到所述i2c发送任务;
16.s22、控制所述当前待办任务转入挂起状态;
17.s23、所述i2c发送任务接收所述第一i2c数据的当前帧,并根据其中的从设备地址发送给对应的i2c从设备;
18.s24、当所述当前帧发送完毕后,判断在就绪的任务中,是否有比所述当前待办任务更高优先级的待办任务,如果有则将其确定为目标待办任务并进入步骤s3,否则返回步骤s21。
19.在进一步的实施方案中,所述步骤s22具体为:调用vtasksuspend()api函数使所述当前待办任务进入挂起状态。
20.在进一步的实施方案中,所述根据所述预设策略执行所述目标待办任务进行多轮单帧数据发送包括步骤:
21.a、控制所述目标待办任务进入执行状态,并依次序将对应第二i2c数据中的一帧数据发送到所述i2c发送任务;
22.b、控制所述目标待办任务转入挂起状态;
23.c、所述i2c发送任务接收所述第二i2c数据的当前帧,并根据其中的从设备地址发送给对应的i2c从设备;
24.d、判断所述第二i2c数据是否发送完毕,若是进入步骤s4,若否返回步骤a。
25.本方案设置预设策略,在控制当前待办任务进入执行状态后,依次序将对应第一i2c数据中的每一帧数据发送到i2c发送任务进行数据发送,同时在当前帧发送完毕后,对是否有比当前待办任务更高优先级的待办任务进行判断,若是则控制所述目标待办任务进入执行状态,并在对应的第二i2c数据发送完毕后继续执行当前待办任务;使得低优先级的i2c数据在发送完当前帧之后再中断,而因为单帧数据的完全发送可保证数据的完整性,进而避免被高优先级的i2c数据打断后,导致对应的i2c设备接收到的数据错误。
26.在进一步的实施方案中,所述步骤b具体为:调用vtasksuspend()api函数使所述目标待办任务进入挂起状态。
27.本发明还提供一种模拟i2c通信系统,包括mcu和多个从设备;所述mcu包括多个与所述从设备一一对应的数据任务模块,以及i2c发送任务模块、模拟i2c模块和i/o接口;所述数据任务模块、i2c发送任务模块、模拟i2c模块依次连接,所述模拟i2c模块通过所述i/o接口与所述从设备连接;
28.所述数据任务模块,用于产生对应于所述从设备的i2c数据;
29.所述i2c发送任务模块,用于接收所述i2c数据并根据其对应的所述从设备进行数据发送的控制;
30.所述模拟i2c模块,用于控制所述i/o接口的电平模拟i2c通信协议,实现所述mcu与多个所述从设备的通信。
31.在进一步的实施方案中,所述用于接收所述i2c数据并根据其对应的所述从设备进行数据发送的控制具体为:
32.s1、设置一个i2c发送任务,并将其配置为高于所有i2c从设备对应的数据任务的优先级;
33.s2、根据预设策略和所述i2c发送任务,执行当前待办任务进行多轮单帧数据发送;
34.s3、当检测到更高优先级的目标待办任务时,判断本轮单帧数据发送是否完成,若是根据所述预设策略执行所述目标待办任务进行多轮单帧数据发送;否则继续执行本轮单帧数据;
35.s4、当检测到所述目标待办任务执行完成后,恢复执行所述当前待办任务的执行。
36.在进一步的实施方案中,多个所述数据任务模块产生的数据任务的优先级,等同于对应的所述从设备的优先级。
附图说明
37.图1是本发明实施例1提供的一种模拟i2c通信方法的工作流程图;
38.图2是本发明实施例2提供的一种模拟i2c通信系统的系统框架图。
具体实施方式
39.下面结合附图具体阐明本发明的实施方式,实施例的给出仅仅是为了说明目的,并不能理解为对本发明的限定,包括附图仅供参考和说明使用,不构成对本发明专利保护范围的限制,因为在不脱离本发明精神和范围基础上,可以对本发明进行许多改变。
40.实施例1
41.本发明实施例提供的一种模拟i2c通信方法,如图1所示,在本实施例中,包括步骤s1~s4:
42.s1、设置一个i2c发送任务,并将其配置为最高优先级;
43.在本实施例中,将其配置为最高优先级具体为:将i2c发送任务的优先级配置为高于所有i2c从设备对应的数据任务的优先级。
44.任务状态包括运行、就绪、阻塞、挂起。
45.本实施例将i2c发送任务配置为高于所有i2c从设备对应的数据任务的优先级,保证在rtos中,任何时刻只有一个任务在运行。当其中一个从设备对应的数据任务调用模拟i2c模块发送i2c数据时,就算有其它从设备的数据任务就绪,也无法打断当前i2c数据的发送,只有当前待办任务的当前帧发送完毕后,i2c发送任务才会根据任务的优先级接收优先级高的数据任务(即目标待办任务)的数据发送申请,从而有效避免了模拟i2c冲突。
46.s2、根据预设策略和i2c发送任务,执行当前待办任务进行多轮单帧数据发送,包括步骤s21~s24:
47.s21、控制当前待办任务进入执行状态,并依次序将对应第一i2c数据中的一帧数据发送到i2c发送任务;
48.s22、控制当前待办任务转入挂起状态,具体为:调用vtasksuspend()api函数使当前待办任务进入挂起状态。
49.s23、i2c发送任务接收第一i2c数据的当前帧,并根据其中的从设备地址发送给对应的i2c从设备;
50.s24、当当前帧发送完毕后,判断在就绪的任务中,是否有比当前待办任务更高优先级的待办任务,如果有则将其确定为目标待办任务并进入步骤s3,否则返回步骤s21。
51.s3、当检测到更高优先级的目标待办任务时,判断本轮单帧数据发送是否完成,若是根据预设策略执行目标待办任务进行多轮单帧数据发送;否则继续执行本轮单帧数据;
52.在本实施例中,根据预设策略执行目标待办任务进行多轮单帧数据发送包括步骤a~d:
53.a、控制目标待办任务进入执行状态,并依次序将对应第二i2c数据中的一帧数据发送到i2c发送任务;
54.b、控制目标待办任务转入挂起状态,具体为:调用vtasksuspend()api函数使目标待办任务进入挂起状态。
55.c、i2c发送任务接收第二i2c数据的当前帧,并根据其中的从设备地址发送给对应的i2c从设备;
56.d、判断第二i2c数据是否发送完毕,若是进入步骤s4,若否返回步骤a。
57.本实施例设置预设策略,在控制当前待办任务进入执行状态后,依次序将对应第一i2c数据中的每一帧数据发送到i2c发送任务进行数据发送,同时在当前帧发送完毕后,对是否有比当前待办任务更高优先级的待办任务进行判断,若是则控制目标待办任务进入执行状态,并在对应的第二i2c数据发送完毕后继续执行当前待办任务;使得低优先级的i2c数据在发送完当前帧之后再中断,而因为单帧数据的完全发送可保证数据的完整性,进而避免被高优先级的i2c数据打断后,导致对应的i2c设备接收到的数据错误。
58.s4、当检测到目标待办任务执行完成后,恢复执行当前待办任务的执行。
59.本发明实施例在原有的抢占式任务机制上进行改进,将i2c发送任务的发送规则设置为多轮单帧数据发送,每轮只发送一帧数据;而当检测到比当前待办任务更高优先级的目标待办任务时,在本轮单帧数据发送完成后,再执行目标待办任务,如此,在各从设备进行模拟i2c通信时,低优先级的从设备与主控器的通信不会被高优先级从设备随意打断,数据发送过程中单帧数据完整,且能够快速执行高优先级目标待办任务。
60.实施例2
61.本实施例中说明书附图中的附图标记包括:主控设备1,从设备1~从设备n,数据任务模块1~数据任务模块n,i2c发送任务模块2、模拟i2c模块3,i/o1、i/o2。
62.本发明实施例还提供一种模拟i2c通信系统,参见图2,包括主控设备1和多个从设备(如图2中的从设备1~从设备n(n》1));主控设备1包括多个与从设备一一对应的数据任务模块,以及i2c发送任务模块2、模拟i2c模块3和i/o接口;数据任务模块、i2c发送任务模块2、模拟i2c模块3依次连接,模拟i2c模块3通过i/o接口与从设备连接;
63.数据任务模块,用于产生对应于从设备的i2c数据;如图2中的数据任务模块1~数据任务模块n(n》1)。
64.i2c发送任务模块2,用于接收i2c数据并根据其对应的从设备进行数据发送的控制;
65.模拟i2c模块3,用于控制i/o接口的电平模拟i2c通信协议,实现主控设备1与多个从设备的通信。
66.其中,i/o接口包括i/o1、i/o2。
67.在本实施例中,用于接收i2c数据并根据其对应的从设备进行数据发送的控制具体为:
68.s1、设置一个i2c发送任务,并将其配置为高于所有i2c从设备对应的数据任务的优先级;
69.s2、根据预设策略和i2c发送任务,执行当前待办任务进行多轮单帧数据发送;
70.s3、当检测到更高优先级的目标待办任务时,判断本轮单帧数据发送是否完成,若是根据预设策略执行目标待办任务进行多轮单帧数据发送;否则继续执行本轮单帧数据;
71.s4、当检测到目标待办任务执行完成后,恢复执行当前待办任务的执行。
72.在本实施例中,多个数据任务模块产生的数据任务的优先级,等同于对应的从设备的优先级。
73.本实施例所提供的通信系统采用各个模块实现通信方法中的各个步骤,为通信方法提供硬件基础,便于方法实施。
74.上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献