Jump to content

    

tuma

Участник
  • Content Count

    6
  • Joined

  • Last visited

Community Reputation

0 Обычный
  1. Однако с гарвардской архитектурой у меня пока не очень складывается. Я научился передавать в функцию константные строки, типа: SendString (PSTR("Long-long-long String!\n")); либо через глобальную или локальную статическую переменную: char TestFlashStr[] PROGMEM = "Test String.\n"; SendString (TestFlashStr); Разумеется с последующим использованием pgm_read_byte ();. Но всё это константы. А как мне передать переменную? Например результат работы функции atoi ();.
  2. Вы же сами написали "__DATE__, __FILE__ , __noop" - всё с двумя подчёркиваниями, а я использую одно и всегда с заглавной буквы - _String, _UARTData и пр..
  3. Меня ещё мой куратор на первой работе научил так выделять передаваемые в функцию параметры. Я как-то даже не задумывался что умудрюсь пересечься с какими либо объявлениями. Хотя теоретически это реально. Всем спасибо, всё переложено в память программы, всё работает.
  4. О, что вы! С этого всё начиналось. :) Всё прекрасно работает. Я заметил что параметр gcc -O - влияет. void SendChar (char _Char) работает всегда. А вот void SendString (char String[]) показывает первый символ только при -O2 или -O3. При -O1 и -Os не показывается даже первый символ - только мусор. При -O2 или -O3 вместо двух символов SendString ("32"); приходит четыре символа: 3???, вместо четырёх - шесть: 3?????. Замена первого символа влияет, т.е. первый символ приходит корректно. При попытке послать один символ приходит один корректный символ.
  5. Mareng, увы, не помогло. Упорно присылает только первый символ, а далее - мусор.
  6. Добрый день, коллеги! Возможно я что-то недопонимаю или не знаю в 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.