Ср авг 09, 2017 08:51:30
Ср авг 09, 2017 09:49:25
Ср авг 09, 2017 11:08:15
если программист один и тот же - еще как могут!Who_are_you? писал(а):Не могут же разные компиляторы иметь похожие проблемы!
Ср авг 09, 2017 12:04:21
Ср авг 09, 2017 12:14:19
Ср авг 09, 2017 18:22:10
ISR (USART1_RX_vect) // межплатный обмен
{
unsigned char rxbyte;
{
rxbyte = UDR1;
switch (ComState)
{
case 10 : if (rxbyte == 0x02) // wait for STX = 0x02
{
ComState = 20;
RxBuf[0]= rxbyte;
rxptr=0;
}
break;
case 20 :
rxptr ++;
RxBuf[rxptr] = rxbyte;
if (rxptr == 2)
{
len[1] = RxBuf[1]; // HI(rxlen)
len[0] = RxBuf[2]; // LO(rxlen)
rxlen = *(int*)len; // rxlen = ((unsigned char)len[1]<<8)|len[0];
}
if (rxptr == rxlen)
ComState = 0x0C; // кадр принят
break;
default : ComState = 0x0C;
}
}
}
//;************* end USART1_RX_vect ******************
void ProfileMenu (void) // меню профиля
{
int xr1 = 40, xr2 = 311, yr1 = 48, yr2 = 63; //координаты начальной активной области меню
char *buffer="0";
char cchh;
unsigned char counter = 1; //переменная, в которой хранится номер текущей выделенной области меню
for (;;)
{
if (menu_counter == 2)
{
Error_RS422 = true;
LCD_Clear (1,1);
Text_Menu_String_pgm (16,0,0, pr_menu1);//Text_Menu_String (16,0,0, "МЕНЮ ПРОФИЛЯ");
LCD_Window (1, 1, 319, 239);
/*LCD_Rectangle_Color*/LCD_Bar (xr1, yr1 + 16 * (counter - 1), xr2, yr2 + 16 * (counter - 1), 1);
Text_Menu_String_pgm (16,1,3, pr_menu2);//
Text_Menu_String_pgm (16,1,4, pr_menu3);//
Text_Menu_String_pgm (16,1,5, pr_menu4);//
Text_Menu_String_pgm (16,6,8, pr_menu5);//
Text_Menu_String_pgm (16,4,9, pr_menu6);//
Text_Menu_String_pgm (8,2,12, pr_menu7); //
Text_Menu_String_pgm (8,11,13, pr_menu8);//
Text_Menu_String_pgm (16,2,14, esc_menu1);
menu_counter ++;
}
// от платы процессорной *******************************************
if (ComState == 0x0C) // кадр получен
{
cmd[1]= RxBuf[5];
cmd[0]= RxBuf[6];
// 'er' - команда не прошла /////////////////
if ((cmd[1] =='e') & (cmd[0] =='r'))
{
Error_RS422 = false;
}
// 'ok' - команда прошла /////////////////
if ((cmd[1] =='o') & (cmd[0] =='k'))
{
flag_OK = true; //
}
ComState = 10; // SetupRx
rxptr = 0;
} // end ComState
if (Error_RS422 == 0) //false
{
Text_Menu_String (8,20,1, "Error_RS422: "); //
cchh = (char)RxBuf[7]; buffer = &cchh; LCD_WriteText (8,buffer); // команда
cchh = (char)RxBuf[8]; buffer = &cchh; LCD_WriteText (8,buffer); // команда
itoa (RxBuf[3],buffer,10); LCD_WriteText (8,buffer); //от кого
}
if (flag_OK == 1) //
{
Text_Menu_String (16,20,1, "OK: "); //
cchh = (char)RxBuf[7]; buffer = &cchh; LCD_WriteText (8,buffer); // команда
cchh = (char)RxBuf[8]; buffer = &cchh; LCD_WriteText (8,buffer); // команда
}
key_input = key_survey();
switch (key_input)
{
case '1' : menu_counter ++; counter = 1; PRFMenu(); break;
case '2' : menu_counter ++; counter = 2; PVMenu(); break; //PV
case '3' : menu_counter ++; counter = 3; SignMenu(); break;
case 0x28 : /*LCD_Rectangle_Color*/LCD_Bar (xr1, yr1 + 16 * (counter - 1), xr2, yr2 + 16 * (counter - 1), 0);
if (counter != 3) counter ++; else counter = 1;
/*LCD_Rectangle_Color*/LCD_Bar (xr1, yr1 + 16 * (counter - 1), xr2, yr2 + 16 * (counter - 1), 1); // DOWN
break;
case 0x26 : /*LCD_Rectangle_Color*/LCD_Bar (xr1, yr1 + 16 * (counter - 1), xr2, yr2 + 16 * (counter - 1), 0);
if (counter != 1) counter --; else counter = 3;
/*LCD_Rectangle_Color*/LCD_Bar (xr1, yr1 + 16 * (counter - 1), xr2, yr2 + 16 * (counter - 1), 1); // UP
break;
default : break;
}
if (key_input == 0x0d)
{
switch (counter)
{
case 1 : menu_counter ++; PRFMenu(); break;
case 2 : menu_counter ++; PVMenu(); break;
case 3 : menu_counter ++; SignMenu(); break;
default : break;
}
}
if (menu_counter == 4) { menu_counter -=2; continue; }
if (key_input == 0x1b) { menu_counter ++; break; } // ESC
}
//MainMenu();
//menu_counter -=4;
menu_counter =0;
key_input = 0;
}
// ********************************************************
void PRFMenu (void) // меню выбора профиля
{
char *buffer="0";
int k = 18,j = 6; //стартовые координаты изменяемой области
PRF_temp = Settings.PRF;
LCD_Clear (1,1);
unsigned char rank_counter = 0; //счетчик разряда во вводимом числе 0 - 1, 1 - 2, 2 - 3
unsigned char rank[3] = {0,0,0};
rank[2] = PRF_temp/100;
rank[1] = (PRF_temp - rank[2]*100)/10;
rank[0] = PRF_temp - rank[2]*100 - rank[1]*10;
int i = 0;
LCD_Window (1, 16, 319, 223);
LCD_Rectangle (79,94,192,112,1);
Text_Menu_String_pgm (16,4,1, prf_menu1);//Text_Menu_String (16,4,1, "ВЫБЕРИТЕ ПРОФИЛЬ");
Text_Menu_String_pgm (16,10,6, prf_menu2);//Text_Menu_String (16,10,6, "PRF=");
/*LCD_Rectangle_Color*/LCD_Bar ((k+2*(2-rank_counter))*8, j*16-1, (k+2+2*(2-rank_counter))*8-2,(j+1)*16-1,1);
for (i = 2; i >= 0; i --)
{
itoa (rank[i], buffer, 10);
Text_Menu_String (16, k + 2*(2-i), 6, buffer);
}
Text_Menu_String_pgm (16,2, 12, enter_menu2);//Text_Menu_String (16,2, 12, "ПОДТВЕРЖДЕНИЕ ENTER");
Text_Menu_String_pgm (16,2, 13, esc_menu2);//Text_Menu_String (16,2, 13, "ОТМЕНА ESC");
for (;;)
{
key_input = key_survey();
Secondary_Navigating_Function_2 (k,j,rank, &rank_counter);
if (key_input == 0x0d)
{ PRF_temp = rank[2] * 100 + rank[1]*10+ rank[0];
Settings.PRF = PRF_temp;
[color=#FF00FF] // *************************************************
for (j = 1; j < Device_sum+1; j++) // Bloc_izm [j] - пока для 2-х БИ делаем
{
TxBuf[4] = Bloc_izm [j]; // DST кому из БИ
TxBuf[5]= 'p'; //
TxBuf[6]= 'r';
TxBuf[7]= rank[1]; //8
TxBuf[8]= rank[0]; //9
txlen = 11; // 9 +2 byte CRC
Add_Len(); // в TxBuf[1], TxBuf[2] вставить txlen
SetupTx (); // для Би1
_delay_ms (20); // tst установить нужное время[/color]
}
break;
}
if (key_input == 0x1b) break;
}
//ProfileMenu ();
key_input = 0;
}
// ********************************************************
Ср авг 09, 2017 18:54:23
char *buffer="0";
itoa (RxBuf[3],buffer,10);
Чт авг 10, 2017 09:25:24
- Спасибо за акцент на указателиARV
char *buffer="0";
char *buffer= NULL;
Чт авг 10, 2017 09:54:05
и чего вы этим добьетесь? сделаете ничуть не лучше!Who_are_you? писал(а):переписать на ?
void my_func(int data){ // какая-то функция
char str[10]; // локальный массив из 10 байт
itoa(data, str, 10); // формируем строку в массиве: int займет максимум 6 байт в массиве - размер массива гарантированно не будет превышен
lcd_put_string(str); // выводим строку
} // так как str - локальный массив, в этот момент он самоудаляется
а кто её должен определять? по-моему, в Си не предусмотрено возможностей по управлению стеком.Who_are_you? писал(а):А работу стека определяет сам WinAvr !!!???
Пт авг 11, 2017 12:59:38
#define BUFFER_SIZE 255 //
unsigned char RxBuf [BUFFER_SIZE];
char cchh;
Пт авг 11, 2017 13:15:28
не так.Who_are_you? писал(а):Мне кажется что-то не так или мне кажется?
char tmp[2];
tmp[0] = RxBuf[7];
tmp[1] = 0;
LCD_WriteText(8, tmp);
#define SMALL_FONT 8
LCD_WriteText(SMALL_FONT, tmp)
Пт авг 11, 2017 13:50:43
Передайте эту работу более компетентному человеку, потому что с вашим уровнем знаний вы не сможете исправить все ошибки.Who_are_you? писал(а):Писал не я, но отлаживать приходится мне и в сжатые сроки.
Пт авг 11, 2017 14:10:30
#define BUFFER_SIZE 255 //
unsigned char RxBuf [BUFFER_SIZE];
char tmp[2];
tmp[0] = RxBuf[7];
Передайте эту работу более компетентному человеку, потому что с вашим уровнем знаний вы не сможете исправить все ошибки.Who_are_you? писал(а):Писал не я, но отлаживать приходится мне и в сжатые сроки.
Пт авг 11, 2017 14:13:03
Варнинг наверное будет.Who_are_you? писал(а):А разве это не конфликт?
Компетентный человек, тоже когда-то был некомпетентным и стадию некомпетентности миновать не удастся.Мурик писал(а):Передайте эту работу более компетентному человеку,
Сб авг 12, 2017 00:48:05
Вт авг 15, 2017 09:29:58
Text_Menu_String (8,20,1, "Error_RS422: "); //
char ER [] = "Error_RS422: ")
Text_Menu_String (8,20,1, ER); //
Вт авг 15, 2017 10:38:24