用keil编写的程序是没有加密功能的,而用ADS编写则可以选择加密(RelInflash)
或不加密(DebugInflash/DebugInram)。虽然ADS功能很强大,但很多开发者可能更喜
欢用keil来开发的,一是keil支持扩展了的C语言,即keil C,应该说编写程序比在
ADS中用标准C来得灵活、简便;二是51的开发均为keil,便于从51单片机向ARM的
过渡。然而,很多商用的领域上,需要保护自己的知识产权,均要求程序具有加
密功能。能不能在keil中实现加密呢?
一开始走了一条弯路:将keil程序转为标准C然后在ADS中编译实现加密。这种
方法虽然理论上行得通,但实际做起来工程量很大,keil中对ARM芯片一般只需要
一个启动加载文件(startup.s),而ADS中有多个,差别蛮大。
后来发现,加密的机理其实很简单:对Philips的Lpc系列ARM芯片,加密就是向
Flash地址单元0x1FC(用户Flash扇区0)写入0x87654321来使能!因此,只要在keil
中程序中在中断向量表后面一直用nop;填充到0x1FC,再在该单元写入
0x87654321。OK了...