|
Передача параметров в функцию., AVR-GCC/ATMega2560 |
|
|
|
Aug 12 2011, 12:40
|
Группа: Новичок
Сообщений: 6
Регистрация: 12-08-11
Пользователь №: 66 695

|
Добрый день, коллеги! Возможно я что-то недопонимаю или не знаю в C, посему возник такой вопрос: Код #include <stdio.h> void SendString (const char _String[]) { unsigned int i = 0; while (_String[i] != '\0') { printf ("%c\n", _String[i]); i++; } }
int main (void) { SendString ("LaLa"); return 0; } Прекрасно работает на i386. Но ни одна из Код void SendString (const char _String[]) { unsigned int i = 0; while (_String[i] != '\0') { SendChar (_String[i]); i++; } return; }
void SendString2 (const char *_String) { while (*_String) { SendChar (*_String++); } } ... SendString ("1234567890"); SendString2 ("1234567890"); ... функций не работает - в функцию SendChar передаётся мусор. Самостоятельный вызов SendChar ('a'); работает прекрасно. Как нужно правильно передавать параметры на ATMega/AVR-GCC.
Сообщение отредактировал Tuma - Aug 12 2011, 12:43
|
|
|
|
|
 |
Ответов
|
Aug 20 2011, 13:37
|

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

|
QUOTE (_Pasha @ Aug 20 2011, 15:27)  Повторяю еще раз. Незачем  . Я и первый раз ответ понял. QUOTE (aesok @ Aug 20 2011, 15:12)  Когда я пишу макрос то.... В данном случае это НЕ макрос, а отвечать почему-то Вы начали мне, а не Автору. Что касается обертки всего чего попало макросообразного во while(0), то в ответ на такое вменяемый компилятор встретив бессмысленное выражение будет генерить warning. Посему злоупотреблять, а то употреблять по причине решения притянутой за уши "проблемы", совершенно не следует. Совершенно достаточно заключать многострочные макросы в фигурные скобки. В этом случае либо он будет работать, как положено, либо получите (если вдруг забыли  , что это FUNCTION() у Вас макрос ) сообщение об ошибке и напишите просто и без затей c фигурными скобками: if( ... ) { FUNCTION(); } else ...... вместо if( ... ) FUNCTION(); else ......
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 20 2011, 13:53
|
Участник

Группа: Участник
Сообщений: 73
Регистрация: 4-05-08
Пользователь №: 37 272

|
Цитата(zltigo @ Aug 20 2011, 16:37)  Что касается обертки всего чего попало макросообразного во while(0), то в ответ на такое вменяемый компилятор встретив бессмысленное выражение будет генерить warning. Видимо GCC невменяемый компилятор... Цитата do { unsigned char i; i=PORTC.IN; 3dc: 80 91 48 06 lds r24, 0x0648 i+=17; 3e0: 8f 5e subi r24, 0xEF ; 239 PORTC.OUT=i; 3e2: e0 e4 ldi r30, 0x40 ; 64 3e4: f6 e0 ldi r31, 0x06 ; 6 3e6: 84 83 std Z+4, r24 ; 0x04 } while(0); Цитата PORTC.OUT=PORTC.IN+17; 3dc: 80 91 48 06 lds r24, 0x0648 3e0: 8f 5e subi r24, 0xEF ; 239 3e2: e0 e4 ldi r30, 0x40 ; 64 3e4: f6 e0 ldi r31, 0x06 ; 6 3e6: 84 83 std Z+4, r24 ; 0x04
|
|
|
|
|
Aug 21 2011, 08:28
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(zltigo @ Aug 20 2011, 21:28)  что-то я не понял сии вопросы... поясните, пожалуйста, о чем конкретно вы спрашиваете? что ж... Цитата Встретив бессмысленную языковую конструкцию он молча без предупреждений ее выкинул. А может программист совершенно другое имел ввиду и банально описался. существуют компиляторы, которые угадывают, что хотел программист на основе того, что он написал? Цитата Есть варианты и похуже - компилятор может и оставить ошметки в коде от таких трюков. о чем тут речь? хотелось бы на примере Цитата Аналогично некорректно молча игнорировать, к сожалению, широко бездумно применяемое while( 1 ){.....} а с while(1) что не так? P.S. вопросы задаю не из потаенного желания уязвить, но из желания узнать правдуновое о GCC, в частности, avr-gcc. век еще не прожил, но учусь все время...
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Aug 21 2011, 10:21
|

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

