|
|
  |
Простые вопросы по IAR |
|
|
|
Sep 6 2007, 13:11
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Код const uint8 x[4][4]= { (1,2,3,4), (1,2,3,4), (1,2,3,4), (1,2,3,4) }; Чем дальше в лес, тем больше дров  . Может стоит хоть книжку по С прочитать? Компилятору не по барабану круглые или фигурные скобки.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 6 2007, 13:46
|

Знающий
   
Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053

|
Вырезка из книги Керинан и Ричи: STATIC INT DAY_TAB[2][13] = { (0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31), (0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) }; Я использовал эту конструкцию в CodeVision, и не было никаких ошибок. И кому здесь по барабану?
--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
|
|
|
|
|
Sep 6 2007, 14:04
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Beginning @ Sep 6 2007, 16:46)  И кому здесь по барабану?  Правильному компилятору не по барабану мусорные круглые скобки. Либо уберите их совсем и неявно инициализируйте многомерный массив одномерным, Код const uint8 x[4][4]= { 1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4 }; либо инициализируйте многомерные массивы, как положено - фигурными скобками. Код const uint8 x[4][4]= { {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4} }; Цитата Вырезка из книги Керинан и Ричи: Компиляторы с опцией компилировать в стиле K&R уже почти вымерли и слава богу, ибо есть С99.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 6 2007, 14:12
|

Знающий
   
Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053

|
Какой же это правильный компилятор, если не по ANSI C делает. А вы, прежде чем в книги отсылать, лучше бы попробовали сами. На конструкцию предложенною вами у компилятора вообще аллергия: const uint8 dd[4][]{ {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4} }; Error[Pe098]: an array may not have elements of this type Error[Pe065]: expected a ";"
Я к стати эту конструкцию пробывал, ещё до обсуждения.
Сообщение отредактировал Beginning - Sep 6 2007, 14:19
--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
|
|
|
|
|
Sep 6 2007, 14:35
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Beginning @ Sep 6 2007, 17:12)  лучше бы попробовали сами. Не буду я пробовать - оно работает и без моих проб  Цитата На конструкцию предложенною вами у компилятора вообще аллергия: const uint8 dd[4][]{ {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4} }; Обратите свой ясный взор на мой пост и на то, что Вы здесь нагородили и найдите два отличия 1. Нет явного указания для размерности многомерного массива; 2. Компилятору не по барабану отсутствие оператора присвоения. Цитата Я к стати эту конструкцию пробывал, ещё до обсуждения. Ага  , два раза. Цитата Какой же это правильный компилятор, если не по ANSI C делает. K&R это не ANSI С и не C99
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 6 2007, 14:46
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Beginning @ Sep 6 2007, 17:12)  Какой же это правильный компилятор, если не по ANSI C делает.
Я к стати эту конструкцию пробывал, ещё до обсуждения. А что, ANSI C позволяет круглые скобки в этом месте вместо угловых? Попробуйте добавить в начале файла #include <stdint.h>, заменить uint8 на uint8_t и добавить "равно" На всякий случай - "стилем K&R" называется изложенный в первом издании их книги стиль. Если у вас первое издание - скачайте второе, оно уже про ANSI C.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Sep 6 2007, 19:51
|

Знающий
   
Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053

|
Создаю массив ссылок на строки: const uint8 *men0[]= { "Пункт 1", "Пункт 2”, “Пункт 3” }; Затем вызываю функцию: menu_(x,men0); Функция типа: void menu_(uint8 x, const uint8 **t) В ней вызываю функцию печати: lcd_puts(t[x]); Компилится без ошибок. Но почему то, в lcd_puts не передаётся ссылка на строки, и печатается всякая хрень  . В CodeVision это работало нормально.
--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
|
|
|
|
|
Sep 7 2007, 06:43
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Beginning @ Sep 6 2007, 22:51)  Но почему то, в lcd_puts не передаётся ссылка на строки передаются, передаются - не надо диагнозы из пальца высасывать и рефреном повторять глупости: Цитата В CodeVision это работало нормально. Когда даже в элементарной набивке текста опечатка на опечатке (можете поискать три неправильных кавычки в своем примере). Цитата , и печатается всякая хрень  . Да ну? А Вы полагали, что русские литеры в Win кодировке на LCD должны смотреться как-то иначе? P.S. И не обзывайте все подряд uint8 - строки есть строки и char это не всегда uint8. P.P.S. И const используйте в "естественном" для 'C' порядке с права на лево и не накладывайте дополнительных ненужных восьмибитовых ограничений на переменные - компилятору не придется городить ненужный код. void menu_( int x, char const * const *t )
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 7 2007, 07:02
|

