|
AVR4in1和AVR P&D都可以作为离线编程器使用,而且支持自定义软件加密功能.
支持运算符和优先级(与C语言一致):
const OPERATOR Opt[] = {
// PRI 0
{'%',0x80,Operator_GetPara}, // Get Parameter,%0 is OSCCAL
{'@',0x80,Operator_AtEEPROM}, // Address Operator,EEPROM,Not Supported yet
{'*',0x80,Operator_AtFlash}, // Address Operator,Flash,Not Supported yet
{'!',0x80,Operator_LogNot}, // Logical Not Operator
{'~',0x80,Operator_BitNot}, // Bit Not Operator
{'-',0x80,Operator_MinusSign}, // Minus Sign Operator
// PRI 1
{'*',0x01,Operator_Multiply}, // Multiply Opeator
{'/',0x01,Operator_Devide}, // Devide Operator
{'%',0x01,Operator_Mod}, // MOD Operator
// PRI 2
{'+',0x02,Operator_Plus}, // Plus Operator
{'-',0x02,Operator_Minus}, // Minus Operator
// PRI 3
{'<',0x03,Operator_ShiftLeft}, // Shift Left Operator
{'>',0x03,Operator_ShiftRight}, // Shift Right Operator
// PRI 4
{'&',0x04,Operator_BitAnd}, // Bit And Operator
// PRI 5
{'^',0x05,Operator_BitXor}, // Bit Xor Operator
// PRI 6
{'|',0x06,Operator_BitOr}, // Bit Or Operator
};
字符串公式最大长度22字节(但编程项目名长度为8字节),可以实现一些简单的加密功能,复杂的需要定制,目前'@'和'*'取数据操作不支持
注意:
1.优先级与C语言优先级一致
eg:
(%0<4)|(%0>4)+0x11 <==> (%0<4)|((%0>4)+0x11)
(%0<4)+(%0>4)+0x11 <==> ((%0<4)|(%0>4))+0x11
2.'('')'配对,如果不配对的话,从第一处不配对的')'起,不继续计算
eg:
(%0+1)*2)+1 <==> (%0+1)*2
使用时,在'c'命令中加入参数"-encrypt 字符串公式".
测试命令:
c -avr AT90CAN32 -fuses 0xFD98E2 -lockbits 0xFC -encrypt (%0<4)|(%0>4)+0x11 -m1 0xF46 -operation 0x1F4B -info EN_Test
c -avr AT90CAN32 -fuses 0xFD98E2 -lockbits 0xFC -encrypt ((%0<4)|(%0>4))+0x11 -m1 0xF46 -operation 0x1F4B -info EN_Test1
c -avr AT90CAN32 -fuses 0xFD98E2 -lockbits 0xFC -encrypt (%0+1)*2)+1 -m1 0xF46 -operation 0x1F4B -info EN_Test2
建立3个编程项目,然后使用enc命令测试:
测试编程项目1的加密结果(其他的类似):
s 1 (选中编程项目1)
enc 12 (对12加密)
测试自定义算法的加密:
enc 12 (%0<4)+5|(%0) (enc 数据 字符串公式)
|
|