-
- Функция Init() объявлена. А она есть(определена)??? - il-2(26.08.2015 13:01)
- А где код самой функции Init? Также попробовать вручную присвоить значение указателю на функцию: FDA(23 знак., 17.08.2015 13:05)
- Может компилятору можно сказать, чтобы он часть кода компилировал "как есть"? А не выдумывал факты, что указатель у меня NULL? - Евгений(17.08.2015 11:46, )
- А "как есть"? Там 3 типа указателей, какой ему, "как есть" выбрать? - aoreh(17.08.2015 14:31)
- Зачем выбирать? Четко сказано, где взять адрес для перехода. Я хочу, чтобы функция по этому адресу, который я передаю БЫЛА вызвана и мнение компилятора по этому поводу меня мало волнует. Мои ошибки, если я ошибусь в передаче адреса - это мои Евгений(8 знак., 17.08.2015 14:38, )
- Да нет же, проблема в том, что этот дибильный компиллятор сам путает, где он и какие указатели использует, отсюда и получается, шо он кладет 2 байта, а берет 3 и т.п. - aoreh(17.08.2015 14:41)
- О! А с этого места поподробнее. Откуда 3 байта в указателе для 18-х пиков? - Евгений(17.08.2015 14:43, )
- Я так понимаю, это проистекает из особенностей архитектуры пика в работе с памятью и желанием микрочипа сделать один указатель на все виды памяти, ну а менее трех байт - оптимизация - aoreh(17.08.2015 14:54)
- А, то есть, указатель может быть 2 байта, когда он его оптимизирует, а может 3, чтобы запихнуть в единое пространство Flash, RAM и EEPROM? Я смотрел, RAM начинается с адреса 0x200000, косят под ARMы. Значит, можно сделать вывод, что есть 3-4 вида Евгений(106 знак., 17.08.2015 14:58, )
- Точнее уже ниче не скажу, этот механизм был описан где-то в документации и глюки в работе с указателями связывали именно с ним - aoreh(17.08.2015 15:00)
- И, видимо, компилятору можно как-то жестко указать, что вот тут у меня используется общий указатель и он везде передается? - Евгений(17.08.2015 14:59, )
- А вот теперь, внимание, прикол... НЕЛЬЗЯ :) Во всяком случае, два года назад было нельзя, может щас шо-то изменилось - aoreh(17.08.2015 15:01)
- Это катастрофа. :-) Все же я верю в стойких парней, держащих на своих могучих плечах историю компиляторов от майкрочип. :-) Должны они были чего-то придумать. - Евгений(17.08.2015 15:04, )
- Компилятора от microchip -- не существует. XC8 -- это бывшая PRO версия фирмы Hitech. Фирма Hitech разорилась, потому, что все воровали (а не покупали за жалкие несколько сотен долларов). Ты думаешь от силы пара индусов из микрочипа заставленные fk0(373 знак., 18.08.2015 11:09)
- Как одно из решений, можно попытаться хранить не указатели, а целочисленное и приводить в нужном месте к указателю на ф-ию, коряво, уродски, но, может, поможет, я помню у нас были попытки такого использования, но вот результат не помню уже. - aoreh(17.08.2015 15:14)
- Это катастрофа. :-) Все же я верю в стойких парней, держащих на своих могучих плечах историю компиляторов от майкрочип. :-) Должны они были чего-то придумать. - Евгений(17.08.2015 15:04, )
- А вот теперь, внимание, прикол... НЕЛЬЗЯ :) Во всяком случае, два года назад было нельзя, может щас шо-то изменилось - aoreh(17.08.2015 15:01)
- А, то есть, указатель может быть 2 байта, когда он его оптимизирует, а может 3, чтобы запихнуть в единое пространство Flash, RAM и EEPROM? Я смотрел, RAM начинается с адреса 0x200000, косят под ARMы. Значит, можно сделать вывод, что есть 3-4 вида Евгений(106 знак., 17.08.2015 14:58, )
- Я так понимаю, это проистекает из особенностей архитектуры пика в работе с памятью и желанием микрочипа сделать один указатель на все виды памяти, ну а менее трех байт - оптимизация - aoreh(17.08.2015 14:54)
- О! А с этого места поподробнее. Откуда 3 байта в указателе для 18-х пиков? - Евгений(17.08.2015 14:43, )
- Да нет же, проблема в том, что этот дибильный компиллятор сам путает, где он и какие указатели использует, отсюда и получается, шо он кладет 2 байта, а берет 3 и т.п. - aoreh(17.08.2015 14:41)
- Зачем выбирать? Четко сказано, где взять адрес для перехода. Я хочу, чтобы функция по этому адресу, который я передаю БЫЛА вызвана и мнение компилятора по этому поводу меня мало волнует. Мои ошибки, если я ошибусь в передаче адреса - это мои Евгений(8 знак., 17.08.2015 14:38, )
- А "как есть"? Там 3 типа указателей, какой ему, "как есть" выбрать? - aoreh(17.08.2015 14:31)
- Я вот так объявляю указатель на свою функцию: FDA(201 знак., 17.08.2015 11:23)
- Это все хорошо, пока адрес ф-ии не становится полем структуры. Т.е. пока вот так просто - глобальная переменная - еще кое-как, но полноценное использование - болт aoreh(125 знак., 17.08.2015 14:22)
- Вот и писать надо тогда конкретнее, что не работает вызов по указателю из твоей структуры, написанной через жопу, а не просто, что не работает. Другие потом будут форум этот читать и сделают вывод, что в XC8 вообще ничего не работает. - FDA(17.08.2015 14:27)
- Оооо... и что же там "через жопу"? И да, если компайлер языка Си не способен правильно работать с указателями, то можно сказать, что в нем "ничего не работает", ибо это основа языка Си - aoreh(17.08.2015 14:30 - 14:34)
- Ну ты ещё в десять структур заверни указатель и потом возмущайся, что ничего не работает. У всех компиляторов есть свои огрехи. Принимай их за особенности, пиши код попроще и всё будет работать. А если ты считаешь, что качество кода выше, чем FDA(90 знак., 17.08.2015 14:35)
- Зашибись советы... какие, нахер, десять структур? шо ты мелешь... Ну объявляй сотню глобальных переменных, удачи тебе.... - aoreh(17.08.2015 14:38)
- Я против сотни глобальный переменных. Зачем так делать? Но и накручивать одну структуру над другой глупо. Такие программы людьми потом тяжело читаются. Не стоить множить сущности без необходимости. - FDA(17.08.2015 14:41)
- Какие еще одни над другой? Ты видишь исходник? ОДНА СТРУКТУРА! ОДНА! и нихера не работает - aoreh(17.08.2015 14:44)
- Я уже писал. Не работает, потому что у тебя руки из жопы растут! Я предложил работающий вариант. Но тут началась уже дискуссия ни о чём! - FDA(17.08.2015 14:46)
- У человека сделавшего 150 проектов на XC8 (я за это время один сделал) руки не из жопы, ага. Я за это время наверное один проект сделал. Который раз 5 пытался перевести на PRO версию и XC8. Безуспешно. - fk0(18.08.2015 11:07, ссылка)
- У тебя, видимо, есть опыт по "рукам из жопы". :-) А руки из плеч видел когда-нибудь? :-) Или для тебя все, что руки, все из жопы? :-) - Евгений(17.08.2015 14:47, )
- Руки из плеч, как правило, у профессионалов, которые спокойно решают проблему, а не орут на все стороны, что компилятор говно. - FDA(17.08.2015 14:49)
- Это первый и последний компиллятор в моей жизни, про который пришлось так сказать, более того, я долго не верил своим глазам и сопротивлялся, искал говнокод у себя... но, если профессионалам нравится хождение по граблям, то флаг в руки, рукожопым, aoreh(66 знак., 17.08.2015 14:58 - 15:08)
- Я, кстати, еще ни разу не сказал, что компилятор плох. Я лишь спросил совета, что делать и какие есть лазейки, чтобы компилятор все же согласился скомпилировать код как есть, как мне хочется, а не выбрасывал косвенные вызовы функций. - Евгений(17.08.2015 14:52, )
- Есть простой способ. Выруби оптимизацию полностью и проверь, будет ли работать. Тут надо понять, на каком уровне происходит сбой вызовов. - FDA(17.08.2015 14:54)
- У меня Free сейчас и стоит - Евгений(17.08.2015 15:00, )
- Трололо! Этот человек бил себя пяткой в грудь купленным мплабом. Не еби мозг и возьми условно-бесплатный hitech-c 9.51pl2 или pl3, а так же 8-ую версию mplab (без X) под windows. - fk0(18.08.2015 11:11)
- И, опять же, повторюсь, нет сбоя вызова, есть отказ компилятора воспринимать строчку с косвенным вызовом функции по указателю. - Евгений(17.08.2015 15:02, )
- Я вот накидал такую программку: FDA(555 знак., 17.08.2015 16:03)
- Куда тебе кусок кода прислать? Не хочу выкладывать сюда. А то опять рукожопым обзовут. :-) Или еще что по хлеще. :-) - Евгений(17.08.2015 16:32, )
- Что за кусок кода? Который я написал, у тебя заработал? - FDA(17.08.2015 16:37)
- Да заработал, конечно, чему там не работать? Я со своего проекта кусков надрал, чтобы 100% воспроизвести ошибку, точнее, предупреждение то злосчастное, при компиляции. Мыло дай. - Евгений(17.08.2015 16:40, )
- fda-847@yandex.ru FDA(515 знак., 17.08.2015 16:45)
- Да заработал, конечно, чему там не работать? Я со своего проекта кусков надрал, чтобы 100% воспроизвести ошибку, точнее, предупреждение то злосчастное, при компиляции. Мыло дай. - Евгений(17.08.2015 16:40, )
- Что за кусок кода? Который я написал, у тебя заработал? - FDA(17.08.2015 16:37)
- Куда тебе кусок кода прислать? Не хочу выкладывать сюда. А то опять рукожопым обзовут. :-) Или еще что по хлеще. :-) - Евгений(17.08.2015 16:32, )
- Я вот накидал такую программку: FDA(555 знак., 17.08.2015 16:03)
- У меня Free сейчас и стоит - Евгений(17.08.2015 15:00, )
- Есть простой способ. Выруби оптимизацию полностью и проверь, будет ли работать. Тут надо понять, на каком уровне происходит сбой вызовов. - FDA(17.08.2015 14:54)
- Руки из плеч, как правило, у профессионалов, которые спокойно решают проблему, а не орут на все стороны, что компилятор говно. - FDA(17.08.2015 14:49)
- Я уже писал. Не работает, потому что у тебя руки из жопы растут! Я предложил работающий вариант. Но тут началась уже дискуссия ни о чём! - FDA(17.08.2015 14:46)
- Какие еще одни над другой? Ты видишь исходник? ОДНА СТРУКТУРА! ОДНА! и нихера не работает - aoreh(17.08.2015 14:44)
- Я против сотни глобальный переменных. Зачем так делать? Но и накручивать одну структуру над другой глупо. Такие программы людьми потом тяжело читаются. Не стоить множить сущности без необходимости. - FDA(17.08.2015 14:41)
- Зашибись советы... какие, нахер, десять структур? шо ты мелешь... Ну объявляй сотню глобальных переменных, удачи тебе.... - aoreh(17.08.2015 14:38)
- Ну ты ещё в десять структур заверни указатель и потом возмущайся, что ничего не работает. У всех компиляторов есть свои огрехи. Принимай их за особенности, пиши код попроще и всё будет работать. А если ты считаешь, что качество кода выше, чем FDA(90 знак., 17.08.2015 14:35)
- Кстати, если не изменяет память, аналогичная проблема возникает, если нужно использовать массив указателей на функции (могу уже ошибаться, к счастью, начал забывать это убожество, но, по-моему, таки да) - aoreh(17.08.2015 14:34)
- Оооо... и что же там "через жопу"? И да, если компайлер языка Си не способен правильно работать с указателями, то можно сказать, что в нем "ничего не работает", ибо это основа языка Си - aoreh(17.08.2015 14:30 - 14:34)
- Вот и писать надо тогда конкретнее, что не работает вызов по указателю из твоей структуры, написанной через жопу, а не просто, что не работает. Другие потом будут форум этот читать и сделают вывод, что в XC8 вообще ничего не работает. - FDA(17.08.2015 14:27)
- Это все хорошо, пока адрес ф-ии не становится полем структуры. Т.е. пока вот так просто - глобальная переменная - еще кое-как, но полноценное использование - болт aoreh(125 знак., 17.08.2015 14:22)
- Может, оно режет размер указателя и ему нужно помочь - см. п. 4.8.22 (стр 107) Vit(249 знак., 17.08.2015 09:47, ссылка)
- const не помог. - Евгений(17.08.2015 11:14, )
- Поставил XC8 1.35 с лицензией PRO, та же самая ерунда. Не хочет он ее вызывать, сцуко. - Евгений(17.08.2015 08:57, )
- hitech soft picc18 9.51 pl2 или pl3. - fk0(14.08.2015 23:38)
- Компилятор XC8. Hitech не подойдет. А так то, на АРМ-ах, например, все прекрасно работает. :-) - Евгений(17.08.2015 08:15, )
- Если принципиально хочешь мучаться с XC8 -- не используй указатели на функции, бугага. Да и ещё много там "особенностей" и просто багов. - fk0(17.08.2015 10:53)
- Не хочу, но обстоятельства заставляют - Евгений(17.08.2015 11:17, )
- Вряд ли у тебя есть обстоятельства, чтоб использовать глючный XC8 (ака picc18 _pro_ edition) вместо более-менее работающего hitech soft picc18 (aka _std_ edition). - fk0(17.08.2015 12:22)
- В компании используется MPLABX совместно с компиляторами XC. Потрачены деньги, есть лицензия. Обстоятельств выше крыши. - Евгений(17.08.2015 12:30, )
- А я не знаю, зачкм вы приобрели компилятор который не подходит для ваших задач. Хоть бы бесплатную версию попробовали снсчала. - fk0(17.08.2015 12:57)
- Или сахару почитали -- здесь на все вопросы о хс-компиляторе или про-версии один практически ответ -- возьми стд версию от хайтека. - fk0(17.08.2015 12:59)
- Тогда, пару лет назад, проект удалось закончить взяв просто мплаб (без икс), шо за компайлер - не помню, но, хоть в нем тоже какие-то мелочи странные были, но все непрятные вещи были постоянными и предсказуемыми - aoreh(17.08.2015 14:36)
- Вся печаль то глубже... Код должен быть кроссплатформенным. А для младших пиков - компилятор, ети его, XC8 - Евгений(17.08.2015 14:42, )
- Для младших пиков единственный вменяемый C-компилятор (хотя и там "особенностей" и просто багов порядочно) -- hitech-C. Если нет поддержки новых контроллеров -- скопируй хидеры из XC8. - fk0(18.08.2015 11:13)
- Я не хочу тебя расстраивать, но "кроссплатформенный" это уже точно будет не про XC8 :( Чем раньше вы поймете, что для нормального программирования этот компиллятор не годится, тем больше денег сэкономите. Но, если честно, я просто шокирован, весь aoreh(85 знак., 17.08.2015 14:45)
- Ну, в основном расчет идет на ARM, да 32-е пики. Надеюсь я переносить код на них (на пики) не буду. :-) А вот в 18-е приходится. - Евгений(17.08.2015 14:50, )
- с 32 я не работал, но, говорят, шо там все нормуль - aoreh(17.08.2015 14:56)
- Ну, в основном расчет идет на ARM, да 32-е пики. Надеюсь я переносить код на них (на пики) не буду. :-) А вот в 18-е приходится. - Евгений(17.08.2015 14:50, )
- Вся печаль то глубже... Код должен быть кроссплатформенным. А для младших пиков - компилятор, ети его, XC8 - Евгений(17.08.2015 14:42, )
- Тогда, пару лет назад, проект удалось закончить взяв просто мплаб (без икс), шо за компайлер - не помню, но, хоть в нем тоже какие-то мелочи странные были, но все непрятные вещи были постоянными и предсказуемыми - aoreh(17.08.2015 14:36)
- Или сахару почитали -- здесь на все вопросы о хс-компиляторе или про-версии один практически ответ -- возьми стд версию от хайтека. - fk0(17.08.2015 12:59)
- mplabx работает и с std.(картинка выше). Да, std нынче не продается. Но если такая пьянка то нужно камень(семейство) менять. А если грят "ты должен" то, как писали выше, только простой(без ф-й по указателю) код switch-case. Я думаю тебе в твоей abivan(87 знак., 17.08.2015 12:47)
- В свое время долго бились в надежде запустить нормально через указатели. Мой немец каждый день залазил на микрочип в надежде увидить обновление с исправлением... В итоге, матерясь, сделали через перечисление и свитч. aoreh(243 знак., 17.08.2015 14:28)
- Я выше привёл простой пример вызова функции по указателю. Всё там работает, не надо вводить человека в заблуждение. - FDA(17.08.2015 13:11)
- сбилди пожалуйста, если не влом в xc8 abivan(786 знак., 17.08.2015 13:50 - 14:09)
- Я выше привёл кусок из программы, где вызывается функция по указателю. Там всё работает. Сбилди сам и убедись. - FDA(17.08.2015 14:04)
- Не в лом, что такое (ptr)Buf? - Евгений(17.08.2015 14:04, )
- сори недоправил char* - abivan(17.08.2015 14:08)
- Вот что выдал дизассемблер: Евгений(658 знак., 17.08.2015 14:16, )
- компилятор все соптимизировал, а жаль. Было бы интересно положит ли он все это в кодовую память. Но если скомпилировал уже хорошо. abivan(22 знак., 17.08.2015 14:35, картинка)
- Вот что выдал дизассемблер: Евгений(658 знак., 17.08.2015 14:16, )
- сори недоправил char* - abivan(17.08.2015 14:08)
- сбилди пожалуйста, если не влом в xc8 abivan(786 знак., 17.08.2015 13:50 - 14:09)
- BTW mplab-без-х работает лучше... и бесплатный. - fk0(17.08.2015 13:02)
- А я не знаю, зачкм вы приобрели компилятор который не подходит для ваших задач. Хоть бы бесплатную версию попробовали снсчала. - fk0(17.08.2015 12:57)
- В компании используется MPLABX совместно с компиляторами XC. Потрачены деньги, есть лицензия. Обстоятельств выше крыши. - Евгений(17.08.2015 12:30, )
- Вряд ли у тебя есть обстоятельства, чтоб использовать глючный XC8 (ака picc18 _pro_ edition) вместо более-менее работающего hitech soft picc18 (aka _std_ edition). - fk0(17.08.2015 12:22)
- Не хочу, но обстоятельства заставляют - Евгений(17.08.2015 11:17, )
- чем это не подойдет? abivan(253 знак., 17.08.2015 10:47, картинка)
- Не подходит тем, что это HI-TECH, а нужен код для XC8. Не для себя ж делаю, для дяди... - Евгений(17.08.2015 11:19, )
- Тогда пиши на ассемблере. - fk0(17.08.2015 12:22)
- не знаешь ответа на вопрос - не советуй. - Евгений(17.08.2015 12:31, )
- Я все ответы в данной предметной области знаю куда лучше тебя и дурацких вопросов не задаю. И да, ответ тебе дали, один и тот же, два разных человека, собаку съевших в данном вопросе. - fk0(17.08.2015 12:54)
- Я за тебя рад. Только ценность твоего ответа 0, не смотря на всех собак - Евгений(17.08.2015 13:56, )
- Я все ответы в данной предметной области знаю куда лучше тебя и дурацких вопросов не задаю. И да, ответ тебе дали, один и тот же, два разных человека, собаку съевших в данном вопросе. - fk0(17.08.2015 12:54)
- не знаешь ответа на вопрос - не советуй. - Евгений(17.08.2015 12:31, )
- Тогда пиши на ассемблере. - fk0(17.08.2015 12:22)
- Не подходит тем, что это HI-TECH, а нужен код для XC8. Не для себя ж делаю, для дяди... - Евгений(17.08.2015 11:19, )
- Если принципиально хочешь мучаться с XC8 -- не используй указатели на функции, бугага. Да и ещё много там "особенностей" и просто багов. - fk0(17.08.2015 10:53)
- Компилятор XC8. Hitech не подойдет. А так то, на АРМ-ах, например, все прекрасно работает. :-) - Евгений(17.08.2015 08:15, )
- (*(Str->Init))(NULL, NULL); - AlexBi(14.08.2015 17:25)
- Не помогло, результат тот же - Евгений(17.08.2015 08:13, )