ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
17 апреля
1011194 Топик полностью
VLLV (10.06.2020 11:11, просмотров: 834) ответил BlackMorda на Мне нужно не изобретать велосипед. Судя по всему прийдется.
Да ладно, проблему нашел. У меня семафор занятости SPI для работы с двумя узлами, все проверено и работает. Не волшебную таблетку искать нужно, а головой думать и ручками писать. 

typedef enum {

SPI_FREE=0,

SPI_BUSY_FLASH,

SPI_BUSY_X,

} tSPI_BUSY;

typedef struct _tSPI_REQ{

unsigned short X :1;

unsigned short flash:1;

} tSPI_REQ;

typedef struct _tSPI_SEMA{

tSPI_BUSY busy; // признак занятости SPI

tSPI_REQ request; // запросы SPI от флэш и X

}tSPI_SEMA;

extern volatile tSPI_SEMA spi_sema;



// семафор занятости SPI к флэш или X

if (spi_sema.busy != SPI_BUSY_X) // если не занято SPI

{ spi_sema.busy = SPI_BUSY_FLASH;

доступ();

spi_sema.busy = SPI_FREE;

}


ну а дальше сам по месту расставить формирование запросов, их сброс и т.д.