Не надо делать мне как лучше, оставьте мне как хорошо
-
- под переменное число параметров можно слепить свою функцию аля принтф -> - Nikolay801_(25.01.2017 10:02, ссылка)
- Вначале скажи, что ты называешь "C". C89 (коммерческие говнокомпиляторы), C99 (gcc), C11, C++03 (древние VisualStudio), C++11, C++14? В общем случае ответ -- compound literals (см. выше мой ответ), но не для C89. Для C++03 -- напиши явный fk0(13 знак., 25.01.2017 00:14)
- Ужо разобрались. Или требовать це99 или обломинго. - Lightelf(25.01.2017 00:44)
- Вундервафеля какая-то, прости господи. Скрипач(165 знак., 24.01.2017 20:10)
- Насколько я знаю, переменные параметры всегда передаются через стек. Если printf работает - значит как-то передаются. - Lightelf(24.01.2017 21:01)
- в принтэфе всегда сначала передается строка, в которой описывается сколько и каких последует за ней параметров. - Nikolay801_(25.01.2017 09:27)
- Там размер "блока переменных параметров" передаётся, вместе с самим блоком. Где он у вас? Скрипач(91 знак., 24.01.2017 22:09)
- Почему не использую? Использую. stdarg.h прекрасно справляется со структурами. Lightelf(93 знак., 24.01.2017 22:28 - 22:42)
- так в принтф целые типы и указатель на строку - 0men(24.01.2017 21:02)
- А чем принципиально отличается передать в стеке один int64 или структуру из двух int? - Lightelf(24.01.2017 21:04)
- это зависит от разрядности используемого проца :) - 0men(24.01.2017 21:07)
- А чем принципиально отличается передать в стеке один int64 или структуру из двух int? - Lightelf(24.01.2017 21:04)
- соглашусь, передача структур в функцию это не комильфо совсем - 0men(24.01.2017 20:37)
- Почему? Если задача экономии стека не стоит? - Lightelf(24.01.2017 21:02)
- Бред. _basile(151 знак., 25.01.2017 00:44,
)
- Вам лишь бы что-нибудь поэкономить. Экономисты, млин. Купите уже нормальный МК, они нынче дешевле чем эти ваши авры. - SciFi(25.01.2017 09:29)
- 1. Тут байты экономятся, а в другом месте килобайты тратятся... 2. f((struc){ .name=val, .other=val }) -- набивать можно не все, а нужные; 3. мне думается, автор хочет это для хитрого макроса (лучше бы сразу сказал чего хочет). - fk0(25.01.2017 02:34)
- Запускаем це-шедулер, передавая ему список задач для выполнения, размер стека для каждой задачи и параметр для каждой задачи. - Lightelf(25.01.2017 08:40)
- Т.е. noreturn-функция? А места в стеке, под ее параметры, не жалко? :) Скрипач(152 знак., 25.01.2017 08:56 - 09:00)
- А памяти под список (который используется ровно один раз) не жалко? TCB все равно создаются на стеке. - LightElf(25.01.2017 09:53)
- Память под параметры функции create_task() будет ей, по выходу, возвращена. ТСВ совершенно не обязательно создавать именно в стеке. И переданные в sheduler параметры вовсе не ТСВ, один в один. Но тут уже многое от используемой вами RTOS зависит. - Скрипач(25.01.2017 10:26 - 10:29)
- Мы начинаем ходить по кругу. Проект собственно и есть игрушечная многозадачка. Основной фичей является использование только C90, без ассемблеров и прочих интринсиков. Потому есть некоторые особенности. - LightElf(25.01.2017 10:46)
- Бинго! :) Отличная иллюстрация к обсуждению зачем копировать API промышленных стандартов :) Скрипач(74 знак., 25.01.2017 11:20)
- Именно от того, что поставил себя на место ПОЛЬЗОВАТЕЛЯ и появился исходный вопрос. Банально удобнее и понятнее написать: LightElf(231 знак., 25.01.2017 11:53)
- Ну фиг его знает, будет ли оно читаемее и сопровождаемее. Структуру инициализации можно сделать константной и расположить в начале программы с сопутствующими комментариями, а твою ct_run нужно искать по всему тексту. - =AlexD=(25.01.2017 12:32)
- А если структур несколько? Ну там джампер установлен - запускаем задачи 1, 2, 3. Джампер снят - 2, 3, 4. Причем 2 и 3 - с другими параметрами. Вот и получится куча константных структур, размазанных по всем исходникам. - LightElf(25.01.2017 15:03)
- Есть предложение еще круче - всю работу с регистром АХ собрать в одном месте, а не размазывать по всем исходникам %) - Скрипач(25.01.2017 15:12)
- Как только в Це89 станет возможна работа с регистром AX - я рассмотрю ваше предложение. - LightElf(25.01.2017 15:15)
- Есть предложение еще круче - всю работу с регистром АХ собрать в одном месте, а не размазывать по всем исходникам %) - Скрипач(25.01.2017 15:12)
- Дело не в том, лучше это или нет. Дело в том, что это по другому. Уважаемый аффтар забыл что его RTOS более чем три тысячи седьмая по счету, а не первая и едиственная. - Скрипач(25.01.2017 12:35)
- Ясный пень, что API будет отличаться. Но за чистый Це приходится платить. - LightElf(25.01.2017 14:42)
- Т.е. для Вас это "ясно", как вы выразились, "как пень"? А можно нескромный вопрос? Скрипач(93 знак., 25.01.2017 14:57)
- Патамучта гладиолус! LightElf(138 знак., 25.01.2017 15:06)
- Да здравствует ещё один велосипед! Говорят, в RTOS есть тонкие вещи, которые несложно залажать. Оно надо? - SciFi(25.01.2017 15:25)
- Почему еще один? Он не новый, просто созрело желание кое-что изменить. Например сделать статические приоритеты. - LightElf(25.01.2017 15:40 - 15:49, ссылка)
- API, к гладиолусу, зачем нестандартным делать? Пана мучает "Синдром фатального недостатка"? :) - Скрипач(25.01.2017 15:08)
- API делается таким, каким его сделать возможно при указанных ограничениях языка Це. - LightElf(25.01.2017 15:14)
- ...и каким посчитает для себя необидным сделать его уважаемый аффтар 8) - Скрипач(25.01.2017 15:17)
- В языке Це невозможно переключать стеки произвольным образом. В языке Це нельзя запретить прерывания. Потому - вот так. - LightElf(25.01.2017 15:20)
- Ну да. Без этого, описания всех задач нужно пихать шедюреру через параметры вызова. Просто еще раз убеждаюсь что правильный HAL это не только абстрагирование от аппаратуры, но и
от своих коллегот операционной системы. - Скрипач(25.01.2017 15:23 - 15:42)- Весь API, в данном случае, представлен 6 функциями. - LightElf(25.01.2017 15:50)
- сатори - Скрипач(25.01.2017 16:09)
- Весь API, в данном случае, представлен 6 функциями. - LightElf(25.01.2017 15:50)
- Ну да. Без этого, описания всех задач нужно пихать шедюреру через параметры вызова. Просто еще раз убеждаюсь что правильный HAL это не только абстрагирование от аппаратуры, но и
- В языке Це невозможно переключать стеки произвольным образом. В языке Це нельзя запретить прерывания. Потому - вот так. - LightElf(25.01.2017 15:20)
- ...и каким посчитает для себя необидным сделать его уважаемый аффтар 8) - Скрипач(25.01.2017 15:17)
- API делается таким, каким его сделать возможно при указанных ограничениях языка Це. - LightElf(25.01.2017 15:14)
- Да здравствует ещё один велосипед! Говорят, в RTOS есть тонкие вещи, которые несложно залажать. Оно надо? - SciFi(25.01.2017 15:25)
- Патамучта гладиолус! LightElf(138 знак., 25.01.2017 15:06)
- Т.е. для Вас это "ясно", как вы выразились, "как пень"? А можно нескромный вопрос? Скрипач(93 знак., 25.01.2017 14:57)
- Ясный пень, что API будет отличаться. Но за чистый Це приходится платить. - LightElf(25.01.2017 14:42)
- А если структур несколько? Ну там джампер установлен - запускаем задачи 1, 2, 3. Джампер снят - 2, 3, 4. Причем 2 и 3 - с другими параметрами. Вот и получится куча константных структур, размазанных по всем исходникам. - LightElf(25.01.2017 15:03)
- Ну фиг его знает, будет ли оно читаемее и сопровождаемее. Структуру инициализации можно сделать константной и расположить в начале программы с сопутствующими комментариями, а твою ct_run нужно искать по всему тексту. - =AlexD=(25.01.2017 12:32)
- Именно от того, что поставил себя на место ПОЛЬЗОВАТЕЛЯ и появился исходный вопрос. Банально удобнее и понятнее написать: LightElf(231 знак., 25.01.2017 11:53)
- Бинго! :) Отличная иллюстрация к обсуждению зачем копировать API промышленных стандартов :) Скрипач(74 знак., 25.01.2017 11:20)
- Мы начинаем ходить по кругу. Проект собственно и есть игрушечная многозадачка. Основной фичей является использование только C90, без ассемблеров и прочих интринсиков. Потому есть некоторые особенности. - LightElf(25.01.2017 10:46)
- Память под параметры функции create_task() будет ей, по выходу, возвращена. ТСВ совершенно не обязательно создавать именно в стеке. И переданные в sheduler параметры вовсе не ТСВ, один в один. Но тут уже многое от используемой вами RTOS зависит. - Скрипач(25.01.2017 10:26 - 10:29)
- А памяти под список (который используется ровно один раз) не жалко? TCB все равно создаются на стеке. - LightElf(25.01.2017 09:53)
- Т.е. noreturn-функция? А места в стеке, под ее параметры, не жалко? :) Скрипач(152 знак., 25.01.2017 08:56 - 09:00)
- Запускаем це-шедулер, передавая ему список задач для выполнения, размер стека для каждой задачи и параметр для каждой задачи. - Lightelf(25.01.2017 08:40)
- Бред. _basile(151 знак., 25.01.2017 00:44,
- Почему? Если задача экономии стека не стоит? - Lightelf(24.01.2017 21:02)
- Насколько я знаю, переменные параметры всегда передаются через стек. Если printf работает - значит как-то передаются. - Lightelf(24.01.2017 21:01)
- В функцию с переменным числом аргументов уже можно передавать структуры? Я что-то пропустил? - SciFi(24.01.2017 20:05)
- Если они являются POD-типом -- можно. Т.е. в C можно всегда. - fk0(25.01.2017 00:15)
- А почему нет? - LightElf(24.01.2017 20:07)
- Хм, наверное, можно... Но не удивлюсь, если некоторые убогие компиляторы это залажают... - SciFi(24.01.2017 20:24)
- Честно говоря, не понимаю что там можно залажать. Если говорить о процессорах с нормальной линейной памятью. - Lightelf(24.01.2017 20:56)
- и все таки, что мешает передать указатели на структуру? там можно будет использоваться va_arg без проблем - 0men(24.01.2017 21:01)
- Если структуры мелкие, то нет никакой разницы. С точки зрения машины, список аргументов функции - это одна большая структура, лежащая в стеке. - =AlexD=(25.01.2017 06:43)
- Короче, тут сборище ретроградов. Запинали прогрессора :-) - SciFi(24.01.2017 21:23)
- ))) +1 - 0men_home(24.01.2017 22:23,
)
- Я сам знатный ретроград. Но это мелкий проектик для души, хочется там пощупать все темные и непонятные углы языка. - Lightelf(24.01.2017 21:26)
- Ну и нефиг тогда консультироваться у ретроградов. Ну и вот ещё аргумент: демократия до добра не доведёт :-) - SciFi(24.01.2017 21:34)
- Ну собственно правильный ответ от Молодого коллеги - я получил. А дальше - просто разговоры о прекрасном. - Lightelf(24.01.2017 21:42)
- Ну и нефиг тогда консультироваться у ретроградов. Ну и вот ещё аргумент: демократия до добра не доведёт :-) - SciFi(24.01.2017 21:34)
- ))) +1 - 0men_home(24.01.2017 22:23,
- +1. С указателем всё ясно, а так передаётся непонятно что, сколько там оно стека отъест.. - Молодой коллега(24.01.2017 21:17)
- А структуры ещё и return'ом возвращать можно... - fk0(25.01.2017 00:16)
- Сжигать на костре за такое надо. :) - Молодой коллега(25.01.2017 00:28)
- Библиотечная функция div, например... - fk0(25.01.2017 02:35)
- Сжигать на костре за такое надо. :) - Молодой коллега(25.01.2017 00:28)
- Ладно, уговорили :) Инициализацию структуры можно завернуть в красивый макрос и сложить во флеш. - Lightelf(24.01.2017 21:22)
- А структуры ещё и return'ом возвращать можно... - fk0(25.01.2017 00:16)
- Ничего, сейчас так и делаю. Но некрасиво и неудобно: структура описывается в одном месте, инициализируется в другом и используется в третьем. Область видимости, время жизни, субординация и выслуга лет. - Lightelf(24.01.2017 21:09)
- зато все четко, ясно и по госту :) - 0men(24.01.2017 21:12)
- For whom how. - Lightelf(24.01.2017 21:20)
- зато все четко, ясно и по госту :) - 0men(24.01.2017 21:12)
- -1. Предрассудки. - SciFi(24.01.2017 21:08)
- +1 - Evgeny_CD(24.01.2017 21:05)
- и все таки, что мешает передать указатели на структуру? там можно будет использоваться va_arg без проблем - 0men(24.01.2017 21:01)
- Честно говоря, не понимаю что там можно залажать. Если говорить о процессорах с нормальной линейной памятью. - Lightelf(24.01.2017 20:56)
- Хм, наверное, можно... Но не удивлюсь, если некоторые убогие компиляторы это залажают... - SciFi(24.01.2017 20:24)