-
- ИМХО, объявить указатель на функцию с одними аргументами, а передавать с другими - такой источник глюков, что поискать надо. Объявите тип с переменным числом аргументов из stdarg.h. И то, по моему, правильнее будет. - Хитрый Китаец(17.02.2019 22:22)
- Спасибо! Курну на досуге - Aleksey_75(17.02.2019 22:27)
- Типом функции в целом является И её возвращаемое значение И список типов её аргументов. Т.е. например, int (*func_type)(const char *, int) -- это декларация указателя на функцию возвращающую int и принимающую указатель на сторку и int. И разные fk0(1206 знак., 17.02.2019 21:31)
- А внести в тип описание параметров? Вообще странно. Я думал компилятор должен ошибку давать. - Скрипач(17.02.2019 14:12)
- "А внести в тип описание параметров?" подробнее плиз - Aleksey_75(17.02.2019 14:20)
- Компилятор должен знать о параметрах функции, которую вызывает по указателю. Пример: evgeniy1294(71 знак., 17.02.2019 14:25)
- угу , только тогда передача функций без аргументов вообще компилится перестает, ошибки вываливает. Мне по сути нужен указатель которому пофиг на аргументы, тем более они один фиг отдельно передаются - Aleksey_75(17.02.2019 14:29)
- Код, который генерируется для вызова функции ЗАВИСИТ от типов её аргументов. Самое элементарное, что часть аргументов передаётся в регистрах, часть кладётся в стек. Но не зная типов аргументов, вызываемая функция не сможет правильно fk0(814 знак., 17.02.2019 21:37)
- Дабы не плодить темы, коль у Вас столь глубокие познания процесса, спрошу здесь Aleksey_75(217 знак., 17.02.2019 22:23)
- То, что вы просите, называется position independent code и по умолчанию выключено. - lloyd(17.02.2019 22:30)
- вот, спасибо! не знал по какому названию гулить, пошел курить .. - Aleksey_75(17.02.2019 22:33)
- Поз-зависимый и независимый коды могут собираться по разному, что такое ваше ПО, значит ли это, что во флэши - не Ваше. Поэтому в общем случае: нет. - Хитрый Китаец(17.02.2019 22:29)
- ) я понял что сморозил )) по сути нужны подгружаемые функции, люто криво сформулировал - Aleksey_75(17.02.2019 22:35)
- Если адрес заранее не известен, то всё таки напрашивается PIC (positional independent code). Не всякий компилятор умеет. Большие и для больших процессоров -- умеют (gcc для ARM, MIPS), ибо нужно для динамических библиотек в ОС. Мелкие fk0(4649 знак., 17.02.2019 23:22)
- Ну так это "Если адрес заранее не известен", то все сложно. Если же адрес в RAM известен заранее то всё резко упрощается. Поз. независимый код уже не обязателен, линкер может настроить код для работы по адресу загрузки в RAM. Из флэша такой код ЫЫукпу(369 знак., 18.02.2019 02:37)
- Вдогонку, да ещё call convention (ABI) в случае PIC и не-PIC кода может отличаться для конкретной архитектуры. С чем на MIPS пришлось столкнуться: для PIC-кода принято при вызовах всех функций в регистр t9 помещать их адрес -- так вызванная fk0(756 знак., 17.02.2019 23:29)
- Понял! Спасибо за развернутый ответ! есть над чем подумать... Еще раз, спасибо! - Aleksey_75(17.02.2019 23:28)
- Если адрес заранее не известен, то всё таки напрашивается PIC (positional independent code). Не всякий компилятор умеет. Большие и для больших процессоров -- умеют (gcc для ARM, MIPS), ибо нужно для динамических библиотек в ОС. Мелкие fk0(4649 знак., 17.02.2019 23:22)
- ) я понял что сморозил )) по сути нужны подгружаемые функции, люто криво сформулировал - Aleksey_75(17.02.2019 22:35)
- То, что вы просите, называется position independent code и по умолчанию выключено. - lloyd(17.02.2019 22:30)
- Дабы не плодить темы, коль у Вас столь глубокие познания процесса, спрошу здесь Aleksey_75(217 знак., 17.02.2019 22:23)
- Странно это. Отгрести вызов с параметрами в месте "без" и случайными числами в стеке? - Скрипач(17.02.2019 21:09)
- У меня все работает без проблем на разных компиляторах, значит у вас где-то говнокод. Код в студию. - evgeniy1294(17.02.2019 14:50)
- а я разве сказал что у меня не работает ? у меня тоже все работает, было только предупреждение, а они меня всегда напрягают и глаза в коде колят ))) - Aleksey_75(17.02.2019 14:54, ссылка)
- Поэтому и говорю, что говнокод. Наличие предупреждения в данном случае означает, что что-то не так. - evgeniy1294(17.02.2019 15:00)
- а я разве сказал что у меня не работает ? у меня тоже все работает, было только предупреждение, а они меня всегда напрягают и глаза в коде колят ))) - Aleksey_75(17.02.2019 14:54, ссылка)
- А забанить варнинг не? Можно еще попытаться приводить тип в явном виде при каждом конкретном вызове, но конструкция обещает быть убойной. - ASDFS(17.02.2019 14:35)
- при вызове никаких проблем Aleksey_75(133 знак., 17.02.2019 14:43)
- Всем спасибо! Отбой! Усе! Решил , передачей функцию не по sch_func_t, а по const void * - Aleksey_75(17.02.2019 14:50)
- Только хочется напомнить, это не на всех архитектурах работает. На том же PIC18 или AVR, или даже PIC24... да и Renesas RL78 тоже, MSP430 наконец. Много где на 8/16-битных CPU указатель на void окажется 16-битным. А памяти может быть 128 килобайт, fk0(123 знак., 17.02.2019 21:40)
- ОК сапсибо! пока на 8 бит возвращаться с данным проектом не планирую , поэтому пусть будет так ))) - Aleksey_75(17.02.2019 22:05)
- Только хочется напомнить, это не на всех архитектурах работает. На том же PIC18 или AVR, или даже PIC24... да и Renesas RL78 тоже, MSP430 наконец. Много где на 8/16-битных CPU указатель на void окажется 16-битным. А памяти может быть 128 килобайт, fk0(123 знак., 17.02.2019 21:40)
- Всем спасибо! Отбой! Усе! Решил , передачей функцию не по sch_func_t, а по const void * - Aleksey_75(17.02.2019 14:50)
- при вызове никаких проблем Aleksey_75(133 знак., 17.02.2019 14:43)
- Код, который генерируется для вызова функции ЗАВИСИТ от типов её аргументов. Самое элементарное, что часть аргументов передаётся в регистрах, часть кладётся в стек. Но не зная типов аргументов, вызываемая функция не сможет правильно fk0(814 знак., 17.02.2019 21:37)
- угу , только тогда передача функций без аргументов вообще компилится перестает, ошибки вываливает. Мне по сути нужен указатель которому пофиг на аргументы, тем более они один фиг отдельно передаются - Aleksey_75(17.02.2019 14:29)
- Компилятор должен знать о параметрах функции, которую вызывает по указателю. Пример: evgeniy1294(71 знак., 17.02.2019 14:25)
- "А внести в тип описание параметров?" подробнее плиз - Aleksey_75(17.02.2019 14:20)
- ИМХО, объявить указатель на функцию с одними аргументами, а передавать с другими - такой источник глюков, что поискать надо. Объявите тип с переменным числом аргументов из stdarg.h. И то, по моему, правильнее будет. - Хитрый Китаец(17.02.2019 22:22)