-
- а не хотите внедрить не адрес, а численный идентификатор &1, &2 ,а все адреса переменных внести в таблицу, а при разборе обращаться к ней как раз по идентификатору... Вы же знаете, прохо привязываться при вводе-выводе к физ.адресам переменных. - Хитрый Китаец(29.11.2010 15:28)
- таблицу нужно формировать. Численные идентификаторы нужно объявить, и обеспечить их уникальность koyodza(53 знак., 29.11.2010 15:38)
- А в чем проблема, слабайте на каком-нибудь питоне конфигурацию и декларацию и prebuid eё перед компиляцией проекта.Очень удобно. - Хитрый Китаец(30.11.2010 15:22)
- помнбю, когда-то делал генератор телевизионных тестовых сигналов на паре К573РФ2 и нескольких микросхемах мелкой логики. Так рисунки, а потом таблицу прошивки делал карандашём на листике :=) Потом, правда, написал на С и картинку из ВМР koyodza(14 знак., 30.11.2010 22:05)
- Аналогия неуместна, т.к.Вы хотите получить "лобовое" решение, которое правила языка С не позволяют сделать. Для этого и существуют другие языки :). А "обходные" решения обсудили ниже. - Хитрый Китаец(01.12.2010 12:30)
- как сделать по-другому я не спрашивал, поскольку у самого есть несколько вариантов. Вопрос был вполне определённый, и что лобового решения нет я знаю. Ожидал, что будут предложения из области макросов, но не сложилось - koyodza(03.12.2010 00:42)
- А почему не хочешь сделать, как MBedder предложил? бомж(162 знак., 03.12.2010 22:03, ссылка)
- как сделать по-другому я не спрашивал, поскольку у самого есть несколько вариантов. Вопрос был вполне определённый, и что лобового решения нет я знаю. Ожидал, что будут предложения из области макросов, но не сложилось - koyodza(03.12.2010 00:42)
- Аналогия неуместна, т.к.Вы хотите получить "лобовое" решение, которое правила языка С не позволяют сделать. Для этого и существуют другие языки :). А "обходные" решения обсудили ниже. - Хитрый Китаец(01.12.2010 12:30)
- помнбю, когда-то делал генератор телевизионных тестовых сигналов на паре К573РФ2 и нескольких микросхемах мелкой логики. Так рисунки, а потом таблицу прошивки делал карандашём на листике :=) Потом, правда, написал на С и картинку из ВМР koyodza(14 знак., 30.11.2010 22:05)
- А в чем проблема, слабайте на каком-нибудь питоне конфигурацию и декларацию и prebuid eё перед компиляцией проекта.Очень удобно. - Хитрый Китаец(30.11.2010 15:22)
- таблицу нужно формировать. Численные идентификаторы нужно объявить, и обеспечить их уникальность koyodza(53 знак., 29.11.2010 15:38)
- Ой бабоньки... Испортили GNU-тые язык... Когда-то что-то насколько-то и подобное делал так, как сейчас шибко грамотный gcc отказывается собирать: -ReAl-(1300 знак., 26.11.2010 17:25, )
- Кажется даже такое работало: -ReAl-(122 знак., 26.11.2010 17:32, )
- Но формально -- так же не правильно. Фиг знает как стек устроен, формально если. Надо через va_arg... - fk0(26.11.2010 17:41)
- Ага, точно, в BCC5 работает. - -ReAl-(26.11.2010 17:35, )
- Кажется даже такое работало: -ReAl-(122 знак., 26.11.2010 17:32, )
- попробую ответить сразу всем: варианты с разбиением строки на кучу строк, а также варианты со структурами и хранением адресов в отдельных полях не годятся.
Нужен вариант, аналогичный от VasilySдополнено koyodza(855 знак., 26.11.2010 12:46 - 14:42)- Привет. Не парься и используй sprintf если ограничено время то выводи в буфер заранее. Только не говори что и память ограничена :) . Получишь стандартный интерфейс функции printf в полное распоряжение. Ещё чего нибудь придумаешь - СоветыВсёРавноНеСлушают (30.11.2010 08:58, )
- время как раз почти не ограничено (в разумных пределах), а вот ОЗУ на вес золота. Про то, чтобы выделить буфер под страничку речь не идёт. sprintf и printf не использую вообще, даже stdio.h не подключаю. И не собираюсь - koyodza(30.11.2010 09:40 - 09:42)
- Ну если ПЗУ позволяет применить библиотеку, то можно выводить не в буфер в озу а сразу куда нужно вовне переопределив putchar - sprintf в конечном счёте через него и выводит. Причём в сишной блиблиотеке существуют разные версии реализации СоветыВсёРавноНеСлушают (134 знак., 30.11.2010 12:30, )
- Использование printf требует приличной глубины стека. Когда реально мало памяти в дивайсе, применяют AJAH и весь парсинг данных делают в броузере. - AlexandrY(30.11.2010 14:24)
- Говнокод -- это значит можно уронить embedded сервер некорректным запросом? - fk0(30.11.2010 19:57)
- ссылочки не подбросите с нормальным описанием? Спасибо - koyodza(30.11.2010 14:46)
- Дык Генерал же проповедник этого пути. - AlexandrY(30.11.2010 14:52, ссылка)
- читал, но этого достаточно только для первоначального ознакомления. Чтобы сделать хоть что-то этого мало. Думал, знаете хороший ресурс - koyodza(30.11.2010 14:57)
- Нее.., таких проблем уже давненько не решал. У меня своя "проприетарная" технология. - AlexandrY(30.11.2010 15:11)
- Да, вот есть примерчик работы с либой jquery.js. Может даст какие-нибудь идеи. - AlexandrY(30.11.2010 15:17, ссылка)
- мне бы попроще чего koyodza(507 знак., 30.11.2010 19:30)
- Нахрен тут вообще лазить браузером - я бы не связывался, если ресурсов контроллера мало... Тебе приходилось ковыряться в настройках всяческих роутеров посредством WEB интерфейса? Если настроек много, то это утомляет. Еthernet пакет может быть Гудвин(292 знак., 30.11.2010 20:52)
- заказчик хочет браузером koyodza(180 знак., 30.11.2010 21:28)
- Сделай приложение для браузера типа "фраерфокс", чтоб отсылало UDP. На JAVA если надо. - fk0(01.12.2010 11:21)
- а если нету фраерфокса, или версия несовместимая выйдет, наладчик что делать будет? Интернета с высокой вероятностью тоже может не оказаться. Тут чем меньше наворотов используется - тем лучше - koyodza(01.12.2010 21:33)
- А если у наладчика не окажется компьютера или он слепой инвалид? Даётся компакт-диск. На нём "приложение" в виде Java-апплета и Java для распространённых ОС. Непонятно, зачем вообще браузер... ну если требуется -- затем и апплет. - fk0(01.12.2010 21:39)
- Вас бы в командировку в какую-нибудь Папуасию на пару месяцев... - koyodza(01.12.2010 21:50 - 21:57, ссылка)
- А вдруг в папуасии компьютеров нет? Или там Windows'95 без Internet Explorer? Или просто LAN нет в конторе -- что весьма вероятно. - fk0(02.12.2010 11:29)
- значит будете циферьки палочкой на песке рисовать - koyodza(02.12.2010 22:49)
- Обе:) - Vit(03.12.2010 00:23)
- значит будете циферьки палочкой на песке рисовать - koyodza(02.12.2010 22:49)
- А вдруг в папуасии компьютеров нет? Или там Windows'95 без Internet Explorer? Или просто LAN нет в конторе -- что весьма вероятно. - fk0(02.12.2010 11:29)
- Да, Java для IE и т.п. тоже существует... - fk0(01.12.2010 21:40)
- Вас бы в командировку в какую-нибудь Папуасию на пару месяцев... - koyodza(01.12.2010 21:50 - 21:57, ссылка)
- А если у наладчика не окажется компьютера или он слепой инвалид? Даётся компакт-диск. На нём "приложение" в виде Java-апплета и Java для распространённых ОС. Непонятно, зачем вообще браузер... ну если требуется -- затем и апплет. - fk0(01.12.2010 21:39)
- а если нету фраерфокса, или версия несовместимая выйдет, наладчик что делать будет? Интернета с высокой вероятностью тоже может не оказаться. Тут чем меньше наворотов используется - тем лучше - koyodza(01.12.2010 21:33)
- Сделай приложение для браузера типа "фраерфокс", чтоб отсылало UDP. На JAVA если надо. - fk0(01.12.2010 11:21)
- заказчик хочет браузером koyodza(180 знак., 30.11.2010 21:28)
- Если в приборе есть web, но не влезает printf -- это повод задуматься об адекватности всей конструкции в целом. - fk0(30.11.2010 19:58)
- printf влезает спокойно, только толку? - koyodza(30.11.2010 21:02)
- Короче не надо изобретать поделия из г-на, делай UDP-конфигуратор в виде Java-апплета. Ибо донельзя кастрированные версии TCP ещё аукнуться 10 раз. По-уму таки надо полноценные более-менее стек, а там уж речь о printf не стоит, он на фоне этого fk0(168 знак., 01.12.2010 11:24)
- у меня к printf`у вопросов нет, не пойму почему вы за него ухватились. Если бы его применение как-то помогало решить задачу, я бы использовал. Вот и продемонстрируйте, как здесь может помочь printf. А фрагментированности запроса я не koyodza(894 знак., 01.12.2010 21:49)
- Всё это уныло на самом деле. На счёт фрагментации и т.п. Динамическая память вполне реальна, но даже скорей не нужна. А printf умеет и в поток выводить -- здесь я не вижу проблемы. И вообще можно через sprintf маленькие кусочки только формировать. fk0(327 знак., 02.12.2010 11:33)
- почему не годится вывод прямо в поток, я уже устал объяснять в пятый раз: ТСР знаете? Где в нём контрольная сумма лежит знаете? Ну и каким боком тут printf? koyodza(178 знак., 02.12.2010 18:24)
- Абисняю, задача решается тривиальна! printf и вообще весь вывод применяется в 2 захода с одними данными: первый раз считается сумма, а данные выкидываются. Второй раз данные передаются. И не нада попросту хамить. Дураков тут нет. - fk0(03.12.2010 00:27)
- не получится: между первым и вторым вызовами данные могут измениться - koyodza(03.12.2010 00:39)
- Ну там же не мегабайты меняются, их можно вначале скопировать... - fk0(03.12.2010 16:52)
- не получится: между первым и вторым вызовами данные могут измениться - koyodza(03.12.2010 00:39)
- Абисняю, задача решается тривиальна! printf и вообще весь вывод применяется в 2 захода с одними данными: первый раз считается сумма, а данные выкидываются. Второй раз данные передаются. И не нада попросту хамить. Дураков тут нет. - fk0(03.12.2010 00:27)
- почему не годится вывод прямо в поток, я уже устал объяснять в пятый раз: ТСР знаете? Где в нём контрольная сумма лежит знаете? Ну и каким боком тут printf? koyodza(178 знак., 02.12.2010 18:24)
- Всё это уныло на самом деле. На счёт фрагментации и т.п. Динамическая память вполне реальна, но даже скорей не нужна. А printf умеет и в поток выводить -- здесь я не вижу проблемы. И вообще можно через sprintf маленькие кусочки только формировать. fk0(327 знак., 02.12.2010 11:33)
- у меня к printf`у вопросов нет, не пойму почему вы за него ухватились. Если бы его применение как-то помогало решить задачу, я бы использовал. Вот и продемонстрируйте, как здесь может помочь printf. А фрагментированности запроса я не koyodza(894 знак., 01.12.2010 21:49)
- Буфер пакета - полтора кило. Вот тебе и память (это к вышесказанному)... Блин, в древней RTL8019 16 кб памяти. В отличие от глчного ENC28 и довольно таки урезанного CP220x, можно было по-любому настраивать. Я где-то так раньше пользовал буфер PTL Гудвин(72 знак., 30.11.2010 21:17)
- а в чём урезанность проявляется? Как раз СР2201 использую - koyodza(30.11.2010 21:39)
- Всего 4 кб на прием и 2 кб на передачу. жОстко... RTL8019 явно покучерявее и на 5В ;) Одно плохо -большой корпус. - Гудвин(30.11.2010 21:44)
- мне как раз 3В очень симпатично koyodza(107 знак., 30.11.2010 21:47)
- Всего 4 кб на прием и 2 кб на передачу. жОстко... RTL8019 явно покучерявее и на 5В ;) Одно плохо -большой корпус. - Гудвин(30.11.2010 21:44)
- а в чём урезанность проявляется? Как раз СР2201 использую - koyodza(30.11.2010 21:39)
- Короче не надо изобретать поделия из г-на, делай UDP-конфигуратор в виде Java-апплета. Ибо донельзя кастрированные версии TCP ещё аукнуться 10 раз. По-уму таки надо полноценные более-менее стек, а там уж речь о printf не стоит, он на фоне этого fk0(168 знак., 01.12.2010 11:24)
- printf влезает спокойно, только толку? - koyodza(30.11.2010 21:02)
- Нахрен тут вообще лазить браузером - я бы не связывался, если ресурсов контроллера мало... Тебе приходилось ковыряться в настройках всяческих роутеров посредством WEB интерфейса? Если настроек много, то это утомляет. Еthernet пакет может быть Гудвин(292 знак., 30.11.2010 20:52)
- мне бы попроще чего koyodza(507 знак., 30.11.2010 19:30)
- Да, вот есть примерчик работы с либой jquery.js. Может даст какие-нибудь идеи. - AlexandrY(30.11.2010 15:17, ссылка)
- Нее.., таких проблем уже давненько не решал. У меня своя "проприетарная" технология. - AlexandrY(30.11.2010 15:11)
- читал, но этого достаточно только для первоначального ознакомления. Чтобы сделать хоть что-то этого мало. Думал, знаете хороший ресурс - koyodza(30.11.2010 14:57)
- Дык Генерал же проповедник этого пути. - AlexandrY(30.11.2010 14:52, ссылка)
- это когда у вас оно прямо в порт выводится, да протокол попроще, то можно и переопределить. А мне поверх этого всего нужно заголовки положить, контрольные суммы посчитать, разместить их в заголовках и выдать ДО данных, а не после них koyodza(31 знак., 30.11.2010 13:57)
- Java, java, java, java -- повторять как мантру. IMHO. - fk0(01.12.2010 11:25)
- пока не покраснеют глаза и не начнут сниться пингвины с четырёхцветными флагами? ;=Р - koyodza(01.12.2010 15:20)
- Оно, вроде, не пингвин. Как по-русски называется -- не понял. - fk0(01.12.2010 16:01)
- пока не покраснеют глаза и не начнут сниться пингвины с четырёхцветными флагами? ;=Р - koyodza(01.12.2010 15:20)
- Java, java, java, java -- повторять как мантру. IMHO. - fk0(01.12.2010 11:25)
- Использование printf требует приличной глубины стека. Когда реально мало памяти в дивайсе, применяют AJAH и весь парсинг данных делают в броузере. - AlexandrY(30.11.2010 14:24)
- Ну если ПЗУ позволяет применить библиотеку, то можно выводить не в буфер в озу а сразу куда нужно вовне переопределив putchar - sprintf в конечном счёте через него и выводит. Причём в сишной блиблиотеке существуют разные версии реализации СоветыВсёРавноНеСлушают (134 знак., 30.11.2010 12:30, )
- время как раз почти не ограничено (в разумных пределах), а вот ОЗУ на вес золота. Про то, чтобы выделить буфер под страничку речь не идёт. sprintf и printf не использую вообще, даже stdio.h не подключаю. И не собираюсь - koyodza(30.11.2010 09:40 - 09:42)
- А как насчёт вот такого варианта? SciFi(236 знак., 26.11.2010 13:07 - 13:10)
- я как раз об этом и спрашивал. Только этот вариант в таком виде даёт ошибку: koyodza(49 знак., 26.11.2010 13:12)
- Как так? SciFi(148 знак., 26.11.2010 13:16)
- извиняюсь, указанная ошибка возникает при попытке объявить как массив (char), а не (void*). В Вашем варианте же получите массив указателей на данные произвольного типа koyodza(465 знак., 26.11.2010 14:23 - 15:10)
- Ну тогда ассемблер SciFi(130 знак., 26.11.2010 15:37)
- fk0 правильно говорит - Положить строку и адрес в структуру, причём упакованную. - Михаил Е.(26.11.2010 15:42)
- Одно НО: для каждой длины строки своя структура. - SciFi(26.11.2010 16:01)
- #define + sizeof() решают проблемы - AlexBi_(28.11.2010 23:04, )
- это не избавляет от необходимости создавать свой тип для каждой строки - koyodza(28.11.2010 23:08)
- Свой тип будет создаваться сам AlexBi_(112 знак., 28.11.2010 23:19, )
- не особенно - koyodza(28.11.2010 23:49, ссылка)
- Свой тип будет создаваться сам AlexBi_(112 знак., 28.11.2010 23:19, )
- это не избавляет от необходимости создавать свой тип для каждой строки - koyodza(28.11.2010 23:08)
- :=) это пусть финские афроамериканцы так делают - koyodza(26.11.2010 17:08)
- #define + sizeof() решают проблемы - AlexBi_(28.11.2010 23:04, )
- Одно НО: для каждой длины строки своя структура. - SciFi(26.11.2010 16:01)
- fk0 правильно говорит - Положить строку и адрес в структуру, причём упакованную. - Михаил Е.(26.11.2010 15:42)
- Ну тогда ассемблер SciFi(130 знак., 26.11.2010 15:37)
- извиняюсь, указанная ошибка возникает при попытке объявить как массив (char), а не (void*). В Вашем варианте же получите массив указателей на данные произвольного типа koyodza(465 знак., 26.11.2010 14:23 - 15:10)
- Так это ошибка в скобках.. - Михаил Е.(26.11.2010 13:15)
- Как так? SciFi(148 знак., 26.11.2010 13:16)
- я как раз об этом и спрашивал. Только этот вариант в таком виде даёт ошибку: koyodza(49 знак., 26.11.2010 13:12)
- А чем плох поиск? Сделать таблицу отсортированной, тогда поиск можно сделать двоичным. Я, к примеру, у себя так и сделал. - SciFi(26.11.2010 12:56)
- переменных слишком много, чтобы сортировать вручную или делать поиск. Не катастрофически, т.е. сделать так можно (и, видимо, придётся), но именно этого сейчас хочется избежать - koyodza(26.11.2010 13:09 - 16:37)
- Я бы таки вынес данные в ассемблер... - Скрипач(26.11.2010 13:12)
- переменных слишком много, чтобы сортировать вручную или делать поиск. Не катастрофически, т.е. сделать так можно (и, видимо, придётся), но именно этого сейчас хочется избежать - koyodza(26.11.2010 13:09 - 16:37)
- Привет. Не парься и используй sprintf если ограничено время то выводи в буфер заранее. Только не говори что и память ограничена :) . Получишь стандартный интерфейс функции printf в полное распоряжение. Ещё чего нибудь придумаешь - СоветыВсёРавноНеСлушают (30.11.2010 08:58, )
- Еще вариант, но у меня чего-то просит no_init Vladimir Ljaschko(148 знак., 26.11.2010 10:28)
- Положить строку и адрес в структуру, причём упакованную. - fk0(26.11.2010 10:25)
- Если длину строк задавать явно и если не страшно, что каждая подстрока будет заканчиваться терминатором \0, то нет проблем.В любом случае как пример. VasilyS(1022 знак., 26.11.2010 10:08, )
- А применить 0x0 как токен? подправил Скрипач(233 знак., 26.11.2010 00:35 - 09:11)
- Возникают следующие проблемы: AST(782 знак., 26.11.2010 00:43 - 01:02)
- Топикстартер и не просил "Константу &x в виде текста" - Скрипач(26.11.2010 10:26)
- Возникают следующие проблемы: AST(782 знак., 26.11.2010 00:43 - 01:02)
- Вопрос: Это Вы хотите что-то по типу работы BAS-операторов: MID$()|RIGHT$()| LEFT$() c последующими VAL-преобразованием? - SERGHIO(26.11.2010 02:00)
- Стандартными средствами языка Си - никак. Можно изловчиться и сделать post-processing двоичного образа с разворачиванием адресов в текстовые строки. - SciFi(26.11.2010 00:32)
- Вынести эту структуру данных в ассемблер, объявить public и подключать в С как external - Скрипач(26.11.2010 00:31)
- Гыгыгы :)) - MBedder(26.11.2010 00:36)
- Не понял иронии. Я (почти) так делал. Скрипач(200 знак., 26.11.2010 00:44)
- Абисьняю еще раз: ЗНАЧЕНИЯ адресов неизвестны на этапе компиляции, если не задать их грубо в абсолютном виде - MBedder(26.11.2010 02:03)
- В современных средах программирования абсолютные адреса задаются в линкере. Типа Vladimir Ljaschko(136 знак., 26.11.2010 09:20)
- В GCC (и не только) это можно делать и в исходнике с помощью соответствующих атрибутов - MBedder(26.11.2010 11:31)
- Угу. Но мне кажется, что это не совсем хороший стиль программирования на С, если указания разбросаны по исходникам. В файле линкера все сконцентрировано вместе и сразу видна картина. - Vladimir Ljaschko(26.11.2010 11:40)
- Поэтому я и сказал выше - "грубо" - MBedder(26.11.2010 11:47)
- Угу. Но мне кажется, что это не совсем хороший стиль программирования на С, если указания разбросаны по исходникам. В файле линкера все сконцентрировано вместе и сразу видна картина. - Vladimir Ljaschko(26.11.2010 11:40)
- Накуй абсолютные? Линкер прекрасно сам разложит по памяти и проставит ссылки. Он для этого придуман! - Скрипач(26.11.2010 10:20)
- Одна бяда - он не придуман для формирования текстовых строк в исходниках. - Vladimir Ljaschko(26.11.2010 10:33)
- Нафига топикстартеру "маркер в строке" как не для преобразования бин-текст? Я бы не заморачивался и хранил адрес в бин. Да и места меньше займет в результате. - Скрипач(26.11.2010 10:36)
- Может, визуально хочет прошивку смотреть, как в голливудских кино :) - Vladimir Ljaschko(26.11.2010 11:01)
- "Настоящий программист свободно читает шестнадцатеричный дамп" :) - Скрипач(26.11.2010 11:03)
- Может, визуально хочет прошивку смотреть, как в голливудских кино :) - Vladimir Ljaschko(26.11.2010 11:01)
- Нафига топикстартеру "маркер в строке" как не для преобразования бин-текст? Я бы не заморачивался и хранил адрес в бин. Да и места меньше займет в результате. - Скрипач(26.11.2010 10:36)
- Одна бяда - он не придуман для формирования текстовых строк в исходниках. - Vladimir Ljaschko(26.11.2010 10:33)
- В GCC (и не только) это можно делать и в исходнике с помощью соответствующих атрибутов - MBedder(26.11.2010 11:31)
- В современных средах программирования абсолютные адреса задаются в линкере. Типа Vladimir Ljaschko(136 знак., 26.11.2010 09:20)
- Абисьняю еще раз: ЗНАЧЕНИЯ адресов неизвестны на этапе компиляции, если не задать их грубо в абсолютном виде - MBedder(26.11.2010 02:03)
- Не понял иронии. Я (почти) так делал. Скрипач(200 знак., 26.11.2010 00:44)
- Гыгыгы :)) - MBedder(26.11.2010 00:36)
- На этапе компиляции адреса будут известны только для тех объектов, которым ты сам их жестко назначил (атрибутом __address__ или подобным), остальные вычисляются/назначаются на этапе линковки - MBedder(26.11.2010 00:21 - 00:23)
- а не хотите внедрить не адрес, а численный идентификатор &1, &2 ,а все адреса переменных внести в таблицу, а при разборе обращаться к ней как раз по идентификатору... Вы же знаете, прохо привязываться при вводе-выводе к физ.адресам переменных. - Хитрый Китаец(29.11.2010 15:28)