|
QUOTE (ARV @ Aug 21 2011, 10:28)  существуют компиляторы, которые угадывают, что хотел программист на основе того, что он написал? Да, практически все  . Вопрос только в том, генерить или нет компилятору предупреждения, когда он видит бессмысленные с точки зрения генерации кода конструкции, например, все те-же do{...}while(0) и while( 1 ){...} Все ведь не все так безобидно с отсутствием предупреждений при выражениях которые верны всегда. Например: while( value > 1 ){...} где #define value 2 Это уже практически наверняка какой-то ляп программиста, о котором надо предупреждать. QUOTE о чем тут речь? хотелось бы на примере Сейчас примера специально искать не буду, и даже, надеюсь, что среди коммерческих компиляторов таких уже нет, но когда компиляторы десяток-другой лет тому назад были не такими умными, то за примерами ходить далеко не надо было  . QUOTE а с while(1) что не так? Не так, что используется условие которое верно всегда. Да я понимаю, что это многим уже страшно привычно и не бросается у глаза, и компиляторы давно уже не генерят лишнего кода. Но тем не менее пропускать такое без notes/warning не красиво. А писать такое неграмотно, хотя все поймут, что написавший "ложить" сахар, имел ввиду класть сахар в чай.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
Tuma Передача параметров в функцию. Aug 12 2011, 12:40 Mareng Кодvoid SendString (char String[]... Aug 12 2011, 12:51 Tuma Mareng, увы, не помогло.
Упорно присылает только п... Aug 12 2011, 12:58 Mareng Цитата(Tuma @ Aug 12 2011, 19:40) Самосто... Aug 12 2011, 13:03 zltigo Ответьте себе на два вопроса:
- Какая архитектура ... Aug 12 2011, 13:17 Tuma ЦитатаА если подряд 5-10 раз вызвать SendChar() с ... Aug 12 2011, 13:21 Genadi Zawidowski Исходники функци передачи символа покажите.
0) не ... Aug 12 2011, 15:17 zltigo QUOTE (Genadi Zawidowski @ Aug 12 2011, 18... Aug 12 2011, 16:07  AHTOXA Цитата(zltigo @ Aug 12 2011, 22:07) Однак... Aug 12 2011, 16:56   zltigo QUOTE (AHTOXA @ Aug 12 2011, 19:56) Нет, ... Aug 12 2011, 17:32    _Pasha Цитата(zltigo @ Aug 12 2011, 20:32) Фу, к... Aug 12 2011, 19:56     zltigo QUOTE (_Pasha @ Aug 12 2011, 22:56) К сож... Aug 12 2011, 20:47 Tuma Цитатане очень хорошая идея свои переменные (имена... Aug 15 2011, 12:32 sergeeff Цитата(Tuma @ Aug 15 2011, 15:32) Меня ещ... Aug 15 2011, 13:17 zltigo QUOTE (Tuma @ Aug 15 2011, 14:32) Меня ещ... Aug 16 2011, 11:38 Genadi Zawidowski Цитата(Tuma @ Aug 15 2011, 16:32) Я как-т... Aug 20 2011, 15:25  zltigo QUOTE (Genadi Zawidowski @ Aug 20 2011, 17... Aug 20 2011, 15:41 Tuma ЦитатаОбычно с подчеркивания начинаются служебные ... Aug 16 2011, 11:32 Tuma Однако с гарвардской архитектурой у меня пока не о... Aug 16 2011, 13:22 _Pasha Кодextern void send_char(char what);
#defi... Aug 16 2011, 14:50  zltigo QUOTE (_Pasha @ Aug 16 2011, 16:50) Я бы ... Aug 16 2011, 16:06   Юрий_СВ Цитата(zltigo @ Aug 16 2011, 19:06) Помол... Aug 16 2011, 18:11    Zlumd Цитата(Юрий_СВ @ Aug 17 2011, 01:11) Норм... Aug 17 2011, 02:49    777777 Цитата(Юрий_СВ @ Aug 16 2011, 22:11) Норм... Aug 17 2011, 09:50   aesok Цитата(zltigo @ Aug 16 2011, 20:06) Помол... Aug 20 2011, 12:02    zltigo QUOTE (aesok @ Aug 20 2011, 14:02) ответ ... Aug 20 2011, 12:10     aesok Цитата(zltigo @ Aug 20 2011, 16:10) Для о... Aug 20 2011, 13:12 sergeeff Наверное к тому же, как возврат из функции send_bl... Aug 16 2011, 16:11 AHTOXA Цитата(sergeeff @ Aug 16 2011, 22:11) Нав... Aug 17 2011, 03:11 _Pasha Цитата(zltigo @ Aug 16 2011, 19:06) зачем... Aug 16 2011, 18:18 sergeeff Интересная позиция. Городить do {} while(0) для об... Aug 16 2011, 19:33    777777 Цитата(zltigo @ Aug 20 2011, 18:02) Анало... Aug 21 2011, 12:19 _Pasha Забыл привести одну конструкцию, используемую в Pr... Aug 21 2011, 09:02 ARV Цитата(_Pasha @ Aug 21 2011, 12:02) Кто н... Aug 21 2011, 09:44  _Pasha Цитата(ARV @ Aug 21 2011, 12:44) и чего т... Aug 21 2011, 09:47 ReAl Цитата(_Pasha @ Aug 21 2011, 12:02) И так... Aug 21 2011, 11:56 ReAl Кодfor(;;) {
// endless loop
}Совсем-со... Aug 21 2011, 17:04 sergeeff Цитата(ReAl @ Aug 21 2011, 20:04) Кодfor... Aug 21 2011, 20:31  zltigo QUOTE (sergeeff @ Aug 21 2011, 23:31) Ну ... Aug 21 2011, 23:03   777777 Цитата(zltigo @ Aug 22 2011, 03:03) Я уже... Aug 22 2011, 04:25   ARV Цитата(zltigo @ Aug 22 2011, 02:03) Я уже... Aug 22 2011, 05:23    777777 Цитата(ARV @ Aug 22 2011, 09:23) лично мн... Aug 22 2011, 05:59 zltigo QUOTE (777777 @ Aug 22 2011, 07:25) Вообщ... Aug 22 2011, 08:29 sergeeff Цитата(zltigo @ Aug 22 2011, 11:18) К сча... Aug 22 2011, 08:35  zltigo QUOTE (sergeeff @ Aug 22 2011, 11:35) Как... Aug 22 2011, 08:43 777777 Цитата(zltigo @ Aug 22 2011, 12:29) Совер... Aug 22 2011, 09:15  zltigo QUOTE (777777 @ Aug 22 2011, 12:15) Что ж... Aug 22 2011, 09:32 ARV Цитата(zltigo @ Aug 22 2011, 11:29) Воспр... Aug 22 2011, 12:42  zltigo QUOTE (ARV @ Aug 22 2011, 15:42) разбор в... Aug 22 2011, 12:53   ARV Цитата(zltigo @ Aug 22 2011, 15:53) Отсут... Aug 22 2011, 13:32    zltigo QUOTE (ARV @ Aug 22 2011, 16:32) то почем... Aug 22 2011, 14:26     ARV Цитата(zltigo @ Aug 22 2011, 17:26) Напри... Aug 22 2011, 14:34 sergeeff Меня критикуют за цитаты из книг. Тем не менее. Ге... Aug 22 2011, 10:04 zltigo QUOTE (sergeeff @ Aug 22 2011, 13:04) явл... Aug 22 2011, 10:17 zltigo QUOTE но for(;;)
Это значит, что наличие акваланга... Aug 22 2011, 14:42 Petka Цитата(zltigo @ Aug 22 2011, 18:42) Это з... Aug 22 2011, 14:55  zltigo QUOTE (Petka @ Aug 22 2011, 17:55) У меня... Aug 22 2011, 15:02   ARV Цитата(zltigo @ Aug 22 2011, 19:02) Там ц... Aug 22 2011, 16:38   Petka Цитата(zltigo @ Aug 22 2011, 19:02) Почит... Aug 22 2011, 17:16 sergeeff Думается мне, что все, как часто это бывает в жизн... Aug 22 2011, 18:53 _Pasha Главная-таки проблема: если в стандарт закралась г... Aug 23 2011, 06:00
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|