Функция для битового массива
- Войдите на сайт для отправки комментариев
Пнд, 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 - это вообще-то байт, а не бит.
Опечатка. Массив действительно байтовый.
void prin (unsigned byte Symb[]) {Но компилятор ругается на такую формулировку задачи. Возможно ли вообще подкидывать битовые массивы в функцию таким образом?
В функцию нельзя передавать массив неопределенного размера - это когда в квадратных скобках ничего нет. Либо укахите размер, либо, что общепринято - передавайте массив по ссылке.
bitRead(SO[fn], j) != 0 ? HIGH : LOW)Я дергаю ногой термопринтера определяя какие из точек термоголовки будут горячими а какие холодными. Принцип как у сдвигового регистра.
Мне вот не ясно как передать массив по ссылке?
1
void prin (unsigned byte *Symb[]) {
Так?
соображений Вы ее применяете.
https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/operat...
Не так.
Просто имя массива является указателем на его начало.
Почитайте Кернигана и Ритчи. Пока не сделаете этого, будете за каждой ерундой на форум бегать.
Очевидно же, что функция bitRead() возвращает либо 0, либо 1. Зачем было вводить дополнительную проверку?
В функцию нельзя передавать массив неопределенного размера - это когда в квадратных скобках ничего нет. Либо укахите размер, либо, что общепринято - передавайте массив по ссылке.
Не так.
Просто имя массива является указателем на его начало.
Почитайте Кернигана и Ритчи. Пока не сделаете этого, будете за каждой ерундой на форум бегать.
Я кажется понял где тут неясность. Сейчас постараюсь пояснить. Дело в том, что у меня несколько Байтовых массивов, а массива Symb, используемого в процедуре как такового не существует. Я хочу обращаясь к процедуре подкидывать на место Symb один из моих массивов. Если я обращусь напрямую к любому из них в процедуре, то их нельзя будет поменять при вызове проуедуры.
Мой вопрос изначально был: возможно ли так оформить процедуру, чтобы я мог обращаясь к ней выбирать нужный байтовый массив из нескольких?
Т.е. имеется функция Prin
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); }она не работает, но пока что это опустим. При обращении к этой функции я ввожу
Таким образом три байтовых массива BM1[], BM2[], BM3[] мне хотелось бы подсунуть на место Symb в процедуру.
Возможно ли это?
Упрямо не хотим изучать языки Си и Си++
/**/ //-------------------- void viev(int *masiv) { Serial.print(masiv[0]); Serial.print(" "); Serial.print(masiv[1]); Serial.print(" "); Serial.print(masiv[2]); Serial.println(); } //------Компановка-------------- int masiv1[3] = {1, 2, 3}; int masiv2[3] = {4, 5, 6}; int masiv3[3] = {7, 8, 9}; //---------main----------- void setup() { Serial.begin(9600); viev(masiv1); viev(masiv2); viev(masiv3); } void loop() { } /*Скетч использует 1846 байт (5%) памяти устройства. Всего доступно 32256 байт. Глобальные переменные используют 206 байт (10%) динамической памяти, оставляя 1842 байт для локальных переменных. Максимум: 2048 байт. */Мой вопрос изначально был: возможно ли так оформить процедуру, чтобы я мог обращаясь к ней выбирать нужный байтовый массив из нескольких?
Возможно ли это?
Мой ответ изначально был:
Почитайте Кернигана и Ритчи. Пока не сделаете этого, будете за каждой ерундой на форум бегать.
Огромное спасибо всем. Я ставил этот ансигнед и ничего не получалось. Книжку обязательно изучу. Сейчас все заработало отлично!