Функция для битового массива
- Войдите на сайт для отправки комментариев
Пнд, 07/08/2017 - 00:51
Всем доброго времени суток, обнаружил в своем коде большое количество повторяющихся обращений к битовому массиву,
digitalWrite(DAT, bitRead(SO[fn], j) != 0 ? HIGH : LOW); digitalWrite(CLK, HIGH); digitalWrite(CLK, LOW); digitalWrite(DAT, bitRead(SO[fn], j) != 0 ? HIGH : LOW); digitalWrite(CLK, HIGH); digitalWrite(CLK, LOW);
решил вывести эти повторяющиеся участки в отдельную функцию, казалось бы все просто, указываю тип данных переменной как битовый массив Symb.
void prin (unsigned byte Symb[]) { digitalWrite(DAT, bitRead(Symb[fn], j) != 0 ? HIGH : LOW); digitalWrite(CLK, HIGH); digitalWrite(CLK, LOW); digitalWrite(DAT, bitRead(Symb[fn], j) != 0 ? HIGH : LOW); digitalWrite(CLK, HIGH); digitalWrite(CLK, LOW); }
Но компилятор ругается на такую формулировку задачи. Возможно ли вообще подкидывать битовые массивы в функцию таким образом?
А где у Вас битовый массив? byte - это вообще-то байт, а не бит.
Опечатка. Массив действительно байтовый.
Но компилятор ругается на такую формулировку задачи. Возможно ли вообще подкидывать битовые массивы в функцию таким образом?
В функцию нельзя передавать массив неопределенного размера - это когда в квадратных скобках ничего нет. Либо укахите размер, либо, что общепринято - передавайте массив по ссылке.
Я дергаю ногой термопринтера определяя какие из точек термоголовки будут горячими а какие холодными. Принцип как у сдвигового регистра.
Мне вот не ясно как передать массив по ссылке?
1
void prin (unsigned byte *Symb[]) {
Так?
соображений Вы ее применяете.
https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/operat...
Не так.
Просто имя массива является указателем на его начало.
Почитайте Кернигана и Ритчи. Пока не сделаете этого, будете за каждой ерундой на форум бегать.
Очевидно же, что функция bitRead() возвращает либо 0, либо 1. Зачем было вводить дополнительную проверку?
В функцию нельзя передавать массив неопределенного размера - это когда в квадратных скобках ничего нет. Либо укахите размер, либо, что общепринято - передавайте массив по ссылке.
Не так.
Просто имя массива является указателем на его начало.
Почитайте Кернигана и Ритчи. Пока не сделаете этого, будете за каждой ерундой на форум бегать.
Я кажется понял где тут неясность. Сейчас постараюсь пояснить. Дело в том, что у меня несколько Байтовых массивов, а массива Symb, используемого в процедуре как такового не существует. Я хочу обращаясь к процедуре подкидывать на место Symb один из моих массивов. Если я обращусь напрямую к любому из них в процедуре, то их нельзя будет поменять при вызове проуедуры.
Мой вопрос изначально был: возможно ли так оформить процедуру, чтобы я мог обращаясь к ней выбирать нужный байтовый массив из нескольких?
Т.е. имеется функция Prin
она не работает, но пока что это опустим. При обращении к этой функции я ввожу
Таким образом три байтовых массива BM1[], BM2[], BM3[] мне хотелось бы подсунуть на место Symb в процедуру.
Возможно ли это?
Упрямо не хотим изучать языки Си и Си++
Мой вопрос изначально был: возможно ли так оформить процедуру, чтобы я мог обращаясь к ней выбирать нужный байтовый массив из нескольких?
Возможно ли это?
Мой ответ изначально был:
Почитайте Кернигана и Ритчи. Пока не сделаете этого, будете за каждой ерундой на форум бегать.
Огромное спасибо всем. Я ставил этот ансигнед и ничего не получалось. Книжку обязательно изучу. Сейчас все заработало отлично!