проблема была в невыровненых данных

была строчка
  sensor->sensROM = *(uint64_t *)(ROM);

и она требует чтобы указатель ROM был выровнен по 4 байта

Но он не выровнен, потому что шаг модбас структуры 2 байта и он оказывается смещен на 2 байта вместо 4

Добавил резервные 2 байта, чтобы адрес быо кратен 4 байтам
This commit is contained in:
2025-03-05 13:04:40 +03:00
parent 54c8a663e4
commit 1633a224f3
2 changed files with 38 additions and 52 deletions

View File

@@ -54,6 +54,7 @@ typedef struct //MB_DataInRegsTypeDef
{
uint16_t SensTemperature[DS18B20_DEVICE_AMOUNT];
MB_SensorParamsTypeDef Response;
uint16_t reserved;
uint16_t AllROMs[DS18B20_DEVICE_AMOUNT][4];
}MB_DataInRegsTypeDef;

View File

@@ -153,7 +153,24 @@
<Name>(105=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<Breakpoint>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>252</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134221158</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>..\Core\Dallas\dallas_tools.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\Project\../Core/Dallas/dallas_tools.c\252</Expression>
</Bp>
</Breakpoint>
<WatchWindow1>
<Ww>
<count>0</count>
@@ -168,92 +185,52 @@
<Ww>
<count>2</count>
<WinNumber>1</WinNumber>
<ItemText>module2</ItemText>
<ItemText>ROM</ItemText>
</Ww>
<Ww>
<count>3</count>
<WinNumber>1</WinNumber>
<ItemText>*(volatile uint32_t *)0xE0001000</ItemText>
<ItemText>hmodbus1,0x0A</ItemText>
</Ww>
<Ww>
<count>4</count>
<WinNumber>1</WinNumber>
<ItemText>scratchpad</ItemText>
<ItemText>RS_Buffer,0x10</ItemText>
</Ww>
<Ww>
<count>5</count>
<WinNumber>1</WinNumber>
<ItemText>ROM</ItemText>
<ItemText>mb_location</ItemText>
</Ww>
<Ww>
<count>6</count>
<WinNumber>1</WinNumber>
<ItemText>start,0x0A</ItemText>
<ItemText>*(uint64_t *)(ROM)</ItemText>
</Ww>
<Ww>
<count>7</count>
<WinNumber>1</WinNumber>
<ItemText>end,0x0A</ItemText>
<ItemText>*ROM</ItemText>
</Ww>
<Ww>
<count>8</count>
<WinNumber>1</WinNumber>
<ItemText>(uint16_t)htim1.Instance-&gt;CNT-start,0x0A</ItemText>
<ItemText>sensor-&gt;sensROM</ItemText>
</Ww>
<Ww>
<count>9</count>
<WinNumber>1</WinNumber>
<ItemText>end-start,0x0A</ItemText>
<ItemText>sensor</ItemText>
</Ww>
<Ww>
<count>10</count>
<WinNumber>1</WinNumber>
<ItemText>((uint16_t)htim1.Instance-&gt;CNT-start &lt;(end-start)),0x0A</ItemText>
<ItemText>(uint64_t *)(ROM)</ItemText>
</Ww>
<Ww>
<count>11</count>
<WinNumber>1</WinNumber>
<ItemText>((uint16_t)htim1.Instance-&gt;CNT-start &lt; us*tim_1us_period),0x0A</ItemText>
</Ww>
<Ww>
<count>12</count>
<WinNumber>1</WinNumber>
<ItemText>(uint16_t)htim1.Instance-&gt;CNT-start,0x0A</ItemText>
</Ww>
<Ww>
<count>13</count>
<WinNumber>1</WinNumber>
<ItemText>hmodbus1,0x0A</ItemText>
</Ww>
<Ww>
<count>14</count>
<WinNumber>1</WinNumber>
<ItemText>RS_Buffer,0x10</ItemText>
</Ww>
<Ww>
<count>15</count>
<WinNumber>1</WinNumber>
<ItemText>mb_location</ItemText>
</Ww>
<Ww>
<count>16</count>
<WinNumber>1</WinNumber>
<ItemText>DS</ItemText>
</Ww>
<Ww>
<count>17</count>
<WinNumber>1</WinNumber>
<ItemText>\\Project\../Core/PY32Module/PY32module_main.c\pchsens.module3</ItemText>
</Ww>
<Ww>
<count>18</count>
<WinNumber>1</WinNumber>
<ItemText>\\Project\../Core/PY32Module/PY32module_main.c\pchsens.module4</ItemText>
</Ww>
<Ww>
<count>19</count>
<WinNumber>1</WinNumber>
<ItemText>scan_cnt</ItemText>
<ItemText>(uint32_t *)(0x20000076)</ItemText>
</Ww>
</WatchWindow1>
<WatchWindow2>
@@ -283,6 +260,14 @@
<ItemText>hmodbus1</ItemText>
</Ww>
</WatchWindow2>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>0</SubType>
<ItemText>0x20000058-2</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>