Не помогло. Что еще может быть?blackx писал(а):Попробуйте увеличить размер стека.
© Альберт Эйнштейн
Не помогло. Что еще может быть?blackx писал(а):Попробуйте увеличить размер стека.
Там же и храните, а доступ к ним через extern.оригиналы параметров хранить там же или лучше отдельно?
only pure true norwegian blackx 
Код: Выделить всё
unsigned char CHIP_READ(unsigned int addr)
{
unsigned char temp[4];
GPIO_ResetBits(GPIOB, GPIO_Pin_12); //53
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET); //53
SPI_I2S_SendData (SPI2,0x0f); //53
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET); //35
temp[0]=SPI_I2S_ReceiveData(SPI2);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET); //34
SPI_I2S_SendData (SPI2,((addr & 0xFF00) >> 8)); //14
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET); //35
temp[1]=SPI_I2S_ReceiveData(SPI2); //24
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData (SPI2,(addr & 0x00FF));
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
temp[2]=SPI_I2S_ReceiveData(SPI2);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData (SPI2,0xff);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
temp[3]=SPI_I2S_ReceiveData(SPI2);
GPIO_SetBits(GPIOB, GPIO_Pin_12);
if(temp[0]==0x0&&temp[1]==0x01&&temp[2]==0x02){
return temp[3];
}
else {
GPIO_SetBits(GPIOD, GPIO_Pin_13); //зажечь
return 0;
}
}
Код: Выделить всё
void (*state_table[])() = {CHIP_READ,send, resive};
curr_state=CHIP_READ;
main()
{
while (1) {
state_table[curr_state]();
}
};
unsigned char CHIP_READ(unsigned int addr)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
curr_state=send;
}
void send(void){
if(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) != RESET){
SPI_I2S_SendData (SPI2,0x0f);
curr_state=resive;
}
}
void resive(void){
if(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) != RESET){
SPI_I2S_ReceiveData(SPI2)
curr_state=send2;
}Код: Выделить всё
void test1(char data);
void test2(int data);
void test3(void );
void (*tab_test[])(void) = {test1,test2,test3};
only pure true norwegian blackx 
Одна команда чтения или записи состоит из передачи 4 байтОпишите, пожалуйста, подробнее, что вы передаете и принимаете, и в каком порядке.
Можно про это по подробнее ?Его лучше заменить на набор разноуровневых функций, просто вызывающих друг друга.
Ага сколько бы я не рисовал получается именно это.Насколько я вижу из исходной вашей функции, это будет только лишь несколько последовательных действий, выполняющихся всегда друг за другом.
Код: Выделить всё
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET); //53Код: Выделить всё
UDR = (PORTC & (1<<7));Код: Выделить всё
uint8_t tmp;
tmp = (PORTC & (1<<7));Код: Выделить всё
unsigned char adressMy=(0x00);
void getAdress(char* adress); // прототип
{
int main (void)
getAdress(adressMy);
}
void getAdress(char *adress)
{
// всякая разная всяка
}да спасибо я уже разобрался,просто на С++ сижу в основном там по ссылкам не думаю о таких вещахBCluster писал(а):Так а что нужно сделать собственно? Имеет смысл передавать указатель в двух случаях - нужно изменить передаваемый параметр либо передача указателя для работы с массивом.
Функция у вас принимает аргумент char*, что есть указатель. Т.е. адрес
Вы пытаетесь вместе char* передать char, т.е. значение, соответственно компилятор ругается
Если передавать с & - то передастся адрес вашей переменной, т.е. указатель
Код: Выделить всё
#define SEND(nn) LEN=UTF_8(nn,mas);send(s,mas,LEN);Код: Выделить всё
SEND("варп") вместо этого ставится LEN=UTF_8("варп",mas);send(s,mas,LEN);Код: Выделить всё
#define SEND(nn) LEN=UTF_8("nn",mas);send(s,mas,LEN);