本文主要介绍一个综合运用各种编程工具“将数组转换为二进制文件”的探索案例。事实上,通过纯C/C++编程的方式,也能解决这个问题,但是,本文想强调的是,在实际工作中,需要发散思维和探索精神,能够想出一些新鲜的idea,权当一个coder的自娱自乐。
一、需求介绍
某日,DSP工程师提出一个需求:应用程序(上位机)根据用户的选择,通过驱动实时加载对应版本的DSP程序到DSP芯片(下位机)。DSP工程师提供的DSP程序是由CCS(一个IDE工具)生成的“*.h”文件,该文件包含一些注释和一个数组,如下(截取部分):
/ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
//typedef unsigned char uint8_t;
uint8_t bootCode[] = {
0x80, 0x00, 0xF6, 0xE0, 0x00, 0x00, 0xFE, 0x60, 0x80, 0x00, 0x00, 0x00, 0x02, 0x04, 0x03, 0xE2, 0x92, 0x46, 0x0C, 0x6E, 0x00, 0x8C, 0xA3, 0x62,
0x02, 0x28, 0x03, 0xE2, 0x92, 0x46, 0x0C, 0x6E, 0x00, 0x8C, 0xA3, 0x62, 0x02, 0x44, 0x03, 0xE2, 0xE2, 0x40, 0x00, 0x00, 0x92, 0x46, 0x0C, 0x6E]
注:该数组就是DSP程序,需要转换成二进制码,load到DSP芯片中。真实的code数组比这个大的多,达几十k。