Уважаемые посетители! Форум CQHAM.RU существует исключительно за счет показа рекламы. Мы будем благодарны, если Вы не будете блокировать рекламу на нашем Форуме. Просим внести cqham.ru в список исключений для Вашего блокировщика рекламы.
Страница 1 из 5 1234 ... ПоследняяПоследняя
Показано с 1 по 10 из 43

Тема: вопрос по СИ

  1. #1

    вопрос по СИ

    Почему функция не возвращает значение (компилятор микроСи) кусочек текста ниже :
    unsigned short Z1 , Z2 , Z3 , Z4 , Z5 , P[16] ;
    unsigned short raz()
    {
    unsigned short Z5 ;
    P[16]={1,1,1,1,0,0,0,0,0, 0,0,0,0,1,1,1};
    return P[16] ;
    }
    void main ()
    {
    unsigned short S ;
    unsigned int k , e ;
    Z5=0b001000010000000 0;
    Z4=0b010100001100011 1;
    Z3=0b010000000000000 0;
    Z2=0b110000000000000 0;
    Z1=0b001000000000000 0;
    PORTA=1 ; // FSYNC
    TRISA=0 ;
    Delay_ms(10) ;
    PORTB=1 ; //SCLK
    TRISB=0;
    Delay_ms(10) ;
    PORTC=0; //SDATA
    TRISC=0;
    Delay_ms(3000);
    S=Z5;
    raz(Z5) ;
    for(e=0;e<16;e++)
    {
    k=15-e ;
    PORTB=0; //SCLK=0 старт 1-го бита
    PORTC=P[k]; //SDATA=DBn
    Delay_ms(100);
    PORTB=1; //SCLK=1
    Delay_ms(100);
    }
    PORTA=1;
    PORTB=1;
    Delay_ms(300);
    }


  2. #2
    Аватар для SergeyTT
    Регистрация
    21.09.2010
    Адрес
    Харьков
    Сообщений
    268
    Позывной
    UR4LVN
    Цитата Сообщение от VOVA080808 Посмотреть сообщение
    Почему функция не возвращает значение (компилятор микроСи) кусочек текста ниже :
    P[16]={1,1,1,1,0,0,0,0,0, 0,0,0,0,1,1,1};
    return P[16] ;
    Вы инициализируете массив из 16 элементов,а вернуть хотите 17-й,ведь в С индексация элементов массива начинается с 0.
    WBR,Sergey

  3. #3
    unsigned short Z1 , Z2 , Z3 , Z4 , Z5 , P[16] ; // вы объявили глобальные переменные, массив P[16] остался без инициализации.

    unsigned short raz() // эта функция должна вызываться без параметров, однако в функции main она вызывается raz(z5)
    {
    unsigned short Z5 ; // здесь объявлена внутрення переменная которая не используется
    P[16]={1,1,1,1,0,0,0,0,0, 0,0,0,0,1,1,1}; // объявлен массив внутри функции
    // он будет инициализирован каждый раз при вызове этой функции
    // этот массив нужно убрать, достаточно сделать инициализацию внешнего массива


    return P[16] ; // функция всегда будет возвращать этот только элемент массива

    }

    Z5=0b001000010000000 0; какой размер у переменных объявленных как short ? вы присваиваете им значение int
    Z4=0b010100001100011 1;
    Z3=0b010000000000000 0;
    Z2=0b110000000000000 0;
    Z1=0b001000000000000 0;

    raz(Z5) ; эта функция объявлена как unsigned short raz()
    она должна вызываться без параметров
    сама функция возвращает параметр поэтому правильно ее вызывать например так:
    Z5=raz();
    чтобы эта функция работала ее нужно написать по другому
    unsigned short raz(unsigned short temp)
    {return P[temp] ;
    }
    В вашем случае эта функция совсем лишняя.
    Достаточно инициализировать глобальный массив.
    Ну и следует посмотреть порядок обращения к массиву - допустимо ли обращаться к элементу массива с номером 16?
    Владимир.

  4. #4
    Большое спасибо за ответы !
    Цитата Сообщение от UA0LFK Посмотреть сообщение
    массив P[16] остался без инициализации.
    почему ? как его инициализировать ?

    Цитата Сообщение от UA0LFK Посмотреть сообщение
    return P[16] ; // функция всегда будет возвращать этот только элемент массива
    как зделать чтоб возвращала весь массив ?

  5. #5
    Цитата Сообщение от VOVA080808 Посмотреть сообщение
    Большое спасибо за ответы !

    почему ? как его инициализировать ?


    как зделать чтоб возвращала весь массив ?
    А погуглить религия не позволяет? В интернете масса сайтов по программированию - http://lord-n.narod.ru/download/book..._C/04/0408.htm

  6. #6
    Цитата Сообщение от ru9czw Посмотреть сообщение
    А погуглить религия не позволяет? В интернете масса сайтов по программированию
    гуглил , причем очень и очень долго , изучал литературу - противоречий теории с моей практикой не нашел , покажите как надо .

  7. #7
    Цитата Сообщение от VOVA080808 Посмотреть сообщение
    гуглил , причем очень и очень долго , изучал литературу - противоречий теории с моей практикой не нашел , покажите как надо .
    Ну ведь постом выше Вам ответили на Ваши последующие вопросы. Если Вы изучали литературу, то такое понятие, как область видимости должно быть Вам знакомо. Т.е. массив P[16], который объявлен вне тела функции raz() (глобальный), и массив P[16], объявленный внутри функции raz(), это два разных массива. Значит, массив P[16] нужно инициализировать в теле main(). Я не С-программист, поэтому могу ошибиться, но для того, чтобы в С функция вернула массив, нужно использовать указатель на него. Это можно подсмотреть в литературе, которую Вы изучали .

  8. #8
    Цитата Сообщение от ru9czw Посмотреть сообщение
    Значит, массив P[16] нужно инициализировать в теле main().
    пробовал по всякому - не помогает ...

    Цитата Сообщение от ru9czw Посмотреть сообщение
    чтобы в С функция вернула массив, нужно использовать указатель на него.
    попробую , может поможет .....

  9. #9
    Похоже, я немного был не прав. Да, Вы инициализируете массив Р в функции raz(). Но функция возвращает всего один элемент массива. Но и тут, как правильно указал SergeyTT, ошибка, так как размер массива Р - 16 элементов (0...15), а Вы пытаетесь вернуть 17-й. Если массив Р будет использоваться только в main(), то стоит ли огород городить?
    void main()
    {
    unsigned short P[16]={1,1,1,1,0,0,0,0,0, 0,0,0,0,1,1,1};
    .......
    .......
    где-то тут работаем с массивом;
    ........
    ........
    }

    За синтаксис не ручаюсь, т.к. на С программировал давно, в студенчестве.


  10. #10
    Цитата Сообщение от ru9czw Посмотреть сообщение
    массив Р будет использоваться только в main(), то стоит ли огород городить?
    стоит .
    Цитата Сообщение от ru9czw Посмотреть сообщение
    размер массива Р - 16 элементов (0...15), а Вы пытаетесь вернуть 17-й.
    пытаюсь вернуть массив полностью ....
    покачто безусшпешно

Страница 1 из 5 1234 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •