|
为了证明23楼的caoxuedong不停地在撒谎,我特意在vmware虚拟机里面装了最新的XC32 1.21
安装的时候选用Free模式,不选择60天试用Pro。
打开开始页的sample code —— Explorer 16 PIC32MX Blinky,将toolchain改为XC32,同时将优化等级选为3。
破解前:
破解后
测试代码如下:- #include <plib.h>
- #include <stdint.h>
- // Configuration Bit settings
- // SYSCLK = 80 MHz (8MHz Crystal/ FPLLIDIV * FPLLMUL / FPLLODIV)
- // PBCLK = 40 MHz
- // Primary Osc w/PLL (XT+,HS+,EC+PLL)
- // WDT OFF
- // Other options are don't care
- //
- #pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
- #pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_8
-
- #define SYS_FREQ (80000000L)
- void encipher(unsigned int num_rounds, uint32_t v[2], uint32_t const key[4]) {
- unsigned int i;
- uint32_t v0=v[0], v1=v[1], sum=0, delta=0x9E3779B9;
- for (i=0; i < num_rounds; i++) {
- v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
- sum += delta;
- v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);
- }
- v[0]=v0; v[1]=v1;
- }
-
- void decipher(unsigned int num_rounds, uint32_t v[2], uint32_t const key[4]) {
- unsigned int i;
- uint32_t v0=v[0], v1=v[1], delta=0x9E3779B9, sum=delta*num_rounds;
- for (i=0; i < num_rounds; i++) {
- v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);
- sum -= delta;
- v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
- }
- v[0]=v0; v[1]=v1;
- }
-
- int main(void)
- {
- unsigned int const key[4]={0x55aa33b6,0x55aa33b6,0x55aa33b6,0x55aa33b6};
- int i;
-
- //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // Configure the device for maximum performance but do not change the PBDIV
- // Given the options, this function will change the flash wait states, RAM
- // wait state and enable prefetch cache but will not change the PBDIV.
- // The PBDIV value is already set via the pragma FPBDIV option above..
- SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);
-
- // Explorer16 LEDs are on lower 8-bits of PORTA and to use all LEDs, JTAG port must be disabled.
- mJTAGPortEnable(DEBUG_JTAGPORT_OFF);
-
- // Make all lower 8-bits of PORTA as output. Turn them off before changing
- // direction so that we don't have unexpected flashes
- mPORTAClearBits(BIT_7 | BIT_6 | BIT_5 | BIT_5 | BIT_4 | \
- BIT_3 | BIT_2 | BIT_1 | BIT_0 );
-
- mPORTASetPinsDigitalOut( BIT_7 | BIT_6 | BIT_5 | BIT_5 | BIT_4 | \
- BIT_3 | BIT_2 | BIT_1 | BIT_0 );
-
- // Now blink all LEDs ON/OFF forever.
- while(1)
- {
- mPORTAToggleBits(BIT_7 | BIT_6 | BIT_5 | BIT_5 | BIT_4 | \
- BIT_3 | BIT_2 | BIT_1 | BIT_0 );
- encipher(23, 0xd, key);
- decipher(23, 0xd, key);
- // Insert some delay
- i = 1024*1024;
- while(i--);
- }
- }
-
复制代码 大家可以自行测试,顺便狠抽caoxuedong的耳光。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|