3、C语言描述的这个计算模块算法。可放在通信的另一端,对通信的正确性进行验证:
DWORD dwPolynomial 0x04c11db7;
DWORD cal_crc(DWORD *ptr, int len)
{
DWORD xbit;
DWORD data;
DWORD CRC 0xFFFFFFFF; // init
while (len--)
{
xbit 1 《《 31;
data *ptr++;
for (int bits 0; bits 《 32; bits++)
{
if (CRC & 0x80000000)
{
CRC 《《 1;
CRC ^ dwPolynomial;
}else
CRC 《《 1;
if (data & xbit)
CRC ^ dwPolynomial;
xbit 》》 1;
}
}
return CRC;
}
注意:
1)、上述算法中变量CRC,在每次循环结束包含了计算的余数,它始终是向左移位(既从最低位向最高位移动),溢出的数据位被丢弃。
2)、输入的数据始终是以32位为单位,如果原始数据少于32位,需要在低位补0,当然也可以高位补0。
3)、假定输入的DWORD数组中每个分量是按小端存储。
4)、输入数据是按照最高位最先计算,最低位最后计算的顺序进行。
例如:
如果输入0x44434241,内存中按字节存放的顺序是:0x41, 0x42, 0x43, 0x44。计算的结果是:0xCF534AE1
如果输入0x41424344,内存中按字节存放的顺序是:0x44, 0x43, 0x42, 0x41。计算的结果是:0xABCF9A63
IAR
1、IAR环境下如果链接工程文件,出现堆栈溢出错误,该如何处理?
打开链接文件lnkarm_flash.xcl或者是lnkarm_ram.xcl
//*****************************
// Stack and heap segments.
//*****************************
-D_CSTACK_SIZE400 《---------------修改这里
注:该修改方式仅适合IAR for ARM 4.xx版本。
2、IAR编译输出HEX格式的目标文件
1)、Options-》C/C++ Compiler-》Output-》Generate debug information 选项前的钩去掉
2)、Options-》Assembler-》Output-》Generate debug information 选项前的钩去掉
3)、Options-》Linker-》Output-》Output File-》Override default 选项前的钩选上并把文件名的后缀改成.hex
4)、Options-》Linker-》Output-》Output File-》Format-》Other 选项前的钩选上并把Output格式改为intel-extended
经过以上设置,在Rebuld All之后会在/Debug/Exe下生成.hex格式目标文件
3、IAR编译输出BIN格式的目标文件
1)、Options-》C/C++ Compiler-》Output-》Generate debug information 选项前的钩去掉
2)、Options-》Assembler-》Output-》Generate debug information 选项前的钩去掉
3)、Options-》Linker-》Output-》Output File-》Override default 选项前的钩选上并把文件名的后缀改成.bin
4)、Options-》Linker-》Output-》Output File-》Format-》Other 选项前的钩选上并把Output格式改为row-binary
经过以上设置,在Rebuld All之后会在/Debug/Exe下生成.bin格式目标文件
1、在MDK代码编辑环境下不能使用Goto Definition(用于查找某个变量的类型及定义)、Goto Reference(用于查找某个函数申明的原型)功能?
解决:打开Project-》Target-Options-》Output,将Browse Information复选框勾上。
2、当使用STM32固件库与RTX Kernel时,使用isr_evt_set(),事件无响应?
解决:编辑STM32固件库的“stm32f10x_vector.s”文件:
IMPORT SVC_Handler ;name changed according to RTX usage
IMPORT DebugMonitor
IMPORT PendSV_Handler ;修改加入
IMPORT SysTick_Handler ;name changed according to RTX usage
DCD SVC_Handler
DCD DebugMonitor
DCD 0 ; Reserved
DCD PendSV_Handler ;修改加入
DCD SysTick_Handler
评论
查看更多