|
CVAVR, Обнаружение конца массива |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 15)
|
Dec 15 2005, 13:27
|

Местный
  
Группа: Свой
Сообщений: 274
Регистрация: 10-08-05
Из: Екатеринбург
Пользователь №: 7 517

|
Да это то в курсах......................., как определить что именно последний элемент массива передан? нули собаки тож есть, можно конечно переменной которая ни где не встречается, но это немеренно в принцепе "ненужных" переменных Сравнивать последние элементы с какой то константой не реально, массивов штук 200, да и элементы массива повторяются..................например 5ый=10ому Что делать? Я думаю может функция какая есть, в принцепе с этой целью вопрос и задал............ Так то выслушаю все варианты  Размер массивов то ж разный
Сообщение отредактировал *SERG - Dec 15 2005, 13:35
|
|
|
|
|
Dec 15 2005, 13:57
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(*SERG @ Dec 15 2005, 20:27)  Да это то в курсах......................., как определить что именно последний элемент массива передан? нули собаки тож есть, можно конечно переменной которая ни где не встречается, но это немеренно в принцепе "ненужных" переменных Сравнивать последние элементы с какой то константой не реально, массивов штук 200, да и элементы массива повторяются..................например 5ый=10ому Что делать? Я думаю может функция какая есть, в принцепе с этой целью вопрос и задал............ Так то выслушаю все варианты Размер массивов то ж разный Ну а чем Вам счетчик длины массива то не нравится? По моему самое простое и стандартное решение. И, главное, ресурсов много не занимает - всего одна переменная, содержимое которой уменьшается (или увеличивается) с передачей каждого байта массива. Как только она стала равной нулю (или константе - длине массива), все массив передан. Она же, обычно, является и указателем на передаваемый элемент массива, то есть индексом. За чем усложнять то, что очевидно?
--------------------
|
|
|
|
|
Dec 15 2005, 13:58
|

инженер
   
Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701

|
Цитата(*SERG @ Dec 15 2005, 17:27)  Да это то в курсах......................., как определить что именно последний элемент массива передан? нули собаки тож есть, можно конечно переменной которая ни где не встречается, но это немеренно в принцепе "ненужных" переменных Сравнивать последние элементы с какой то константой не реально, массивов штук 200, да и элементы массива повторяются..................например 5ый=10ому Что делать? Я думаю может функция какая есть, в принцепе с этой целью вопрос и задал............ Так то выслушаю все варианты  Размер массивов то ж разный Так чем ответ IgorKossak - не устроил? Чудес в природе не бывает, никто за нас нашу работу не выполнит (шутка  ). Либо байт с константой, несколько байт с константой (константами) и контроль условия совпадения (все равно тяжеловато и может встретится, хотя если 0x55, 0x55, ..., 0x55, то вероятность для числовых данных ничтожная). Либо Ваша функция передачи массива по последовательному интерфейсу должна иметь входной параметр длина массива. При вызове функции он точно всегда известен.
|
|
|
|
|
Jan 16 2006, 07:51
|

Местный
  
Группа: Свой
Сообщений: 274
Регистрация: 10-08-05
Из: Екатеринбург
Пользователь №: 7 517

|
Цитата(prottoss @ Dec 15 2005, 16:57)  Цитата(*SERG @ Dec 15 2005, 20:27)  Да это то в курсах......................., как определить что именно последний элемент массива передан? нули собаки тож есть, можно конечно переменной которая ни где не встречается, но это немеренно в принцепе "ненужных" переменных Сравнивать последние элементы с какой то константой не реально, массивов штук 200, да и элементы массива повторяются..................например 5ый=10ому Что делать? Я думаю может функция какая есть, в принцепе с этой целью вопрос и задал............ Так то выслушаю все варианты Размер массивов то ж разный Ну а чем Вам счетчик длины массива то не нравится? По моему самое простое и стандартное решение. И, главное, ресурсов много не занимает - всего одна переменная, содержимое которой уменьшается (или увеличивается) с передачей каждого байта массива. Как только она стала равной нулю (или константе - длине массива), все массив передан. Она же, обычно, является и указателем на передаваемый элемент массива, то есть индексом. За чем усложнять то, что очевидно? Задача прояснилась конкретней, есть 150-200 массивов, записаны байты, длинна изменяется от 3 до 7, массивы заданны так: flash unsigned char hex2D[3]={0b01111111,0b00001000,0b00001000};//? flash unsigned char hex2E[4]={0b00111110,0b01000001,0b01000001,0b01000001};//? flash unsigned char hex2F[5]={0b01111111,0b00000001,0b00000001,0b00000001,0b01111111};//? т.е. количество элементов массива "известны" (записанны в объявленни массива в []), помоему ваш вариант подходит. Но не соображу как это зделать на функциях СИ, как определять какое количество элементов в данном массиве, какой функцией воспользоваться??? Хотелось бы чтонибудь типа такого: x= функция(hex2D[3]); где х- количество элементов массива, т.е в данном случае x=3; Если можно то примерчик приведите плиз
|
|
|
|
|
Jan 16 2006, 09:21
|

Местный
  
Группа: Свой
Сообщений: 274
Регистрация: 10-08-05
Из: Екатеринбург
Пользователь №: 7 517

|
Эххххххххххххххххххх, то............... да немного не то, это ж только на этапе компиляции т.е сколько массивов столько и этих переменных шлёпать чтоли??? А потом ещё соответствие какето вводить......... Проще наверно нулевой элемент массива вводить равный длинне массива и от него уже плясать ( стандартно декрементировать до нуля), т.к "нули" и различные переменные есть в массивах, можно сказать что всё от 0 до 0XFF занято  , а нулевой элемент массива уже однозначно определит его длинну!!! Наверно так и зделаю Может ещё что нибудь подскажите???
Сообщение отредактировал *SERG - Jan 16 2006, 09:32
|
|
|
|
|
Jan 16 2006, 10:44
|
Знающий
   
Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32

|
Цитата(Vic1 @ Jan 16 2006, 12:08)  *SERG???? На этапе компиляции Вам и так известна длина каждого из массивов, а по указателю массива sizeof не сработает! 1) Не всегда известна: char s[]="some arbitrary string"; 2) Сработает для массива, если это не параметр функции.
--------------------
Главная линия этого опуса ясна мне насквозь!
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|