d:\1\v8038286\wwwroot\robots\Spider\log\data\log20180426.htm Smoothieware初试笔记(五)固件修改、编译及下载-非标遥控器-定制工业遥控器-产品设计外包-百安特科技专注技术服务外包
企业邮局 联系我们 收藏本站
在线客服
点击这里给我发消息
  通知公告 更多...
工业遥控器定制服务

本公司依托多年的工业产品设计经验,承接定制非标工业遥控器,为您的设备,系统定制专属工业级遥控器.

非标工业遥控器
发射器
接收机
产品研发
民用级产品案例
工业级产品案例
系统集成案例
医疗系统相关案例
高速PCB设计
电子产品研发领域
3D建模打印
3D建模
3D打印
3D打印机技术
技术中心
认识元器件
认识线路板
了解单片机
综合应用
    产 品 展 示
 3D建模打印 >> 3D打印机技术 >> Smoothieware初试笔记(五)固件修改、编译及下载

Smoothieware初试笔记(五)固件修改、编译及下载

2015-10-21 0:46:04                 来源:百安特科技 - Smoothieware初试笔记(五)固件修改、编译及下载

(不定期更新)

5 固件

5.1 固件源码

固件压缩包Smoothieware-edge.zip,压缩包内容如下图:

 

 

5.1.1 编译环境及安装

编译环境:GCC ARM Embedded

版    本:V4.8

官方网址:https://launchpad.net/gcc-arm-embedded/

安装

运行 win_install.cmd 安装Windows编译器运行环境,根据提示进行安装。

安装主要是下载gcc-arm-none-eabi-4_8-2014q1-20140314-win32.zip文件,然后解压,然后配置一些东西(我还没有弄明白,也不需要弄明

)。

注:这里没有用最新版本,因为我也不清楚是不是能直接用最新版。由于安装时下载这个文件的服务器在国外,最好使用代理,否则安装程序下载

一半的时候就失败了。我就是试了好几次。

5.1.2 编译固件源码

安装好编译环境后,可以直接运行一下,看看是否能正确的编译。

由于下载的固件包已经都配置好了编译选项,我暂时不去管编译选项的内容,直接可以编译。

打开编译环境:运行BuildShell.cmd

 

直接输入 make回车就开始编译了。

 

(编译完成)

编译结束,编译的结果,对于我们最重要的就是生成了一个bin文件:/LPC1768/main.bin

5.1.3 下载固件

将上节生成的文件改名为:firmware.bin,然后拷贝到板子上的TF卡内。重新开机,等待几秒。程序重新运行起来表示挂件更新成功。

 

5.2 修改固件

5.2.1 准备

我还不知道有没有IDE环境来专门做这个的编译调试,所以我直接用Source Insight建立一个工程,并加入所有源文件。

源文件为src目录及子目录下的所有文件。

 

 

5.2.2 修改LCM12864屏旋钮动作

因为原版固件处理这个旋钮不好操作。表现为:旋转一格动作不止一格,菜单滚动2个项目,数值加减也不止一个数,需要旋转半格才能实现一个

作。操作很不方便。所以我首先修改这个。

 因为旋钮的触发信号大致是转一格,触发了几次,所以要减少触发量。

打开文件:src\modules\utils\panel\panels\ReprapDiscountGLCD.cpp,找到下面的函数:

  

int ReprapDiscountGLCD::readEncoderDelta() {

    static const int8_t enc_states[] = {0,-1,1,0,1,0,0,-1,-1,0,0,1,0,1,-1,0};

    static uint8_t old_AB = 0;

    old_AB <<= 2;                   //remember previous state

    old_AB |= ( this->encoder_a_pin.get() + ( this->encoder_b_pin.get() * 2 ) );  //add current state

    return  enc_states[(old_AB&0x0f)];

}

 修改为:

  

int ReprapDiscountGLCD::readEncoderDelta() {

    static const int8_t enc_states[] = {0,-1,1,0,1,0,0,-1,-1,0,0,1,0,1,-1,0};

         static int8_t encoder_fp = 0;

    static uint8_t old_AB = 0;

    old_AB <<= 2;                   //remember previous state

    old_AB |= ( this->encoder_a_pin.get() + ( this->encoder_b_pin.get() * 2 ) );  //add current state

         encoder_fp += enc_states[(old_AB&0x0f)];

         if(encoder_fp >= 2)

         {

                  encoder_fp = 0;

                  return 1;

         }

         else if(encoder_fp <= -2)

         {

                  encoder_fp = 0;

                  return -1;

         }

         return 0;

}

编译固件->下载固件->重新开机->测试OK

 

 

 

 

点击数:2599  录入时间:2015-10-21 【打印此页】 【返回
相关链接
文字链接   [无线通信模块 无线数传模块
图片链接
版权所有:武汉百安特科技有限公司
WuHan BART S&T Development Co.LTD
联系电话:13886051015 027-87657717 QQ留言:110458952
Copyright ©2000 - 2011 21MCU.COM 鄂ICP备16008605号

非标工业遥控器|定制工业遥控器|自动化设计外包