Знающий
   
Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053

|
Ну вы прям меня вообще за идиота считаете. Цитата Да ну? А Вы полагали, что руссие литеры в Win кодировке на LCD должны смотреться как-то иначе? Как вы считаете как это будет выглядеть на LCD "1.\x42\x70\x65\xBC\xC7.", //1.Время. И с чего вы решили, что я напрямую на LCD кидаю. Цитата передаются, передаются - не надо диагнозы из пальца высасывать и рефреном повторять Ничего я не высасывал из пальца, я выводил данные на терминал и портмонитором смотрел, что на него реально приходит. Цитата Когда даже в элементарной набивке текста опечатка на опечатке (можете поискать три неправильных кавычки в своем примере). Я это для примера привёл, если вы страждете получить полный исходник то получите: Цитата const uint8 *men0[]= { "1.Пункт 1", "2.Пункт 2 "3.Пункт 3" };
uint8 menu_(uint8 y, uint8 x, const uint8 **t) { uint8 z=0,w,s; lcd_clr(); lcd_putsf(0,t[x]); //----------------------- while(1) { if(key_press()) z=read_data_key(); if(z=='2') { x++; if(x>y) x=0; lcd_clr(); lcd_putsf(0,t[x]); for(w=0;w<20;w++) { //if(!(t[x][w])) break; s=t[x][w]; u1_putchar(s); } u1_putchar(10); u1_putchar(13); z=0; } if(z=='8') { x--; if(x==0xff) x=y; lcd_clr(); lcd_putsf(0,t[x]); z=0; } if(z=='6') break; if(z=='4') {x=255; break;} } return x; }
void main_menu(void) { uint8 x=0; while(1) { x=menu_(2,x,men0); if(x==255) break; //------------------------------ switch(x) { case 0: adj_time(); break; case 1: adj_time(); break; case 2: adj_time(); break; }; //------------------------------ } }
void adj_time(void) { lcd_clr(); lcd_puts(1,"Подменю."); delay_us(us(1000000)); } Цитата И не обзывайте все подряд uint8 - строки есть строки и char это не всегда uint8. Uint8 это макрос unsigned char.
--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
|
|
|
|
|
Sep 7 2007, 08:00
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Beginning @ Sep 7 2007, 10:02)  Ничего я не высасывал из пальца, я выводил данные на терминал и... Не знаю куда смотрели, что видели и как увиденное поняли, но для начала просто написать несколько строк без грубых ошибок просто не можете  Цитата ...если вы страждете получить полный исходник то получите: Упаси бог! Зачем он мне? Прочитал первые срочки "полного исходника": Код const uint8 *men0[]= { "1.Пункт 1", "2.Пункт 2 "3.Пункт 3" }; Лучше не стало. Опять ошибка на ошибке - запятые, кавычки, это все типа мелочи. Дальше просто читать не стал. Какой смысл рассуждать о чем-то если компилируют одно, постят другое а думают третье.... Кроме того, повторяю, в приведенном ранее тексте формально все в полном порядке (если не обращать внимания на уже обычные ляпы) Цитата Uint8 это макрос unsigned char. Макрос??? Ну хоть typedef сделайте.... Догадался, только какого лешего его применять для сокрытия естественного типа. P.S. В общем я, пожалуй, завязываю.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 7 2007, 08:32
|

Знающий
   
Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053

|
"2.Пункт 2 Коментарии удалял и удалил лишку. Если вы такой умный моглибы и необращать внимание. А то, что по ссылки валится не те данные которые в строке записанны-это факт. Повторяю ещё раз. Никого не заставляю мне отвечать. Не хотите не надо. Цитата Не знаю куда смотрели, что видели и как увиденное поняли, но для начала просто написать несколько строк без грубых ошибок просто не можете Выводил в COM PORT на terminal. А так, как терминал отображает символы в определённой кодировке, то параллельно перехватывал работу с портом PORTMONITOR утилитой, и просматривал все значения в hex. Цитата Догадался, только какого лешего его применять для сокрытия естественного типа. А что бы не писать каждый раз UNSIGNED CHAR. (и не говорите что по умалчанию, лучше явно указать, чем при переносе кода в другие места глюки ловить) не вижу принципиальной разницы между: typedef unsigned char uint8; и #define uint8 unsigned char
Сообщение отредактировал Beginning - Sep 7 2007, 08:15
--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|