- В примерах от TI для СС430 есть функция void LFXT_Start(uint16_t xtdrive) при отладке программа заходит в неё и выполняет бесконечный цикл: Broad_smile(420 знак., 21.05.2013 14:06,
, MCU, полностью)
- Есть радиомодуль с МК CC430F5137 рассчитанный на работу на частоте 433 МГц. Кто-нибудь может подкинуть простой рабочий пример работы радиоканала? - Broad_smile(21.05.2013 12:22,
, MCU, полностью)
- Есть проблема. Изделие на МК накапливает информацию с временными метками. Время считается от кварца МК. Короче, оно убегает от реального. Но контроллер периодически может получать реальное время от разных источников (но не факт, что достоверное). fk0(405 знак., 17.05.2013 18:43, MCU, полностью)
- Попробую просуммировавть свои мысли. U -- число сек. от старта программы, R -- текущее реальное время (в секундах) полученное от какого-либо источника, B -- время (реальное) момента запуска, S -- время последней синхронизации от момента пуска fk0(1369 знак., 20.05.2013 15:10)
- Если ты считаешь время от ВЧ кварца, значит у тебя где то есть некий счетчик (в прерывании?) который считает входные импульсы и при накоплении некоторого значения инкрементирует счетчик секунд. Ну вот и сделай этот порог изменяемым и меняй его в GDI(376 знак., 20.05.2013 11:04 - 11:06)
- это называется шаговый фильтр. заранее подбираешь минимально допустимый шаг и потом по знаку ошибки делаешь свой шаг в плюс или в минус. - LordN(18.05.2013 16:42)
- можно и без ПИД. Допустим с последней синхронизации прошло N сек, за это время накопилась ошибка dT сек. Значит каждые N/dT сек нужно добавлять или пропускать 1 сек. Разницу N/dT можно усреднять - постепенно ошибка приблизится с 0. - zeleny(18.05.2013 11:34)
- Не, ну ты засунул. "может получать реальное время(но не факт, что достоверное)". Какое - ж оно тады "реальное", если "не достоверное". Бля, "система единого времени" - так оно называлось в совке. И никто етого не отменял. а уж чо там за эталон tesla(36 знак., 18.05.2013 11:29 - 11:32)
- классика ТАУ: есть сигнал ошибки, есть регулируемая величина. возможное решение - ПИД (см. ссылки). правильно настроенные коэффициенты дадут приемлемую скорость без перегулирования. Snaky(87 знак., 18.05.2013 10:36, ссылка, ссылка)
- А надо ли вообще регулировать скорость собственного генератора? Можно записывать информацию о полученном реальном времени вместе со своей меткой времени, так получится привязка своего времени к реальному при разборе накопленной информации. AlexBi(193 знак., 17.05.2013 19:41)
- для коллеги сделал конвертилку битов bits_exchange, собсвенно делюсь - MegaJohn(20.05.2013 23:09, MCU, ссылка, полностью)
- мне нужно с микроконтроллера PIC16F8xx ( дивайс сделан на нем ) управлять частотным приводом мицубиси. Управление ЦАПом аналоговым сигналом не подошло- очень мощный шум идет. Хочу попробовать управление по RS485 каналу, по описанию возможно два aha(153 знак., 18.05.2013 13:22, MCU, полностью)
- Есть большой исходник на Сях (использовался gnu), где ссылки на массивы char (разные) пишутся в стиле "&massiv[0]" Как бы с наименьшими трудозатратами преобразовать их в исходнике к стилю "massiv" ? Hobo(153 знак., 17.05.2013 14:55, MCU, полностью)
- Хранение предыдущих значений... Как отказаться от буфера. mrengineer(415 знак., 11.05.2012 11:28, MCU, полностью)
- Использовать БИХ ФНЧ 2 порядка с управляемой частотой среза. Усреднение - весьма посредственный фильтр НЧ (АЧХ = sin(F)/F) - argus98(15.05.2013 17:23)
- А выбросы у Вас есть, может их сперва порезать можно, например, медианным фильтром, а потом уже фильтровать БИХом или КИХом ? - Хитрый Китаец(11.05.2012 22:54)
- Я примняю "Tau" филтер. Очень простой и быстрый. - johann(11.05.2012 14:16)
- зачем это нужно? Если для фильтрации, то используйте БИХ-фильтр вместо своего КИХ-фильтра, если задача позволяет произвести такую замену - koyodza(11.05.2012 13:49)
- Уточните условия задачи, а лучше расскажите, зачем всё это нужно. N фиксированное или нет? SciFi(100 знак., 11.05.2012 11:32 - 11:34)
- Осреднение данных. Раньше я каждый раз осреднял весь буффер. Теперь ушел от этого и сильно выиграл по времени. Но значение, полученное N вызовов назад по-прежнему нужно. mrengineer(70 знак., 11.05.2012 11:39)
- Если значения - это целые числа, то можно попробовать замутить арифметику с дельтами. Если не ошибаюсь, достаточно хранить три дельты: D(0, N), D(0, 1), D(N, N-1). - SciFi(11.05.2012 11:53)
- Если у вас считается скользящее среднее, то от буфера никуда не деться. Можно лишь применить некоторые приемы, сокращающие время вычислений. Во-первых, весь массив сдвигать не нужно. Изменяется лишь указатель (индекс) элемента буфера, указывающий rezident(398 знак., 11.05.2012 11:48)
- Буффер на N_макс_макс.И круги нарезать по N_макс_текущее. - PlainUser(11.05.2012 11:44)
- кольцевой буфер с переменной длиной не устраивает? - Vit(11.05.2012 11:44)
- Подскажите какой нить код с обнаружением 2 соседних ошибок в 3 битах. - Codavr(13.05.2013 11:11 - 11:13, MCU, полностью)
- хосподя...: argus98(292 знак., 13.05.2013 17:46)
- может сверточные коды помогут? Nikolay801_(66 знак., 13.05.2013 13:25)
- БЧХ 31*21 устроит? Исходники есть. - Visitor(13.05.2013 12:27)
- тройное дублирование - =AlexD=(13.05.2013 12:18)
- Я знал, что кто нить какую нить гадость предложит :) Может есть чего поэлегантнее? - Codavr(13.05.2013 12:19 - 12:22)
- Не нравится тройное, делай пятикратное :P - Гудвин(13.05.2013 12:23)
- Пытаюсь сообразить как будет работать Хэмминг (7.4) если 4 бит - сделать битом четности. Надо эксель доставать. - Codavr(13.05.2013 12:27)
- это называется расширенный код хэмминга (посмотреть хоть в вики можно) - ыыыы(13.05.2013 12:58,
)
- Расширенный -- это 8/4 (4 проверочных, 4 данных). А что хочет автор я пять раз перечитал и не понял. Возможно, ему подойдёт "транспонирование" кода Хэмминга -- когда вначале сообщение кодируется кодом хэмминга, а потом передаётся: младший бит fk0(353 знак., 13.05.2013 13:28)
- на коротких сообщениях коды с исправлением ошибок дают плохую производительность (отношение полезной информации к защитной очень мало) - Nikolay801_(13.05.2013 13:45)
- Надо передать 3 полезных бита. Длина всего сообщения должна быть разумная. Ну ограничим давай 8 битами (конечно хочется поменьше). В идеале мне нужно на приемном конце знать что 3 бита информации не содержат ошибку. Если они в последовательности Codavr(115 знак., 13.05.2013 13:37)
- Речь про обнаружение или исправление ошибок? Можно, например, передать каждый бит трижды последовательно: либо одиночные ошибки исправляются, либо двойные обнаруживаются (но не то и другое сразу). Если ошибки fk0(584 знак., 13.05.2013 13:58)
- Только обнаружение. Передача ШИМ с близкими длительностями 0 и 1. Впрочем хрен знает как это называется по правильному. Вобщем инвертирую полярность после каждого бита, а длительности битов нужны близкие. Поэтому велика вероятность инверсии Codavr(16 знак., 13.05.2013 14:06 - 14:10)
- кажется, что подойдет кодирование со стиранием - то есть 0, 1 и Х ну а поверх нее RS. если обнаруживать ошибку в RS муторная математика, то исправить стирание просто - ыыыы(13.05.2013 18:28,
)
- тогда наверно лучше хемминг(7,4) усеченный, отбосить один бит даных контрольные оставить, будет (6,3) Nikolay801_(23 знак., 13.05.2013 14:18)
- ну попробуй прикинуть что будет, если передавать 3 прямых + чётность + три инверсных + инверсия чётности, всякие сложные коды на 3х битах будут неэффективны. - =AlexD=(13.05.2013 14:16)
- Кто-нибудь знает, есть ли в базовом множестве команд SCSI команда стирания сектора FLASH? VVB(556 знак., 13.05.2013 09:26, MCU)
- Как-то здесь проскакивала мысль, что шаблоны (template) для мелких embedded-задач даже важнее, чем сами классы. Может ли кто-то привести жизненный пример? Спасибо. - Леонид Иванович(08.05.2013 12:03, MCU, полностью)
- В документации на scmRTOS есть, в коде событий ОС. Более приземленно - ногодрыг -> - amusin(08.05.2013 13:55, ссылка)
- Макросы обычного С чем не устраивают? - Vladimir Ljaschko(08.05.2013 12:20)
- А у меня мысль противоположная - о том, что шаблоны не стоит использовать ни в каких embedded-задачах, ни больших, ни малых. В таких задачах всё должно быть по возможности явным. Если есть функция, то вот ее тело, чтоб отладчиком стать, если Ксения(74 знак., 08.05.2013 12:14 - 12:16)
- Что значит искать? Если нужно посмотреть порожденный код - то ,в тех модулях, где он используется. А зашаблонизировать одинаковые UART'ы на борту очень удобно. - Хитрый Китаец(08.05.2013 12:20)
- Тоже была мысль шаблонизировать USARTы, но все упирается в обработчики прерываний у которых номера векторов заданы через #pragma - AlexG(08.05.2013 13:05)
- Дык, номер порта задать дефайном так и вектор через него же. - Хитрый Китаец(08.05.2013 15:17)
- А в базовый адрес порта не упирается? Пример реализации не покажите? - Apтём(08.05.2013 13:55)
- Мой вариант сейчас выглядит так. До полной универсальности не доводил, цель была только по возможности устранить дублирование кода и сделать гибкое сопоставление USARTа и реализации протокола обмена. AlexG(08.05.2013 14:32 - 14:39)
- Спасибо. - Apтём(08.05.2013 15:09)
- За такой код надо не спасибо говорить, а в морду бить - ничегошеньки непонятно :) - Ксения(09.05.2013 16:13)
- Как так в морду? Надо к людям мягше, смотреть ширше... Apтём(36 знак., 09.05.2013 16:26)
- Лично я ничего в нем не поняла - жуть какая-то! На мой взгляд USART устроен предельно примитивно: сперва проверяешь бит о том, что передатчик пуст, а потом в него кидаешь байт. А если по прерыванию, то то сразу кидаешь без проверки. Зачем же тут Ксения(327 знак., 09.05.2013 16:43)
- Обычно у меня тоже все более-менее примитивно, но в этот раз в устройстве два порта и четыре переключаемых совершенно разнородных режима их работы (от отладочной печати до Modbus-RTU). Пришлось делать промежуточный слой устраняющий привязку кода к AlexG(791 знак., 09.05.2013 17:19)
- Вы действительно переключаете в приложениях порты/протоколы в рантайме? - Vit(09.05.2013 17:31)
- да, но только в одном приложении, во всех предыдущих разработках назначение портов было фиксированным. - AlexG(09.05.2013 18:23)
- указатели на getchar()/putchar() недостаточно мобильны? Vit(213 знак., 09.05.2013 19:43)
- Спасибо, использовать int это хорошая идея. Про указатели не совсем понял. - AlexG(09.05.2013 20:14)
- указателям application_getchar/application_putchar можно присваивать значения UARTx_getchar/UARTx_putchar, где x может меняться - Vit(09.05.2013 23:50)
- Как выглядит использование getchar и putchar и они сами? - Apтём(10.05.2013 00:03)
- Не въехал в код... Apтём(352 знак., 10.05.2013 15:36)
- накалякал чегой-то Vit(2563 знак., 10.05.2013 07:50 - 10:13)
- ОК, спасибо, скопировал себе, пригодится в жизни)) Укажите еще, пожалуйста, для строки Serial1_RxBuf_RdIdx++; что это Atomic, т.к.она используется в ISR для сравнения. - Юра(10.05.2013 09:59,
)
- Кажется, при Serial1_RxBuf_WrIdx=63; Serial1_RxBuf_RdIdx=0; новое пришедшее данное вместо того чтобы быть отвергнутым, испортит вх.буфер[0]. - Юра(10.05.2013 09:37,
)
- Там не просто uart, а RS485. Apтём(341 знак., 09.05.2013 16:58)
- Вообще-то нормальный отладчик должен уметь связывать машинный код с шаблоном, чтобы можно было ходить по строкам. А ставить точки останова - это да: он должен спрашивать "в каком именно экземпляре?" - SciFi(08.05.2013 12:19)
- Не будет ли уважаемый
джинн пипл, любезен подсказать что сейчас модно юзабельно для девайса с графическим дисплеем. Adept(1904 знак., 03.05.2013 04:42 - 05.05.2013 03:58, MCU, полностью)
- Вау! Сколько информации. Спасибо, колеги. Вечером буду вдумчиво читать ответы и разбираться. Сейчас, к сожалению некогда (убегаю по делам). Большущее сенькс всем (может до вечера ещё информации прибавится? :)) - Adept(03.05.2013 14:52)
- решал подобную задачу, гуй написал сам, для STM32F205ve, ось TNKernel. bmp правда не делал, не нужна была. подробности по ссылке, хотя уже несколько устарели, последние исходники на гитхабе. рабочий проект - больше 30 экранов при включенной AVF(447 знак., 03.05.2013 13:23, ссылка)
- Юзаю STM32F407+самый обычный TFT-дисплей (без контроллера и памяти). Дисплей поключен к внешней шине, картинка формируется в ОЗУ проца и выводится через DMA. GUI нет, выводится один из нескольких полноэкранных битмапов по команде с сервера. LightElf(248 знак., 03.05.2013 13:22)
- Работал с TE-ULCD35. Там LPC2478. С тачскрином. Железо понравилось, ихнюю дебильную "графическую библиотеку" стер нах, залил UCOSII + uC GUI. Для инициализации использовал код Терраэлектроники, выложенный на их форуме. В общем неплохо получилось, tesla(300 знак., 03.05.2013 11:17 - 12:51)
- Обратите внимание на PIC24FJ256DA210 и прочие из семейства. На борту имеет контроллер стекляшки. Поддерживает палитру - можно обойтись встроенной памятью, если нет нужды в многоцветных картинках. Аппаратный ускоритель для шрифтов, копирования mr-x(146 знак., 03.05.2013 10:33)
- Со своей колокольни: SciFi(833 знак., 03.05.2013 07:19)
- LPC2478 красава, конечно, но корпус!! 15*15мм BGA - это самое маленькое (про 30*30мм LQFP и не говорю. Монструозо, однако), и жрёт 60-90мА при 72МГц Adept(371 знак., 03.05.2013 18:29)
- имхо в цену никак не уложитесь, только если серия сотни штук и делать в китае. на вскидку: мк от 5$, иначе будет тормоз. экран 3,2" минимум - 6-8$ в китае. плата 2$, питание 2$ ? монтаж - 3$, корпус? а если еще что-то надо - кнопки, разъемы, AVF(11 знак., 03.05.2013 19:51)
- Чисто для справки.. ADSP-BF512 при цене ~7$, жрёт ~10мА (Static Current + Dynamic Current в пересчете на питание от источника 3,3В) при 100МГц. - USSR(03.05.2013 18:48,
)
- Если дисплей имеет встроенный контроллер (среди 320x240 таких много), то подойдёт любой МК. Даже STM32F100C4 за 1$ (но у него нет параллельной шины, а это тормоз; SPI для управления LCD - тоже тормоз). - SciFi(03.05.2013 18:37)
- Тормознутости uC/GUI - не заметил. tesla(267 знак., 03.05.2013 12:54 - 13:01)
- LPC2478 со своей тулзой для создания ГУИ из картинок с привязкой их к координатам и событиям тач-скрина. Тоже без ОС, автомат. - Vladimir Ljaschko(03.05.2013 11:29)
- типа вот? - Snaky(03.05.2013 05:37, ссылка)
- Дано неупорядоченное множество точек в многомерном пространстве. Для простоты предположим, что на плоскости. Нужно найти точки близкие (на расстоянии меньше заданного) к данной. Как быть? - fk0(26.04.2013 12:39, MCU, полностью)
- если начать с теории, то есть такой раздел математики - Вычислительная геометрия. там поиск ближайшего соседа - одна из типовых (основных) задач. Snaky(179 знак., 02.05.2013 15:46 - 15:48)
- вычеты. если ты эти точки можешь привязать к полюсам или корням, что монохуйственно, то интеграл по замкнутому контуру даст тебе их точное количество. единственно чего не помню - как дела с кратными корнями полюами обстоит. давно дело было... - LordN(26.04.2013 16:55)
- Насколько точно нужно мерять расстояние? Может быть допустимо перейти из декартовой в манхеттенскую метрику, чтобы уйти от квадратов и корней, заменив их модулями? - vmp(26.04.2013 14:22)
- есть массив х,у так? если требуемое расстояние r, то dx или dy не может быть больше r - то есть таким образом пофильтровать, а для остальных считать сумму квадратов. можно расширить на 3х, 4х и вообще n-мерное пространство - ыыыы(26.04.2013 14:04,
)
- Можно немного уменьшить количество вычислений. Пaлыч(868 знак., 26.04.2013 13:53)
- Возможно, K-d tree? Но он только для малых размерностей подходит. - AD(26.04.2013 13:33, ссылка)
- Полный перебор. - SciFi(26.04.2013 12:44)
- Столкнулся с примером программы (проект Keil), в которой в файле main.c есть строчка: #define extern sag1979(321 знак., 24.04.2013 13:59, MCU, полностью)
- А я вообще переменные extern не объявляю, так как у меня нет переменных, видных более чем из одного модуля. - Леонид Иванович(25.04.2013 15:52)
- А как обмен между модулями реализован? Указатели передаете? - rezident(25.04.2013 15:58)
- Доступ к любым данным ведется только через функции. - Леонид Иванович(25.04.2013 17:30)
- Буду весьма признателен, если покажешь, как в рамках этой парадигмы организовать вот такую модель: MBedder(1099 знак., 27.04.2013 16:06 - 16:11)
- требования к риалтайму есть? (зачем "Фоновые процессы работают по квазикооперативной модели"?) - Vit(27.04.2013 19:48)
- Под готовой ОСРВ - элементарно, например через MailBox. И не надо никакой квазикооперативности. - tesla(27.04.2013 16:11)
- Пока вычеркиваем - интересует просто вариант решения без глобальных и extern - MBedder(27.04.2013 16:12)
- Так а в чем вопрос? Обращение к глобальной переменной всегда можно заменить вызовом интерфейсной функции модуля, в которой будет обращение к скрытой в этом модуле переменной. Такой подход применим везде, и везде он даёт ухудшение эффективности. - Леонид Иванович(27.04.2013 19:22)
- Конечно. Зато, в случае применения ОСРВ (извиняюсь за выражение)имеем универсальность подхода и прочие плюсы. - tesla(27.04.2013 19:39)
- А какие интерфейсные функции могут быть у ISR? - MBedder(27.04.2013 19:29)
- ISR принадлежит модулю и работает с приватными данными модуля. Другой модуль получает доступ к этим данным через интерфейсные функции. Леонид Иванович(539 знак., 27.04.2013 19:39 - 19:56)
- Ну давай предельно упростим мою модель - ISR складывает данные в кольцевой буфер и, получив CRLF, выставляет флаг и обновляет указатель LastBytePtr. Фон, увидев этот флаг, обрабатывает данные от LastBytePtr до предыдущего CRLF - как всей MBedder(20 знак., 27.04.2013 20:07)
- Фон должен не читать напрямую флаг, а вызвать функцию, которая вернёт значение этого флага. Да, лишние накладные, зато очень легко вносить изменения в реализацию и таскать модули между проектами. - =AlexD=(27.04.2013 20:54)
- В принципе согласен, но жаба душит из-за накладных - MBedder(27.04.2013 20:58)
- у меня что-то подобное. накладные уменьшаю тем, что имею возможность сделать кольцевые буфера (куда всё складывает даже не софт, а DMA) оочень большими, такими, чтобы с запасом хватило при любых затыках, если они вдруг будут. - Mahagam(28.04.2013 00:41)
- Любая красота в программе вредит её эффективности. Но ведь предназначение человека - создавать в первую очередь красивые вещи, и только во вторую - работоспособные. - Леонид Иванович(27.04.2013 21:42)
- "Самый страшный зверь - это жаба. Она душила многих наших современников." А если серьёзно, то пока измерения не покажут необходимость оптимизации, то вся эта гонка за эффективностью - пустая трата драгоценного времени. - SciFi(27.04.2013 21:06)
- С++ рулит, флаг может быть статическим членом класса, а функция инлайновой. Тогда накладных нет. - =AlexD=(27.04.2013 21:00)
- Долго думал. Думал, может я не прав. Нет, ни фига. Никаких интерфейсных функций у ISR быть не может! - tesla(27.04.2013 19:44)
- Хорошо задал вопрос. А то ить некоторые предполагают, что вызов функции из прерывания - это самое оно. tesla(129 знак., 27.04.2013 19:35)
- А с быстродействием - как? - tesla(27.04.2013 16:04)
- Инкапсуляция это правильный подход, одобрямс. К сожалению вызов ф-и в прерывании в некоторых компиляторах процов "проф. уровня"(С)fk0 приводит к жуткому оверхеду. Поэтому приходится писать "функцию" как макрос и использовать глобальные переменные. abivan(50 знак., 26.04.2013 12:23)
- Совершенно непонятно, почему все прицепились к прерываниям? Обработчик прерывания - это функция, закопанная глубоко в недрах модуля, его внутреннее дело. И работает с приватными переменными модуля. Зачем из прерывания вызывать интерфейсные функции Леонид Иванович(16 знак., 26.04.2013 12:40)
- в PIC18 это не так у него один вектор прерывания. Поэтому где только можно использую PIC24(если новый проект и цены сопоставимы) у которого у каждого прерывания свой вектор. Вот тогда обработчик располагается в модуле и можно использовать static. - abivan(26.04.2013 13:08)
- Бывает надо... Поместить принятые данные в fifo, например. Такая архитектура, что очередь в другом модуле. Либо чисто по техническим причинам оно в другом модуле, сложно всё засунуть в один C-файл. Либо какие-либо чисто вычислительные функции fk0(99 знак., 26.04.2013 12:59)
- +1. Тоже жутко негодую по этому поводу. - SciFi(26.04.2013 12:44)
- Например, общий системный тик, который должен дергать все модули. Я то вызываю функции, но постоянно отслеживаю ресурсы, допуская, что их может не хватить. Что тогда? - Vladimir Ljaschko(26.04.2013 12:42)
- Ужос. Вот мой обработчки прерывания таймера, который генерирует системный тик: Леонид Иванович(181 знак., 26.04.2013 12:59)
- А как Вы делаете, когда один "процесс" или "модуль" требует обслуживание высокоприоритетное обслуживание, скажем 250 мкс, и средне-приоритетное (10мс), и вообще редкое (1с)? - Vladimir Ljaschko(26.04.2013 16:30)
- как-то рассказывал в общем как оно у меня - Vit(29.04.2013 10:03, ссылка)
- Тут такое дело: Леонид Иванович(309 знак., 26.04.2013 22:51)
- Для 250 мкс часто можно прерваться и всего-лишь обслужить по минимуму (инкрементнуть чего, в буфер загнать и т.п.) и не потерять событие, а потом
медленно спуститься и покрыть всё стадоостальную обработку сделать в фоне. Для 10 мс опять же Vit(227 знак., 26.04.2013 22:01 - 22:04)
- обычно на это разные функции-обработчики. Но все они должны выполняться быстро. Если что-то требует долгого ожидания, оно разбивается таким образом, чтобы каждая часть выполнялась быстро - koyodza(26.04.2013 16:48, ссылка)
- Ну вот рассудите. У меня есть 1) расчеты на десяток миллисекунд с периодом 100мс 2) расчеты на 1 мс с периодом 10 мс 2) обслуживание 5-6 логических модулей с периодом 500 мкс. Как совместить? Я не могу разделить на части формулу с long long - что Vladimir Ljaschko(12 знак., 26.04.2013 17:41)
- смешались кони с котлетами koyodza(2082 знак., 26.04.2013 18:00)
- Вы потянули слишком сильно в грубины RTOS. Имеем жесткий быстрый реал-тайм в нескольких логических модулей плюс мягкий разноуровневый реалтайм. Я реализую как последовательные вызовы функций из каждого модуля в прерываниях по системному тику, плюс Vladimir Ljaschko(358 знак., 27.04.2013 16:58)
- просцыте великодушно, но почему бы вытесняющую многозадачность не влепить? - Mahagam(26.04.2013 19:46)
- накуа? Чтобы ничего не контролировать? Хватит с меня и винды, в МК по-возможности минимизирую использование чужого кода - koyodza(26.04.2013 20:10)
- я без исходников (или с малочитаемыми) многозадачку и не рассматриваю. а та которая понята - та полностью под контролем. - Mahagam(26.04.2013 20:34)
- а по мне так оно куда как проще получается. - Mahagam(26.04.2013 20:12)
- Как в вытесняющей многозадачности сделать два параллельных strtok() ? Или как многозадачность -- так вытесняющая. А как библиотечные функции -- не используем. (можно сделать, но не на всякой libc) - fk0(26.04.2013 20:35)
- да, нужна аккуратность. Либо abivan(2420 знак., 27.04.2013 14:07)
- и много таких однопоточных функций? если придётся отказаться от strtok() ради всего удобства многозадачности - то почему бы и нет? - Mahagam(26.04.2013 21:36)
- Если явно то не указано -- вся C-библиотека. И масса собственного кода, если не принималось мер против того. Любая static переменная всё портит же. Что характерно во многих "ОС" нет понятия thread local storage. Что наводит мысль на крайнюю их fk0(14 знак., 26.04.2013 22:28)
- галимейший фриртос портировали на всё что может исполнять хоть какое-то подобие программ. сделали поддержку чуть ли не всех существующих компиляторов, и кагбээ проблем особо не возникает. вы про все Си-либы серьёзно? да? - Mahagam(27.04.2013 01:06)
- В "галимейшем фриртосе" как раз проблема с отсутствием глобальной переменной позволяющей хранить thread specific data. А проблем не возникает потому, что фриртос используют совместно с весьма специфическими программами. Где библиотечных функций не fk0(1061 знак., 27.04.2013 11:57)
- Пардон за вмешательство.Это не FF виноват. saifullin(82 знак., 27.04.2013 20:24)
- у меня 98% вызовов библиотечных функций - это тупо memcpy() да memset(). всё. остальное - свой код, который пишется вручную. а вы что? используете кодогенераторы? или как? Mahagam(1016 знак., 27.04.2013 13:15)
- А malloc? rand? А errno, наконец? А на errno, между прочим, завязана масса функций из math.h -- всё это неиспользовать, написать своё? Уже маразм в полную силу, не кажется? И попрошу заметить, во вменяемых ОС с потокобезопасностью всего этого fk0(2841 знак., 27.04.2013 16:47)
- malloc() пусть горит в огне. нехватало ещё нарваться на утечки памяти да отказ в выделении. цена крэша ~100k$, а MMU прикручивать пока что нет времени и возможностей. ведь на примитивном уровне TLS - это стек потока, ну так избавится от статиков Mahagam(1310 знак., 28.04.2013 01:37)
- Изначально речь шла про FreeRTOS, а не CrossWorks. Так вот в FreeRTOS невозможно ожидать множество событий. Это принципиальное ограничение. - fk0(28.04.2013 16:06)
- Утечки и фрагментация памяти -- это миф, как мне кажется, про который любят очень рассказывать те, кто их в глаза не видел. Только в узком круге задач возможна фрагментация или требуется гарантированное выделение памяти. Там и там можно тем же fk0(179 знак., 28.04.2013 16:02)
- MMU притянут за уши. Для реализации TLS нужна всего лишь некая глобальная переменная-указатель меняющая значение при переключении задач. MMU для неё не нужен и при наличии MMU она автоматически не появится, если её нет. - fk0(28.04.2013 15:31)
- "цена крэша ~100k$" - чуть не помер от хохота. Пальцы веером у Вас, наверное, даже во сне? - Леонид Иванович(28.04.2013 02:14)
- какое отношение имеет сон к суровой реальности? - Mahagam(28.04.2013 14:48)
- Уважаемый Леонид Иванович, не смейтесь, знаете, как тяжело отлаживать софт, не имея возможности протестировать все на рабочем объекте? Потому как сделать это можно всего один раз, ибо цена, скажем так, "включения" этого объекта, несколько alex68(187 знак., 28.04.2013 03:35)
- Да ладно Вам, знаю я, какие космические корабли тут запускают с крыш курятников. Один-единственный фирменный БП на весь форум говорит о многом. - Леонид Иванович(28.04.2013 11:56)
- разные есть. Но те, что громче кричат о "сотнях к$" обычно об этом только мечтают. Фирменное оборудование - тоже не показатель серьёзности/ответственности проектов, а только показатель количества выделяемых на его закупку денег koyodza(285 знак., 28.04.2013 12:58)
- Речь не о космосе, там стоимость запуска много выше :) Ну и не все говорят всю правду о себе и работе :) Повторюсь - не имея сколько нибудь адекватного стенда, отлаживаться очень трудно, и стоимость ошибок очень велика. Приходится все отлаживать alex68(57 знак., 28.04.2013 12:44)
- В таком случае есть какая-то модель объекта, симулятор. Не надо перегибать палку. - fk0(28.04.2013 16:10)
- Нет, совет должен быть другим. Леонид Иванович(144 знак., 28.04.2013 18:10)
- Блин, сами идите и полетайте, а потом пишите :) - alex68(28.04.2013 17:20)
- модель часто сильно отличается от реальности в крупных проектах, где задействован не только электронщик с программистом, а токари, слесари, строители и прочие, а сама модель строится по чисто теоретическим оценкам какого-то математика, зачастую не koyodza(65 знак., 28.04.2013 16:18)
- Ну и напрасно. "Есть многое на свете, друг Горацио, что и не снилось нашим мудрецам"(с) - MBedder(28.04.2013 02:33)
- ы? -> - Snaky(27.04.2013 12:16, ссылка)
- жаль, было бы интересно почитать - koyodza(27.04.2013 12:00)
- проще, не спорю - по крайней мере для случаев, когда есть асинхронные задачи, выполняющиеся долго. Но лучше обойдусь без этого. Вопросы надёжности и разделения ответственности мне более важны, чем простота использования - koyodza(26.04.2013 20:13)
- у меня немного иначе koyodza(64 знак., 26.04.2013 13:33)
- Сложность контроля за ресурсами намного возрастает - нужно проверять задержку каждой задачи. А у меня рухнула система - аха, понятно :) - Vladimir Ljaschko(26.04.2013 13:05)
- Ужос. Переделать всё немедленно. - SciFi(26.04.2013 12:45)
- Это у многих МК так: Apтём(330 знак., 26.04.2013 12:38)
- Это потому, что у программистов проф. уровня вся программа пишется в одном C-файле. Я недавно пример давал (в теме про goto). Тогда никакого оверхеда. - fk0(26.04.2013 12:38)
- Через облако :-) Вообще-то кошерный способ - вызывать функции. - SciFi(25.04.2013 16:10)
- Иногда делаю так dfasdfasdf(210 знак., 25.04.2013 15:48,
)
- то, что в *.с есть такое объявление, думаю, что если после включения хедеров, то сделано типо для наглядности. Vit(345 знак., 25.04.2013 12:43 - 13:23)
- В общем, большого смысла в этом нет. Просто, видимо, автор сей программы перестарался. В действительности же Bill(141 знак., 25.04.2013 09:49)
- Объявление extern позволяет знать тип переменной, но не резервирует под нее место в памяти. Так что включение в хедере определения переменной с extern никак не мешает определить эту же переменную в исходнике. Главное чтобы тип полностью rezident(10 знак., 24.04.2013 14:47)
- Вот и еще одна темка для холивара. Я вот с Палычем и stub не согласен. Переопределение ключегого слова в голову не приходило. Это делал по-другому. - abivan(24.04.2013 14:30 - 14:35)
- Объявление переменных с ключевым словом extern в заголовочном файле вовсе не зазорно. А отсутствие extern считается определением переменной. В заголовочном файле определению переменных не место. - stub(24.04.2013 14:20,
)
- Если есть переменные с extern, то, где-то долны быть без онного... Вот в main они "автоматом" и будут прописаны. Имхо, делать так - нехорошо! - Пaлыч(24.04.2013 14:06)
- Renesas Electronics Europe and SEGGER Microcontroller offer Commercial Software Packages Free of Charge for RX MCU Designs - бомж(26.04.2013 11:54, MCU, ссылка, полностью)
- затупил с перехватом printf MegaJohn(743 знак., 26.04.2013 11:36, MCU, полностью)