企业邮局 联系我们 收藏本站
在线客服
点击这里给我发消息
  通知公告 更多...
工业遥控器定制服务

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

非标工业遥控器
发射器
接收机
产品研发
民用级产品案例
工业级产品案例
系统集成案例
医疗系统相关案例
高速PCB设计
电子产品研发领域
PCB抄板
PCB原理图制作
样机制作
典型案例
PCB抄板贴士
PCB改板
BOM制作
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

 

 

 

 

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

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