whatdavid 发表于 2015-10-12 08:46:31

想请问一个关于副程式的问题

最近利用STM32想开发MODBUS的应用
MODBUS内有CRC16需要计算
所以在KEIL内写了一个一个CRC的计算程式
但是遇到一个问题就是串口0和1分别是不同的MODBUS总线
所以以两组不同的UART中断
还有发送的两个串口放在主回圈内(非使用中断)
所以一个四个地方需要计算CRC
这样的话大家能共用同一组副程式??
还是需要一个独立的副程式(代码都一样!?)

canspider 发表于 2015-10-12 08:48:52

若程式是可重入的
就能在不同地方公用同一副程式

whatdavid 发表于 2015-10-12 08:59:19

如果TX使用CRC过程中发生中断会不会导致RX使用CRC时TX的CRC发生错误?(如果中断没先关闭的话?)

canspider 发表于 2015-10-12 09:02:31

whatdavid 发表于 2015-10-12 08:59
如果TX使用CRC过程中发生中断会不会导致RX使用CRC时TX的CRC发生错误?(如果中断没先关闭的话?) ...

如果你的crc程式是可重入的则不会产生此问题

whatdavid 发表于 2015-10-12 09:07:25

那请问一下这样有包含不可重入的因子吗(*input 为接收或传送阵列)
//****************************************************************************************
unsigned int CRC_Cal(unsigned char *input,unsigned char length)
{
unsigned int j;
unsigned int Reg_CRC = 0xFFFF;
while(length--)
    {
    Reg_CRC ^= *input++;
    for(j=0;j<8;j++)
         {
         if(Reg_CRC & 0x01)
               Reg_CRC=(Reg_CRC >>1) ^ 0xA001;
         else
            Reg_CRC = Reg_CRC >>1;
         }
   }
return Reg_CRC;
}

aozima 发表于 2015-10-12 09:10:56

whatdavid 发表于 2015-10-12 09:07
那请问一下这样有包含不可重入的因子吗(*input 为接收或传送阵列)
//************************************ ...

末引用任何全局变量,函数内也末使用static定义的变量,也末调用其它函数,所以是可重入且线程安全的。

whatdavid 发表于 2015-10-12 09:40:11

非常感谢~~
页: [1]
查看完整版本: 想请问一个关于副程式的问题