ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
3 июля
1042551
POV_ (07.10.2020 09:43, просмотров: 9807)
stm32... я где-то накосячил, не пойму где... 

Перенёс проект на другую плату и там начались приключения. А именно...

Есть массив вот таких структур


typedef struct i2c_device_struct i2c_device_t;

struct i2c_device_struct
{
    I2C_TypeDef* i2c;
    i2c_device_t* prev;
    char name[I2C_NAME_LENGTH+1];
    char descr[I2C_DESCRIPTION_LENGTH+1];
    uint8_t expander_adr;
    uint8_t expander_ch;
    uint8_t adr_mask;
};


С массивом-то всё в порядке. Но вот есть один модуль который использует три из этих структур. Как-то вот так он их выбирает:


static i2c_device_t* client[MAX_SWITCH] = { NULL, NULL, NULL };

int Init(char* bus1_name, char* bus2_name, char* bus3_name)
{
    client[0] = i2c_SelectBus(bus1_name);
    client[1] = i2c_SelectBus(bus2_name);
    client[2] = i2c_SelectBus(bus3_name);

И этот Init прекрасно проходит. А позже оказывается один (а может и больше) из этих трех указателей увеличены на 1. То ли отладчик врёт то ли еще что-то. Никак не могу поймать момент изменения данных.


Скрипт линковки всячески меняю (может стек куда наползает). Полям в структуре типы меняю чтобы выровнять по 32 бита. Ну и т.п. вещи.

Не помогает.