(不定期更新)
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
|