Сериг, sizeof - это не функция (значение должно быть известно на этапе компиляции) и не магия. В функцию передаётся массив, размер которого неизвестен, sizeof просто чисто логически не может знать это число.
Передавайте это значение как аргумент функции, а вот уже там, где эта функция вызывается - там для конкретного массива уже это число должно быть известно.
ARV, первый вариант точно отпадает, т.к. Массив у меня безразмерный (и не один), а посему я заведомо не знаю его размер. А вот второй вариант сейчас попробую, отпишусь.
вообще говоря, если вы и в самом деле работаете с выводом картинок на дисплей, то я просто не представляю, как при этом вы обходитесь без знания "размеров картинки". ведь где-то там в массиве у вас явно должны храниться ширина и высота картинки в пикселах, а уж по ним можно вычислить и размер массива в байтах... так что даже и sizeof не понадобится.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
ARV, размер в пикселях я знаю (х на у), но корректно посчитать перемножив эти данные - получается только в случае равносторонней картинки. На дисплей вывод происходит постранично (5х8 пикселей одно знакоместо (x на y)), из-за этого мне надо понимать, когда переносить курсор на следующую строку. Зная объем данных в байтах, я могу понимать, когда необходимо заканчивать вывод (ну это для вас совершенно очевидно). Из-за этого я и пытаюсь придумать велосипед... P.s.
Код:
small_image(20,20,img, sizeof(img)); // а можно и так
Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт дек 19, 2019 22:23:35
Открыл глаза
Зарегистрирован: Вт сен 10, 2019 16:18:33 Сообщений: 64
Рейтинг сообщения:0
Вопросик,озадачился,реально ли сделать,что бы нажали кнопку и если допустим не нажали повторно через определенное время,например пять секунд,то выключился определенный пин или весь порт?Если да,то можно пример,я использую внешнее прерывание INT0 и INT1
Подскажите где можно скачать годную книжку по програмипованию avr си в пдф
Спроси у Яндекса "di halt avr. учебный курс", вторая ссылка отдает очень хорошую ПДФ-ку. Первая половина - программирование AVR на АСМе, вторая - на Си. ИМХО, это лучший учебник по АВР.
_________________ Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср дек 25, 2019 18:42:19
Открыл глаза
Зарегистрирован: Вт сен 10, 2019 16:18:33 Сообщений: 64
Рейтинг сообщения:0
Спасибо вроде норм,а еще что-нибудь посоветуйте именно AVR на СИ,просто там на асме много листов,а я хотел напечатать на работе почитать,так как дома нет времени,я бегло пробежался по той книге,просто там вся тема снизу,иногда цепляет вверх по некоторым моментам и частично часть СИ неоч.будет печатать,кстати вопрос дурацкий возник,а если в перемешку на асме и си написать программу,прокатит?)))
Я скачал последнюю эволюшн версию с офф сайта и при компиляции примерно на 200 байт меньше она сделала прошивку (около 4К размер) что я считаю довольно таки неплохо. Но нифига ее нигде нет. Не покупать же право слово.
PORTB=(1<<7)|(1<<6) \\в регистр PORTB 7 и 6 бит переменной X биты 7 и 6 соответственно PORTC=(1<<7)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1) \\в переменную PORTC 7,5,4,3,2,1 бит переменной X 5,4,3,2,1,0 соответственно
итого должно выйти:
PORTB=(0<<7)|(0<<6) PORTC=(1<<7)|(0<<5)|(1<<4)|(0<<3)|(1<<2)|(1<<1) \\должно быть так
PORTB=x&((1<<7)|(1<<6)); x<<=1; //переставим биты в х так, чтобы они стали соответствовать битам порта с x&=~(1<<7); x|=(x<<1)&(1<<7); PORTC=x&((1<<7)|(<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1);
Добавлено after 4 minutes 43 seconds: так неиспользуемые биты портов (портб 0-5 и портс 0, 6) сбросятся в 0 если их состояние требуется сохранить, то присвоение нужно делать так: PORTB=(x&((1<<7)|(1<<6)))|(PORTB&(~((1<<7)|(1<<6)))); с портом с - аналогично...
_________________ Для тех, кто не учил магию мир полон физики Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
третья строчка. Тут переменная уже смещенная на бит влево. я вижу эту строчку так. Смещенная на 1 бит влево x:
x<<=1;
x был 00101011 x стал 01010110
затем x&=(~1<<7); \\инверсия 7 бита? и побитовое И
x был 01010110 x (~1<<7) стал 11010110 x (&) стал 11010110 _____ в переменной x старшие биты 0b00101011 0 и 0 соответственно. а после PORTB=x&((1<<7)|(1<<6));
получается 0b11000000. но должны быть нули как в переменной.
давай по порядку: биты х - 87654321 (я специально так указал, потомучто 0 будетиобозначать 0) портб<—87000000 портс<—60543210 в порт б отправить легко - просто ммаской отфильтруем 2 старших бита теперь порт с: сдвинем на 1 влево х<<=1; х — 76543210 очистим 7 бит х&=~(1<<7); х — 06543210 и перенесём один бит на нудное место для этого его надо отфильтровать и сдвинуть на одну позицию влево х 06543210 х'=х<<1 65432100 (х')&(1<<7) 60000000 теперь сложим с исходной х 66543210 6 бит нам не нужен, поэтому не важно что в нём лежит отфильтруем по маске для портс 60543210
_________________ Для тех, кто не учил магию мир полон физики Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения