реклама на сайте
подробности

 
 
> Передача параметров в функцию., AVR-GCC/ATMega2560
Tuma
сообщение Aug 12 2011, 12:40
Сообщение #1





Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Pasha
сообщение Aug 20 2011, 13:27
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(zltigo @ Aug 20 2011, 15:10) *
Для особо непонятливых слова "в данном случае" в моем вопросе были выделены жирным шрифтом. Если я выделю их, например, большими красными буквами, Вы сможете дать разумный ответ на вопрос?

Повторяю еще раз. Под руку подвернулся способ объявить локальную переменную. А вообще, блоки "от фонаря" лично я не люблю, т.к. для меня они понижают читабельность кода. Думаю, что не я один такой.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 20 2011, 13:37
Сообщение #3


Гуру
******

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



QUOTE (_Pasha @ Aug 20 2011, 15:27) *
Повторяю еще раз.

Незачем sm.gif. Я и первый раз ответ понял.
QUOTE (aesok @ Aug 20 2011, 15:12) *
Когда я пишу макрос то....

В данном случае это НЕ макрос, а отвечать почему-то Вы начали мне, а не Автору. Что касается обертки всего чего попало макросообразного во while(0), то в ответ на такое вменяемый компилятор встретив бессмысленное выражение будет генерить warning. Посему злоупотреблять, а то употреблять по причине решения притянутой за уши "проблемы", совершенно не следует. Совершенно достаточно заключать многострочные макросы в фигурные скобки. В этом случае либо он будет работать, как положено, либо получите (если вдруг забыли sm.gif, что это FUNCTION() у Вас макрос ) сообщение об ошибке и напишите просто и без затей c фигурными скобками:
if( ... )
{ FUNCTION();
}
else
......

вместо
if( ... )
FUNCTION();
else
......


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Юрий_СВ
сообщение Aug 20 2011, 13:53
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 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

Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 20 2011, 14:02
Сообщение #5


Гуру
******

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



QUOTE (Юрий_СВ @ Aug 20 2011, 15:53) *
Видимо GCC невменяемый компилятор...

Да sad.gif. Встретив бессмысленную языковую конструкцию он молча без предупреждений ее выкинул. А может программист совершенно другое имел ввиду и банально описался. Есть варианты и похуже - компилятор может и оставить ошметки в коде от таких трюков sad.gif. Аналогично некорректно молча игнорировать, к сожалению, широко бездумно применяемое while( 1 ){.....}


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ARV
сообщение Aug 20 2011, 17:44
Сообщение #6


Профессионал
*****

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



Цитата(zltigo @ Aug 20 2011, 17:02) *
Да sad.gif . Встретив бессмысленную языковую конструкцию он молча без предупреждений ее выкинул. А может программист совершенно другое имел ввиду и банально описался. Есть варианты и похуже - компилятор может и оставить ошметки в коде от таких трюков sad.gif . Аналогично некорректно молча игнорировать, к сожалению, широко бездумно применяемое while( 1 ){.....}
что-то я не понял сии выпады... поясните, пожалуйста, о чем конкретно вы говорите?


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
||- - zltigo   QUOTE (ARV @ Aug 20 2011, 19:44) что-то я...   Aug 20 2011, 18:28
||- - ARV   Цитата(zltigo @ Aug 20 2011, 21:28) что-т...   Aug 21 2011, 08:28
||- - zltigo   QUOTE (ARV @ Aug 21 2011, 10:28) существу...   Aug 21 2011, 10:21
|- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01477 секунд с 7
ELECTRONIX ©2004-2016