本帖最后由 hehung 于 2023-1-16 08:27 编辑
# 过往分享
[【iMOTION2go套件】1. 开箱](https://bbs.eeworld.com.cn/thread-1229533-1-1.html)
[【iMOTION2go套件】2. MCEWizard工具使用+控制脚本分析](https://bbs.eeworld.com.cn/thread-1230537-1-1.html)
[【iMOTION2go套件】3. MCEDesigner工具使用](https://bbs.eeworld.com.cn/thread-1231098-1-1.html)
# 前言
前面两篇帖子已经讲解了如何使用工具MCEWizard以及工具MCEDesigner,本篇文章讲解如何实操编写控制脚本,先来一个比较简单的,从控制GPIO开始,也就是控制LED2,让LED2没500ms闪烁一次。
## 硬件连接
LED2硬件连接如下图,表示GPIO7为高电平的时候,LED2亮,GPIO7为低电平的时候LED2灭。
# 脚本编写流程
1. 打开MCEWizard工具,导入iMOTION2go配置工程文件,过程不再赘述,详细流程参考[【iMOTION2go套件】2. MCEWizard工具使用+控制脚本分析](https://bbs.eeworld.com.cn/thread-1230537-1-1.html);
2. 点击菜单栏'Jump to Page' -> 'Script',跳转到脚本编写页面;
3. 删除原来的脚本,填入下面的脚本
```c
#SET SCRIPT_USER_VERSION (1.00)/*Script version value should be 255.255*/
#SET SCRIPT_TASK0_EXECUTION_PERIOD (50)/*Script execution time for Task0 in mS, maximum value 65535*/
#SET SCRIPT_TASK1_EXECUTION_PERIOD (1)/*Script execution time for Task1 in 10mS, maximum value 65535*/
#SET SCRIPT_START_COMMAND (0x1)/* Start command, Task0 : Bit0, Task1 : Bit1; if bit is set, script executes after init */
#SET SCRIPT_TASK0_EXECUTION_STEP (1)/* Script Task0step, This defines number of lines to be executed every 1mS*/
#SET SCRIPT_TASK1_EXECUTION_STEP (10) /* Script Task1step, This defines number of lines to be executed every 10mS*/
*/
/*********************************************************************************************************************/
/*********************************************************************************************************************/
/*Task0 init function*/
Script_Task0_init()
{
int Delay_Cnt;
/* Off LED2 first */
GPIO7_OUT = 0;
}
/******************************************************************************************************************/
/*Task0 script function*/
Script_Task0()
{
Delay_Cnt = Delay_Cnt + 1;
/* Toggle LED2 every 500ms */
if (Delay_Cnt > 10)
{
GPIO7_OUT = ~GPIO7_OUT;
}
}
/******************************************************************************************************************/
/*Task1 init function*/
Script_Task1_init()
{
}
/******************************************************************************************************************/
/*Task1 script function*/
Script_Task1()
{
}
```
4. 编译脚本
编译脚本,如果脚本语法有误,会给出提示,按照提示要求修改即可,经过验证,C语言中自加语法用不了,而且变量定义的时候不能赋初值,这些都会导致编译错误。
如下图表示编译正确,可以看到一些脚本信息。
5. 保存脚本
6. 计算参数以及编译脚本代码
菜单栏选择'Jump to Page' -> 'Verify & Save Page',然后点击'Calculate Parameter and Compiler Script Code', 会在mc2文件夹下生成map文件以及ldf文件,ldf文件用于下载到板子中进行验证。
7. 使用工具MCEDesigner下载脚本进行验证,过程不在赘述,参考前面的帖子,有详细描述
# 脚本逻辑讲解
## 设置Task0工作,Task1不工作
设置宏SCRIPT_START_COMMAND为1,表示只使能Task0。
```C
#SET SCRIPT_START_COMMAND (0x1)
```
## 设置Task0工作周期
设置Task0循环周期为50ms。
```C
#SET SCRIPT_TASK0_EXECUTION_PERIOD (50)
```
## Task0初始化
定义变量Delay_Cnt用来记录时间,用以切换LED2。
初始化GPIO7_OUT为0,表示熄灭LED0。
```C
Script_Task0_init()
{
int Delay_Cnt;
/* Off LED2 first */
GPIO7_OUT = 0;
}
```
## Task0执行逻辑
每一次循环Delay_Cnt加一,当加到第十次的时候,表示以及过去了500ms,就将GPIO7的电平转换一下,则LED2由灭变亮或者由亮变灭。
```C
Script_Task0()
{
Delay_Cnt = Delay_Cnt + 1;
/* Toggle LED2 every 500ms */
if (Delay_Cnt > 10)
{
GPIO7_OUT = ~GPIO7_OUT;
}
}
```
# 验证结果
有下面的结果可以看出,只有LED2在周期性闪烁(大致为每500ms切换一次),电机没有任何响应,说明脚本控制代码编写成功,接下来可以编写更加复杂的控制脚本了。