MP>>> Это надо поискать будет... AM>> Так может сначала надо было поискать? MP> Hу что - на последок доказываем оверхед cи по коду 300% на одних только галимых MP> сдвигах через С-флаг? ;)
Ты уже для себя все доказал, я больше не буду тратить свое время на этот тред.
MP>>> неэфективно распаралеливающих задачи. AM>> В чем там неэффективность, может пояснишь? MP> В том, что попытка решения 2-х настоящих реалтаймовых задач работающих в упоре MP> производительности 2-х мифических процессоров,
процессоры обычно реальные, с конкретной производительностью.
MP> требует чтоб результирующий MP> управляемый RTOS процессор имел ПЯТHАДЦАТИКРАТHО! большую производительность.
У тебя на потолке число 15 написано, что ли?
MP> Если задача может быть решена под управлением RTOS на том-же процессоре - она MP> либо нифига не реалтаймовая, либо далеко не в упоре.
Либо ты слаще морковки в жизни ничего не видал :)
MP> А значит как минимум имеет MP> еще несколько путей решения наиболее очевидным из которого является - 2 дешевых MP> мелких процессора.
Или 10 мелких процессоров, причем попутно нужно решить задачу взаимодействия этих процессоров между собой каким-то способом.
MP>>> Так проблема есть. Чтоб ее писать надо сначала в мельчайших MP>>> подробностях ее продумать. AM>> FAT продумать? Чего ее продумывать, она есть какая есть, стандартная. MP> Свою думать. В фате тоже кстати есть над чем думать.
FAT - стандартна, думать можно только над конкртеной реализацией.
AM>> Тогда это будет не многозадачка. Или ты полагаешь, что если ты в main AM>> кнопку опрашиваешь, и символ в порт выводишь, и эти действия по AM>> алгоритму работы устройства логически не связаны, то у тебя уже AM>> система стала многозадачной? MP> Приведи примеры 2-х твоих задач в RTOS? Возможно для меня они так-же смешны как MP> "кнопку опрашивать". Чтоб ты сразу в АРМ не лез розовых слонов не выдумывал - MP> давай ограничим твои мифические задачи возможностями x51 (портировали-же RTOS MP> на них и не одну)....
Под х51 у меня используется только кооператичная многозадачность.
- Задача прием SLIP пакета из канала и передача в очередь.
- Задача передачи из очереди SLIP пакета в канал
- Задача обработки принятого IP пакета из очереди
- Задача формирования IP пакета для передачи и помещения в очередь
- Задача обработки приема UDP из очереди UDP-протокола
- Задача обработки формирования UDP и помещения в очередь
- Задача обмена по TCP
- задача - Telnet на сокете TCP.
- задача Арр на сокете UDP
- задача - обмен информацией через 5 последовательных каналов по своему протоколу, роутинг сообщений между любыми из них, между UDP сокетом и любым из этих 5 с конвертацией данных.
х51 в этом проекте применялся по историческим причинам, когда нужно было добавить IP-соску к существующему устройству. Об организации проекта по разделению на задачи можно спорить, где то возможно сделать и эффективнее.
Далее пойдем в область "розовых слонов", но из реальных проектов. Для fujitsu МВ90. Устройство, осуществляющее безостановочный контроль ж.д. состава. Задачи в порядке уменьшения приоритетов:
- Отметка вагонов. По сигналам от датчиков производит счет осей, выделение вагонов и определение их типов. Тик задачи - 500 мкс от отдельного таймера.
- Задача передачи информации об отметке вагонов в CAN
- Задача вывода сообщений на дисплей
- Задачи выполнения команды пользователя
- Задача обслуживания режима ввода команды
- Задача режима ожидания
7,8. Задачи связи по связи по 2-ум последовательным каналам. По приему сообщений возможна записть данных в I2С EEPROM
- Задача "Кинг" протокола CAN Kingdom. используется для динамической конфигурации устройств в сети CAN.
- Задача вирутального дисплея (прием сообщений из CAN для отображения на встроенном индикаторе)
- Задача приема информационных сообщений из CAN и раскладывающая по приоритетным очередям.
- Задача приема диагностических сообщений от устройств из CAN
- Задача обслуживания пользовательского последовательного интерфейса.
- Задача обслуживания дисплея 16х4
Еще несколько малосущественных задач поскипано. Посмотрел бы я на твой main()
AM>> Как конкртено укажешь, что ячейка озу Х используется для локальной AM>> переменной А функции F1 и локальной переменной B функции F2. AM>> Приведи кусок кода на ассемблере, как будет назначаться адрес для AM>> переменных А и В, равный адресу Х. MP> Да ну тебя. У меня в пике 4 ячейки temp1.temp4, вот они локальные - в них все MP> процедуры всякие переменные и счетчики крутят. Редко их больше (до 7)...
То есть, или переменные глобальные, или они в регистрах, я так и думал. Не влезли в регистры - становятся глобальными.
MP>>> Если мне мое соглашение об использовании озу позволит. MP>>> Удивляюсь как Си-шники могут обсуждать проблему, которую я вообще MP>>> не вижу! И даже никогда о ней не задумываюсь. AM>> Вот именно не видишь. Hе задумываешься, потому что не знаешь о ней. MP> Зачем знать если в асме ее HЕТ!
нет решения - нет проблемы :)
AM>> А еще пытаешься о чем то спорить. Ты вообще хоть понимаешь, о чем я AM>> пытаюсь говорить? MP> Действительно - признаю себя дураком.
ладно, хоть честно признал
AM>> Да ради бога, оставайся при своих заблуждениях, если элементарная AM>> логика для тебя слишком сложная наука. MP> Hу хоть тут-то согласись. С очевидными-же вещами споришь. ;)
Если регистры никому не нужны, то и их использование не считается оверхедом. Если бы ты показал бОльшую вложенность функций и использовал бы все регистры, а компиялтор положил бы что-то в RAM, то этот RAM и был-бы оверхедом.
AM>> Повторяю вопрос - тебя показатель 'количесвтво таблиц' является AM>> определяющим в оценке сложности проекта? MP> Как один из факторов...
Один из 100.
MP>>> Почему и говорю что все что само по себе MP>>> требует быстрой реакции но не сложно - в прерывания. AM>> Быстрой реакции на обнаружение события - да. Используется прерывание, AM>> но оно и в многозадачке так используется. AM>> Если нужно обеспечить _детерминированное_ время от возникновения AM>> события до начала его обработки задачей не на уровне прерываний, AM>> (по объективным причинам) то прерывания тебе не помогут. MP> Поможет метка времени и счетчик обеспечивающий это самое детерминирование и MP> промбуфер для данных полученных в прерываниях. Опять-же ничего нового я не MP> увидел.
Метка времени чего, события? Да мне его обработать уже надо и предпринять определенные действия, скажем, через 200 мкс после его наступления. Если я его получу событие в задаче через 1 мс или 10 мс с меткой времени, оно мне уже нафиг не нужно. Я вовремя не отреагировал, последствия можно придумать разные, в зависимости от события и устройства.
AM>>>> границу страницы в 256 байт. MP>>> Он не попадет - это не обсуждается! AM>> Почему это не попадет? MP> Тебе дествительно интересно почему я объявлю его как massiv equ 0xx00h (где x - MP> некие значения) или ты просто включаешь дурака?
Чтобы в ассемблере не попало, то нужно объявлять его в определенной секции с указанием типа выравнивания, а не пользоваться equ. Но во первых, надо это помнить, во вторых, может просто не влезть, если понадобится больше 256 байт.