问答

汇集网友智慧,解决技术难题

JackTang1994

TA的家园币:324  

  • MPLAB X IDE中使用hexmate工具生成的16位checksum问题

    请问下,我在使用hexmate生成的16位checksum与hexmate手册中CheckSum算法代码所生成checksum不一样?以下为hexmate用户手册7.1.1AdditionAlgorithms中的checksum生成代码#includetypedefuint8_tread_t;//sizeofdatavaluesreadandsummedtypedefuint16_tresult_t;//sizeofchecksumresult//addtooffset,nadditionsofvaluesstartingataddressdata,//truncatingandreturningtheresult//data:theaddressofthefirstvaluetosum//n:thenumberofsumstoperform//offset:theintialvaluetowhichthesumisaddedresult_tck_add(constread_t*data,unsignedn,result_toffset){result_tchksum;chksum=offset;while(n--){chksum+=*data;data++;}returnchksum;}实际工程中的checkSum设置:hexmate${ImagePath}-FILL=0x3FFF@0x0000:0x7FFB-CK=0x0800-0x0802@0x7FFC+0x00w-2t34g1-o${ImagePath}在MPLABXIDE的ProgramMemory窗口中查看到的0x400地址处内容为0x3184,如果按照上述checkSum计算方法得到的checksum值为B5,而使用hexmate生成的checksum值为C9请问下,到底这个hexmate生成的16位checksum算法是怎样的?

    hexmate checksum

    2022-07-28 7
  • ATMEGA4809的时钟配置疑问?

    在使用AVR单片机时,发现设置MAIN时钟时需要对CCP寄存器进行解锁操作(4个内指令完成)。在查看了protected_io.S文件后,发现此使用了汇编来解锁以保证能在4个指令周期内完成时钟配置。但是有一个疑问就是,调用protected_write_io函数来操作CCP寄存器时,汇编代码中使用的寄存器为R20和R24为什么不是其他寄存器呢?#includePUBLIC_FUNCTION(protected_write_io)#ifdefined(__GNUC__)#ifdefRAMPZout_SFR_IO_ADDR(RAMPZ),r1//Clearbits23:16ofZ#endif//为什么使用R24和R22以及R20,为什么不能是其他寄存器。这些寄存器都是protected_write_io函数的形参movwr30,r24//LoadaddrintoZoutCCP,r22//StartCCPhandshakestZ,r20//WritevaluetoI/Oregisterret//Returntocaller#elifdefined(__IAR_SYSTEMS_ASM__)#if!defined(CONFIG_MEMORY_MODEL_TINY)&&!defined(CONFIG_MEMORY_MODEL_SMALL)\&&!defined(CONFIG_MEMORY_MODEL_LARGE)#defineCONFIG_MEMORY_MODEL_SMALL#endif#ifdefined(CONFIG_MEMORY_MODEL_LARGE)ldir20,0outRAMPZ,r20//Resetbits23:16ofZmovwr30,r16//LoadaddrintoZ#elifdefined(CONFIG_MEMORY_MODEL_TINY)ldir31,0//Resetbits8:15ofZmovr30,r16//LoadaddrintoZ#elsemovwr30,r16//LoadaddrintoZ#endif#ifdefined(CONFIG_MEMORY_MODEL_TINY)outCCP,r17//StartCCPhandshakestZ,r18//WritevaluetoI/Oregister#elifdefined(CONFIG_MEMORY_MODEL_SMALL)outCCP,r18//StartCCPhandshakestZ,r19//WritevaluetoI/Oregister#elifdefined(CONFIG_MEMORY_MODEL_LARGE)outCCP,r19//StartCCPhandshakestZ,r20//WritevaluetoI/Oregister#else#errorUnknownmemorymodelinuse,noideahowregistersshouldbeaccessed#endifret#else#errorUnknownassembler#endifEND_FUNC(protected_write_io)END_FILE()

  • Microchip Studio编译工程问题?

    请问下,我使用MicrochipStudio编译AtmelSmart生成的工程没有问题。但是有一个疑问工程的链接地址在哪里设置的?1.在MicrochipStudio工程设置中查看在MemorySetting栏中没有找到相关链接地址的设置2.在工程目录中也没有找到链接脚本*.ld文件