软件工程(C编码实践篇)学习总结

//髋关节舵机M11、M21、M31、M41,膝关节舵机M12、M22、M32、M42;
//将8个舵机连接MCU的GPIO命名为
//GPIO_M11、GPIO_M12,GPIO_M21、GPIO_M22,GPIO_M31、GPIO_M32,
//GPIO_M41、GPIO_M42;
#define GPIO_M11
#define GPIO_M12
#define GPIO_M21
#define GPIO_M22
#define GPIO_M31
#define GPIO_M32
#define GPIO_M41
#define GPIO_M42

//初始化函数
void Roboot_Iint(void)
{
    //设置8个GPIO输出方向
    //初始化8个舵机
}

//舵机控制
void Servo_Ctl(int gpio, int vcc_time)
{
    //
}

//腿的运动,vcc_time为输出的电平
void Roboot_Move(int vcc_time, int gpio_num)
{
    Servo_Ctl(gpio_num, vcc_time);
}

//前进
void run()
{
    //G1 G4向前抬腿,向前跨步
    Roboot_Move(2.5, GPIO_M11);
    Roboot_Move(2.5, GPIO_M41);
    Roboot_Move(2.5, GPIO_M12);
    Roboot_Move(2.5, GPIO_M42);
    
    //G2 G3向前抬腿,向前跨步
    Roboot_Move(2.5, GPIO_M21);
    Roboot_Move(2.5, GPIO_M31);
    Roboot_Move(2.5, GPIO_M22);
    Roboot_Move(2.5, GPIO_M32);
    
    //调整姿态
    Roboot_Move(1.5, GPIO_M11);
    Roboot_Move(1.5, GPIO_M41);
    Roboot_Move(1.5, GPIO_M12);
    Roboot_Move(1.5, GPIO_M42);
    Roboot_Move(1.5, GPIO_M11);
    Roboot_Move(1.5, GPIO_M41);
    Roboot_Move(1.5, GPIO_M12);
    Roboot_Move(1.5, GPIO_M42);
}

//后退
void back()
{
    //G1 G4向后抬腿,向后跨步
    Roboot_Move(1, GPIO_M11);
    Roboot_Move(1, GPIO_M41);
    Roboot_Move(1, GPIO_M12);
    Roboot_Move(1, GPIO_M42);
    
    //G2 G3向后抬腿,向后跨步
    Roboot_Move(1, GPIO_M21);
    Roboot_Move(1, GPIO_M31);
    Roboot_Move(1, GPIO_M22);
    Roboot_Move(1, GPIO_M32);
    
    //调整姿态
    Roboot_Move(1.5, GPIO_M11);
    Roboot_Move(1.5, GPIO_M41);
    Roboot_Move(1.5, GPIO_M12);
    Roboot_Move(1.5, GPIO_M42);
    Roboot_Move(1.5, GPIO_M11);
    Roboot_Move(1.5, GPIO_M41);
    Roboot_Move(1.5, GPIO_M12);
    Roboot_Move(1.5, GPIO_M42);
}

//左转
void lift()
{
    //G2向前抬腿,向前跨步
    Roboot_Move(2.5, GPIO_M21);
    Roboot_Move(2.5, GPIO_M22);
}

//右转
void right()
{
    //G1向前抬腿,向前跨步
    Roboot_Move(2.5, GPIO_M11);
    Roboot_Move(2.5, GPIO_M12);
}

 

罗建洪 + SA17225233 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006 

一、 学习心得体会

      作为一个本科是电子信息的学生,都是在与硬件打交道,此前从未学习过软件工程;在学习本门课程之前,对软件工程的无任何印象,个人以为仅仅是一本厚厚的教科书和枯燥无味的文字描述,就代码层面来说,也仅仅停留在代码量和对代码规范的浅显理解上。在这两个月的学习过程中,从一开始的熟悉linux开发环境,熟悉vim,熟悉gcc、gdb,了解makefile,到慢慢发现软件工程并非只有枯燥的教科书,也并非只有代码量和代码规范,学习下来,收获很多。好的软件工程代码是讲究设计规范的,讲究模块化思想,是要保证线程安全的,子系统的接口需要可重用。

      在设计规范上,需要做到以下几点:

(1)代码是模块化,低耦合,高汇聚;

(2)保证一个对象对另一个对象了解的尽可能少,遵循“不和陌生人说话”的原则,封装类;

(3)合理设计代码流程结构;

(4)异常处理和调试信息要丰富。

      在模块化的思想中,讲究高内聚低耦合,接口是规范的,代码是通用的。例如,可以用callback函数实现多态以便接口更加通用,实现信息隐藏。在处理多线程问题中,需要关注函数是否是可重入的,使用互斥锁以保证多线程安全等。在子系统的设计当中,设计出可重用的接口。 此外,在linux下对代码的编译,可以通过编写Makefile文件然后直接用make命令编译,这样会好很多。 学习过程中,应当多动手写代码,边写边理解,写完了之后再回顾和不断优化代码,把相关的模块串联起来思考,理解它们之间的内在联系。

  

二、 实验报告汇总

(1)实验报告一:

lab1实验报告

 (2)实验报告二:

lab2-实验报告

 (3)实验报告三:

lab3实验报告

 (4)实验报告四:

lab4实验报告

 (5)实验报告五:

lab5实验报告

 (6)实验报告七:

lab7实验报告

  三、总结

      在软件开发中,需要注重代码规范、设计规范、模块化、线程安全、子系统要可重用等,写出易读而又高效安全的代码。需要深入理解软件工程知识,科学的去做软件开发和管理维护工作。

posted @ 2017-11-04 17:12  一叶知秋,人生几何  阅读(171)  评论(0编辑  收藏  举报