Програмирование pic на СИ.
- Сообщения: 6479
- Зарегистрирован: Сб янв 28, 2006 22:47:24
Ага, ни в коем случае никакого Яндекса, только элитная помойка Гугл 
Астролябия-сама меряет, было бы что мерять!!!
- Реклама
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]если СИ запрещает кому-то пользоваться ВСЕМИ хотелками микроконтроллера, то АСМ все запреты снимает.[/uquote] Си никому ничего не запрещает. Просто нужно уметь им пользоваться и читать мануалы, а не фантазировать.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]Только ЗАСАДА - она и осталась
Куча переключений банков ОЗУ, из-за которых, если нужно написать ЧЁТКИЙ-ТОЧНЫЙ тайминг - то не получиться
нужны вставки на АСМ.[/uquote]
"Чёткий-точный" тайминг на Си и без банков не получится. А писать тогда лучше всё на АСМе.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]Да ладно вставки, память читать всё равно нет возможности, да и как она появится, если прямой доступ к памяти - это регистры TBLPTRx и TABLAT, а это уже серия пик18.[/uquote]
Чушь изволите писать, милейший... В не самых старых PIC16 и PIC12 с адреса 0x2000 отображено ЛИНЕЙНОЕ пространство ОЗУ, а с адреса 0x8000 младшие байты флеша. Табличный доступ к флешу имеется во всех не самых старых PIC12/PIC16.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]Да и 14-ти битный адрес к памяти флешь - это тоже "энтузязизма" не добавляет ... когда старший адрес может быть только до 0x3F ...
Вот поэтому, и нет смысла читать старший адрес программной памяти[/uquote]
Это тупой бред. Ты бездарно путаешь РАЗРЯДНОСТЬ флеша, с размером флеша. Разрядность адреса определяется размером флеша. И только. Так происходит во всех без исключениях контроллерах и процессорах любой разрядности и любого производителя. Возьми любой ARM - там тоже самое. Более того, 32-разрядный адрес перекрывает все пространство ФРАГМЕНТАМИ. То есть доступная память находится на определенных участках полного диапазона адресов.
Читать старший неполный байт флеша есть прямой резон тогда, когда табличные значения требуются выше 8 разрядов, но ниже 15. Под размерность 14 разрядов всегда можно подогнать коэффициенты фильтров, например.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]В моём понятии - мелкий, это частота не более 8-ми МИпс, памячти почти НОЛЬ, но есть несколько аппаратных модулей, которые можно использовать, к примеру, для связи с иммо от WV
Ну можно ещё взять м/с типа DS1307, DS1338, MCP7941x и сделать добротные часики - прицепить ещё солнечную панель, аккум типа 16850, и можно сказать - почти на всю жизнь
Главное - правильно программу написать, чтобы аккум не всё время заряжался, а по мере необходимости.[/uquote]
Есть куча внешне простых задач, которые используют ресурсы МК на 100%. Например, DDS в программной реализации для МК в котором нет модуля NCO. Таким образом, можно на 8-ногом МК генерировать синус-ШИМ с линейной сеткой частот в 0,1 Гц.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]А что? здесь есть файлообменник, который вкурит от 700 МГбайт и выше ? Чёт я сумневаюсь
А кто хочет, тот и нерасшаренный скачает[/uquote]
Что такого ты хочешь поведать миру с объемом в 700 метров?
Кому нахер сдались твои поделия? Научись излагать свои мысли лаконично и сопровождать их примерами УЧАСТКОВ кода в тегах code. Твои программные портянки тут никому не нужны.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]Только ЗАСАДА - она и осталась
"Чёткий-точный" тайминг на Си и без банков не получится. А писать тогда лучше всё на АСМе.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]Да ладно вставки, память читать всё равно нет возможности, да и как она появится, если прямой доступ к памяти - это регистры TBLPTRx и TABLAT, а это уже серия пик18.[/uquote]
Чушь изволите писать, милейший... В не самых старых PIC16 и PIC12 с адреса 0x2000 отображено ЛИНЕЙНОЕ пространство ОЗУ, а с адреса 0x8000 младшие байты флеша. Табличный доступ к флешу имеется во всех не самых старых PIC12/PIC16.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]Да и 14-ти битный адрес к памяти флешь - это тоже "энтузязизма" не добавляет ... когда старший адрес может быть только до 0x3F ...
Вот поэтому, и нет смысла читать старший адрес программной памяти[/uquote]
Читать старший неполный байт флеша есть прямой резон тогда, когда табличные значения требуются выше 8 разрядов, но ниже 15. Под размерность 14 разрядов всегда можно подогнать коэффициенты фильтров, например.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]В моём понятии - мелкий, это частота не более 8-ми МИпс, памячти почти НОЛЬ, но есть несколько аппаратных модулей, которые можно использовать, к примеру, для связи с иммо от WV
Ну можно ещё взять м/с типа DS1307, DS1338, MCP7941x и сделать добротные часики - прицепить ещё солнечную панель, аккум типа 16850, и можно сказать - почти на всю жизнь
Главное - правильно программу написать, чтобы аккум не всё время заряжался, а по мере необходимости.[/uquote]
Есть куча внешне простых задач, которые используют ресурсы МК на 100%. Например, DDS в программной реализации для МК в котором нет модуля NCO. Таким образом, можно на 8-ногом МК генерировать синус-ШИМ с линейной сеткой частот в 0,1 Гц.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]А что? здесь есть файлообменник, который вкурит от 700 МГбайт и выше ? Чёт я сумневаюсь
А кто хочет, тот и нерасшаренный скачает[/uquote]
Что такого ты хочешь поведать миру с объемом в 700 метров?
Кому нахер сдались твои поделия? Научись излагать свои мысли лаконично и сопровождать их примерами УЧАСТКОВ кода в тегах code. Твои программные портянки тут никому не нужны.
- Сообщения: 158
- Зарегистрирован: Сб апр 24, 2021 18:42:11
[uquote="КРАМ",url="/forum/viewtopic.php?p=4480651#p4480651"]...Научись излагать свои мысли лаконично и сопровождать их примерами УЧАСТКОВ кода в тегах code. Твои программные портянки тут никому не нужны.[/uquote]
+1000 Вот еще из очень риторического, с послевкусием мании величия:
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]...Я что? ЛОХ свою инфу разбрасывать по всей интернетовской помойке? Да она завтра будет доступна последнему бомжу...[/uquote]

+1000 Вот еще из очень риторического, с послевкусием мании величия:
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]...Я что? ЛОХ свою инфу разбрасывать по всей интернетовской помойке? Да она завтра будет доступна последнему бомжу...[/uquote]
- Сообщения: 160
- Зарегистрирован: Пт мар 29, 2013 23:53:14
[uquote="Asmodey",url="/forum/viewtopic.php?p=4480623#p4480623"]Ага, ни в коем случае никакого Яндекса, только элитная помойка Гугл
[/uquote]
Ты САМ то понял - чего написал ?
Добавлено after 4 minutes 37 seconds:
[uquote="КРАМ",url="/forum/viewtopic.php?p=4480651#p4480651"][uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]если СИ запрещает кому-то пользоваться ВСЕМИ хотелками микроконтроллера, то АСМ все запреты снимает.[/uquote] Си никому ничего не запрещает. Просто нужно уметь им пользоваться и читать мануалы, а не фантазировать.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]Только ЗАСАДА - она и осталась
Куча переключений банков ОЗУ, из-за которых, если нужно написать ЧЁТКИЙ-ТОЧНЫЙ тайминг - то не получиться
нужны вставки на АСМ.[/uquote]
"Чёткий-точный" тайминг на Си и без банков не получится. А писать тогда лучше всё на АСМе.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]Да ладно вставки, память читать всё равно нет возможности, да и как она появится, если прямой доступ к памяти - это регистры TBLPTRx и TABLAT, а это уже серия пик18.[/uquote]
Чушь изволите писать, милейший... В не самых старых PIC16 и PIC12 с адреса 0x2000 отображено ЛИНЕЙНОЕ пространство ОЗУ, а с адреса 0x8000 младшие байты флеша. Табличный доступ к флешу имеется во всех не самых старых PIC12/PIC16.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]Да и 14-ти битный адрес к памяти флешь - это тоже "энтузязизма" не добавляет ... когда старший адрес может быть только до 0x3F ...
Вот поэтому, и нет смысла читать старший адрес программной памяти[/uquote]
Это тупой бред. Ты бездарно путаешь РАЗРЯДНОСТЬ флеша, с размером флеша. Разрядность адреса определяется размером флеша. И только. Так происходит во всех без исключениях контроллерах и процессорах любой разрядности и любого производителя. Возьми любой ARM - там тоже самое. Более того, 32-разрядный адрес перекрывает все пространство ФРАГМЕНТАМИ. То есть доступная память находится на определенных участках полного диапазона адресов.
Читать старший неполный байт флеша есть прямой резон тогда, когда табличные значения требуются выше 8 разрядов, но ниже 15. Под размерность 14 разрядов всегда можно подогнать коэффициенты фильтров, например.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]В моём понятии - мелкий, это частота не более 8-ми МИпс, памячти почти НОЛЬ, но есть несколько аппаратных модулей, которые можно использовать, к примеру, для связи с иммо от WV
Ну можно ещё взять м/с типа DS1307, DS1338, MCP7941x и сделать добротные часики - прицепить ещё солнечную панель, аккум типа 16850, и можно сказать - почти на всю жизнь
Главное - правильно программу написать, чтобы аккум не всё время заряжался, а по мере необходимости.[/uquote]
Есть куча внешне простых задач, которые используют ресурсы МК на 100%. Например, DDS в программной реализации для МК в котором нет модуля NCO. Таким образом, можно на 8-ногом МК генерировать синус-ШИМ с линейной сеткой частот в 0,1 Гц.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]А что? здесь есть файлообменник, который вкурит от 700 МГбайт и выше ? Чёт я сумневаюсь
А кто хочет, тот и нерасшаренный скачает[/uquote]
Что такого ты хочешь поведать миру с объемом в 700 метров?
Кому нахер сдались твои поделия? Научись излагать свои мысли лаконично и сопровождать их примерами УЧАСТКОВ кода в тегах code. Твои программные портянки тут никому не нужны.[/uquote]
Завтра кину Вам файл, где будет работа с тем-же простым 1602, где разница в работе между асм и си будет ЯВНО очевидна.
И вы её не сможете исправить, кроме как через АСМ
Добавлено after 44 minutes 26 seconds:
https://disk.yandex.ru/d/XyseVQnLnX6n2w
Добавлено after 29 minutes 4 seconds:
Знаете ребята ...
Есть такое понятие - кто-то что-то делает, а кто-то отсасыв*ет и плывёт как гов*о по течению форума
Так вот когда вы меня минусуете (
), то не забывайте - что ВЫ себя минусуете 
Вы же ЛОХИ, а вами ведуют ДВА так-сяк знающих .... но они для вас ЭТАЛОН - типа ведущие для быдло
А не пытались своё мнение и прошивки писать, и возразить этим ?
А в идеале - просто не посещать этот форум - он через год сам загнётся
Ты САМ то понял - чего написал ?
Добавлено after 4 minutes 37 seconds:
[uquote="КРАМ",url="/forum/viewtopic.php?p=4480651#p4480651"][uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]если СИ запрещает кому-то пользоваться ВСЕМИ хотелками микроконтроллера, то АСМ все запреты снимает.[/uquote] Си никому ничего не запрещает. Просто нужно уметь им пользоваться и читать мануалы, а не фантазировать.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]Только ЗАСАДА - она и осталась
"Чёткий-точный" тайминг на Си и без банков не получится. А писать тогда лучше всё на АСМе.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]Да ладно вставки, память читать всё равно нет возможности, да и как она появится, если прямой доступ к памяти - это регистры TBLPTRx и TABLAT, а это уже серия пик18.[/uquote]
Чушь изволите писать, милейший... В не самых старых PIC16 и PIC12 с адреса 0x2000 отображено ЛИНЕЙНОЕ пространство ОЗУ, а с адреса 0x8000 младшие байты флеша. Табличный доступ к флешу имеется во всех не самых старых PIC12/PIC16.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]Да и 14-ти битный адрес к памяти флешь - это тоже "энтузязизма" не добавляет ... когда старший адрес может быть только до 0x3F ...
Вот поэтому, и нет смысла читать старший адрес программной памяти[/uquote]
Читать старший неполный байт флеша есть прямой резон тогда, когда табличные значения требуются выше 8 разрядов, но ниже 15. Под размерность 14 разрядов всегда можно подогнать коэффициенты фильтров, например.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]В моём понятии - мелкий, это частота не более 8-ми МИпс, памячти почти НОЛЬ, но есть несколько аппаратных модулей, которые можно использовать, к примеру, для связи с иммо от WV
Ну можно ещё взять м/с типа DS1307, DS1338, MCP7941x и сделать добротные часики - прицепить ещё солнечную панель, аккум типа 16850, и можно сказать - почти на всю жизнь
Главное - правильно программу написать, чтобы аккум не всё время заряжался, а по мере необходимости.[/uquote]
Есть куча внешне простых задач, которые используют ресурсы МК на 100%. Например, DDS в программной реализации для МК в котором нет модуля NCO. Таким образом, можно на 8-ногом МК генерировать синус-ШИМ с линейной сеткой частот в 0,1 Гц.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]А что? здесь есть файлообменник, который вкурит от 700 МГбайт и выше ? Чёт я сумневаюсь
А кто хочет, тот и нерасшаренный скачает[/uquote]
Что такого ты хочешь поведать миру с объемом в 700 метров?
Кому нахер сдались твои поделия? Научись излагать свои мысли лаконично и сопровождать их примерами УЧАСТКОВ кода в тегах code. Твои программные портянки тут никому не нужны.[/uquote]
Завтра кину Вам файл, где будет работа с тем-же простым 1602, где разница в работе между асм и си будет ЯВНО очевидна.
И вы её не сможете исправить, кроме как через АСМ
Добавлено after 44 minutes 26 seconds:
https://disk.yandex.ru/d/XyseVQnLnX6n2w
Добавлено after 29 minutes 4 seconds:
Знаете ребята ...
Есть такое понятие - кто-то что-то делает, а кто-то отсасыв*ет и плывёт как гов*о по течению форума
Так вот когда вы меня минусуете (
Вы же ЛОХИ, а вами ведуют ДВА так-сяк знающих .... но они для вас ЭТАЛОН - типа ведущие для быдло
А не пытались своё мнение и прошивки писать, и возразить этим ?
А в идеале - просто не посещать этот форум - он через год сам загнётся
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482338#p4482338"]Завтра кину Вам файл, где будет работа с тем-же простым 1602, где разница в работе между асм и си будет ЯВНО очевидна.
И вы её не сможете исправить, кроме как через АСМ[/uquote]
Твое "эпохальное" достижение состоит в том, что ты отказался от установки банка в функции и сделал ее использование зависимым от контекста.
Ничего более тупого ты не мог изобразить?
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482338#p4482338"]он через год сам загнётся[/uquote]
Пока на форум ходят такие клоуны как ты, ему ничего не грозит. Всегда найдутся зрители для поржать.
И вы её не сможете исправить, кроме как через АСМ[/uquote]
Твое "эпохальное" достижение состоит в том, что ты отказался от установки банка в функции и сделал ее использование зависимым от контекста.
Ничего более тупого ты не мог изобразить?
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482338#p4482338"]он через год сам загнётся[/uquote]
Пока на форум ходят такие клоуны как ты, ему ничего не грозит. Всегда найдутся зрители для поржать.
- Реклама
- Сообщения: 160
- Зарегистрирован: Пт мар 29, 2013 23:53:14
Пока форумом заведуют КЛОУНЫ, которые друг с другом повязаны, тут нехер делать.
Тут ни одного "заведующего'" этим форумом не появлялось. Все, кто тут тебе отвечал, реагировали лишь на содержание твоих сообщений. Измени содержание ( и форму, кстати, тоже) и все будет пучком.
Твои глупости универсальны и не зависят от коллектива. Поэтому на любом форуме тебя постигнет идентичная судьба.
Твои глупости универсальны и не зависят от коллектива. Поэтому на любом форуме тебя постигнет идентичная судьба.
- Сообщения: 160
- Зарегистрирован: Пт мар 29, 2013 23:53:14
[uquote="КРАМ",url="/forum/viewtopic.php?p=4482440#p4482440"]Тут ни одного "заведующего'" этим форумом не появлялось. Все, кто тут тебе отвечал, реагировали лишь на содержание твоих сообщений. Измени содержание ( и форму, кстати, тоже) и все будет пучком.
Твои глупости универсальны и не зависят от коллектива. Поэтому на любом форуме тебя постигнет идентичная судьба.[/uquote]
Ну тогда ответь на свои-же цитаты от "Чт сен 28, 2023 22:10:38", только не голословно, а с примерами, желательно и на СИ и на АСМ
Можно ЧИСТЫМ исходником, а можно и скринами
По поводу "постигнет идентичная судьба"
ну если попадутся аналогичные тебе, то да 
А если люди умеют оценивать - то, что написано, и соответствует или нет реальному коду, то вопросов не должно возникнуть
А я не любитель сидеть на форумах, и кому-то что-то доказывать
Достаточно скрина, чтобы чел аналогичное проверил у себя в прошивке, и сказал - правда или пиз*ёж
Кстати, жду -когда покажешь -
можно чисто на СИ работать без лишних команд (пик16, пик18), или это ЧИСТО ВЫПЁНДРЁЖЬ перед участниками форума ?
А я пишу от пик10 до пик32, сейчас в наличии лежит модуль "PIC32-HMZ144", купленный может года два-три назад в официальном chipdip.by
.. ну поморгал светодиодом (не тем, который в оригинальном комплекте идёт в качестве примера, а совим), ну пока больше применить негде, а вот PIC32MX120F032B-I/ML, которые купил до СВО в том-же chipdip.by по доллару за штуку (больше 20-ти) - уже
использовал в поворотниках для авто (для линейки WS281х) - вот те работают
Твои глупости универсальны и не зависят от коллектива. Поэтому на любом форуме тебя постигнет идентичная судьба.[/uquote]
Ну тогда ответь на свои-же цитаты от "Чт сен 28, 2023 22:10:38", только не голословно, а с примерами, желательно и на СИ и на АСМ
Можно ЧИСТЫМ исходником, а можно и скринами
По поводу "постигнет идентичная судьба"
А если люди умеют оценивать - то, что написано, и соответствует или нет реальному коду, то вопросов не должно возникнуть
А я не любитель сидеть на форумах, и кому-то что-то доказывать
можно чисто на СИ работать без лишних команд (пик16, пик18), или это ЧИСТО ВЫПЁНДРЁЖЬ перед участниками форума ?
А я пишу от пик10 до пик32, сейчас в наличии лежит модуль "PIC32-HMZ144", купленный может года два-три назад в официальном chipdip.by
использовал в поворотниках для авто (для линейки WS281х) - вот те работают
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482522#p4482522"]Ну тогда ответь на свои-же цитаты от "Чт сен 28, 2023 22:10:38", только не голословно, а с примерами, желательно и на СИ и на АСМ
Можно ЧИСТЫМ исходником, а можно и скринами[/uquote]
Ты предлагаешь мне показать ТВОИ скрины?
Душевный ты наш, ты сам в состоянии посмотреть на собственный код и убедиться в том, что в твоих ASM-вставках отсутствует выбор банка при ногодрыге стробом. Что ты еще желаешь увидеть? Ты тупо сделал детскую ошибку. Причем тут мой код и мои скрины? То есть, если перед вызовом функции строба по каким либо причинам банк будет отличен от нулевого, то твой код будет фуфлом и никакого строба на выходе не будет.
Однако, я канешна понимаю, что ты вызываешь строб исключительно после вывода в линии данных и банк по любому будет нулевым. Но тогда ответь мне на простой вопрос. Напуркуа ты вообще выделил строб в отдельную функцию? Если ты такой "экономист" в машинных циклах и негодуешь по поводу двух лишних инструкций сгенерированных компилятором, то нахера ты, такой весь умный и шоколадный, создал ЧЕТЫРЕ машинных цикла вызова функции и выхода из нее (по две на каждую инструкцию), вместо того, что бы логично написать этот строб прямо в функции вывода данных?
И что мы имеем в результате? А имеем мы только твою пустопорожнюю болтовню и бахвальство.
И это я не упомянул, что все твои извращения с циклами нах ни кому не облокотились, ибо в инициализации не бывает критического кода.
Ну и если ты любишь минимализм, - пиши на чистом АСМе. У меня, например, почти все проекты на продукции Микрочипа написаны на АСМе. Без Си. Включая проекты на dsPIC33, включая двухядерные dsPIC33.
Вот тогда ты будешь истинным пацаком в красных штанах...
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482522#p4482522"]Достаточно скрина, чтобы чел аналогичное проверил у себя в прошивке, и сказал - .... это ЧИСТО ВЫПЁНДРЁЖЬ перед участниками форума ?[/uquote]
И это чистая правда. Единственной причиной твоей местной болтовни является ТВОЙ ВЫПЕНДРЕЖ. Причем безграмотный.
И к этому список твоих "достижений" в ПИКах никакого отношения не имеет. Ибо есть все основания полагать, что в них понатыканы аналогичные глупости. И не важно работает твой быдлокод или нет. Его проблема в том, что в нем разбросаны ошибки, которые всплывут, как только потребуется отклониться от твоего кода, взяв лишь фрагмент.
Можно ЧИСТЫМ исходником, а можно и скринами[/uquote]
Ты предлагаешь мне показать ТВОИ скрины?
Душевный ты наш, ты сам в состоянии посмотреть на собственный код и убедиться в том, что в твоих ASM-вставках отсутствует выбор банка при ногодрыге стробом. Что ты еще желаешь увидеть? Ты тупо сделал детскую ошибку. Причем тут мой код и мои скрины? То есть, если перед вызовом функции строба по каким либо причинам банк будет отличен от нулевого, то твой код будет фуфлом и никакого строба на выходе не будет.
Однако, я канешна понимаю, что ты вызываешь строб исключительно после вывода в линии данных и банк по любому будет нулевым. Но тогда ответь мне на простой вопрос. Напуркуа ты вообще выделил строб в отдельную функцию? Если ты такой "экономист" в машинных циклах и негодуешь по поводу двух лишних инструкций сгенерированных компилятором, то нахера ты, такой весь умный и шоколадный, создал ЧЕТЫРЕ машинных цикла вызова функции и выхода из нее (по две на каждую инструкцию), вместо того, что бы логично написать этот строб прямо в функции вывода данных?
И что мы имеем в результате? А имеем мы только твою пустопорожнюю болтовню и бахвальство.
И это я не упомянул, что все твои извращения с циклами нах ни кому не облокотились, ибо в инициализации не бывает критического кода.
Ну и если ты любишь минимализм, - пиши на чистом АСМе. У меня, например, почти все проекты на продукции Микрочипа написаны на АСМе. Без Си. Включая проекты на dsPIC33, включая двухядерные dsPIC33.
Вот тогда ты будешь истинным пацаком в красных штанах...
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482522#p4482522"]Достаточно скрина, чтобы чел аналогичное проверил у себя в прошивке, и сказал - .... это ЧИСТО ВЫПЁНДРЁЖЬ перед участниками форума ?[/uquote]
И это чистая правда. Единственной причиной твоей местной болтовни является ТВОЙ ВЫПЕНДРЕЖ. Причем безграмотный.
И к этому список твоих "достижений" в ПИКах никакого отношения не имеет. Ибо есть все основания полагать, что в них понатыканы аналогичные глупости. И не важно работает твой быдлокод или нет. Его проблема в том, что в нем разбросаны ошибки, которые всплывут, как только потребуется отклониться от твоего кода, взяв лишь фрагмент.
Последний раз редактировалось КРАМ Пт сен 29, 2023 12:17:39, всего редактировалось 1 раз.
- Сообщения: 160
- Зарегистрирован: Пт мар 29, 2013 23:53:14
Лень искать видео, где есть все режимы для авто: повороты, габариты, тормоза, проблесковые маячки, несколько сигналов "Police".
В проект я их не вложил, а в Россию точно отправлял как наглядное пособие.
В архиве, пару вариантов видео, и первая плата
https://disk.yandex.ru/d/mGWBbRtD2oFL-w
PS: я никогда не говорю о том, что не проверил лично
Ещё раз повторюсь - на пик16 НИЧЕГО вменяемого не напишешь под современные нужды.
А вот как КРАМ может обходить уловки от СИ и писать практически как на АСМ - мы скоро узнаем
... ну он же не бросает слов на ветер ?!? он покажет ....
В проект я их не вложил, а в Россию точно отправлял как наглядное пособие.
В архиве, пару вариантов видео, и первая плата
https://disk.yandex.ru/d/mGWBbRtD2oFL-w
PS: я никогда не говорю о том, что не проверил лично
Ещё раз повторюсь - на пик16 НИЧЕГО вменяемого не напишешь под современные нужды.
А вот как КРАМ может обходить уловки от СИ и писать практически как на АСМ - мы скоро узнаем
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482573#p4482573"]А вот как КРАМ может обходить уловки от СИ и писать практически как на АСМ - мы скоро узнаем[/uquote]
А я в каком то месте возражал против АСМ? Может процитируешь?
И нахера ты так активно пропагандируешь что ты такого сделал? Тут не тема про тебя?
А я в каком то месте возражал против АСМ? Может процитируешь?
И нахера ты так активно пропагандируешь что ты такого сделал? Тут не тема про тебя?
- Сообщения: 160
- Зарегистрирован: Пт мар 29, 2013 23:53:14
[uquote="КРАМ",url="/forum/viewtopic.php?p=4482574#p4482574"][uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482573#p4482573"]А вот как КРАМ может обходить уловки от СИ и писать практически как на АСМ - мы скоро узнаем[/uquote]
А я в каком то месте возражал против АСМ? Может процитируешь?
И нахера ты так активно пропагандируешь что ты такого сделал? Тут не тема про тебя?[/uquote]
Душевный ты наш
Я не предлагаю мои АСМ вставки обсуждать, я тебе предлагаю показать СВОЙ СИ код, и потом его дизассемблировать, а вот потом ЗАДУШЕВНО поговорим
А я в каком то месте возражал против АСМ? Может процитируешь?
И нахера ты так активно пропагандируешь что ты такого сделал? Тут не тема про тебя?[/uquote]
Душевный ты наш
Я не предлагаю мои АСМ вставки обсуждать, я тебе предлагаю показать СВОЙ СИ код, и потом его дизассемблировать, а вот потом ЗАДУШЕВНО поговорим
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482575#p4482575"]я тебе предлагаю показать СВОЙ СИ код, и потом его дизассемблировать[/uquote]
С какой целью?
Ты вообще отдаешь себе отчет в том, что ты предлагаешь незнакомому тебе ВЕСЬМА ЗАНЯТОМУ человеку проделать ряд действий, смысл которых ему не ясен?
Но если ты жаждешь что либо увидеть, то я не жадный:
С какой целью?
Ты вообще отдаешь себе отчет в том, что ты предлагаешь незнакомому тебе ВЕСЬМА ЗАНЯТОМУ человеку проделать ряд действий, смысл которых ему не ясен?
Но если ты жаждешь что либо увидеть, то я не жадный:
Код: Выделить всё
void CalcTemperature(void) {
uint16_t resADC;
uint8_t i;
uint8_t tempCurr;
int16_t tempFIR=0;
static uint8_t index=0;
if(!flag.tempSensReady) return;
flag.tempSensReady=0;
resADC=(uint16_t)ADRESL+((uint16_t)ADRESH<<8);
tempCurr=(int8_t)((((((__int24)resADC*gainTempSens)/256)+offsetTempSens)/10)-8);
arrayTemp[index]=tempCurr;
index=(index+1)&0x7F;
for(i=0;i<128;i++) tempFIR+=(int16_t)arrayTemp[i];
temperature=(int8_t)(tempFIR>>7);
ADCON0bits.GO=1;
}
Спойлер
Код: Выделить всё
199: void CalcTemperature(void) {
200:
201: uint16_t resADC;
202: uint8_t i;
203: uint8_t tempCurr;
204: int16_t tempFIR=0;
5844 0E00 MOVLW 0x0
5846 0105 MOVLB 0x5
5848 6FD5 MOVWF CLCSELECT, BANKED
584A 0E00 MOVLW 0x0
584C 6FD4 MOVWF CLCDATA, BANKED
205: static uint8_t index=0;
206:
207: if(!flag.tempSensReady) return;
584E BA19 BTFSC 0x19, 5, ACCESS
5850 EF2C GOTO 0x5858
5852 F02C NOP
5854 EF2E GOTO 0x585C
5856 F02C NOP
5858 EF30 GOTO 0x5860
585A F02C NOP
585C EFC4 GOTO 0x5988
585E F02C NOP
208: flag.tempSensReady=0;
5860 9A19 BCF 0x19, 5, ACCESS
209: resADC=(uint16_t)ADRESL+((uint16_t)ADRESH<<8);
5862 0103 MOVLB 0x3
5864 51EB MOVF DMAnDCNTH, W, BANKED
5866 6E4B MOVWF HLVDCON1, ACCESS
5868 51EA MOVF DMAnDCNT, W, BANKED
586A 0105 MOVLB 0x5
586C 6FD1 MOVWF 0xD1, BANKED
586E C54B MOVFF 0x54B, 0x5D2
5870 F5D2 NOP
210: tempCurr=(int8_t)((((((__int24)resADC*gainTempSens)/256)+offsetTempSens)/10)-8);
5872 0E2E MOVLW 0x2E
5874 6EF6 MOVWF 0xFF6, ACCESS
5876 0E00 MOVLW 0x0
5878 6EF7 MOVWF 0xFF7, ACCESS
587A 0E2C MOVLW 0x2C
587C 6EF8 MOVWF 0xFF8, ACCESS
587E 0009 TBLRD*+
5882 F3D4 NOP
5884 F54B NOP
5886 0009 TBLRD*+
588A F3D4 NOP
588C F54C NOP
588E 0E00 MOVLW 0x0
5890 6E43 MOVWF NVMADR, ACCESS
5892 0E01 MOVLW 0x1
5894 6E44 MOVWF NVMADRH, ACCESS
5896 0E00 MOVLW 0x0
5898 6E45 MOVWF NVMADRU, ACCESS
589A 0E2A MOVLW 0x2A
589C 6EF6 MOVWF 0xFF6, ACCESS
589E 0E00 MOVLW 0x0
58A0 6EF7 MOVWF 0xFF7, ACCESS
58A2 0E2C MOVLW 0x2C
58A4 6EF8 MOVWF 0xFF8, ACCESS
58A6 0009 TBLRD*+
58AA F3D4 NOP
58AC F54D NOP
58AE 0009 TBLRD*+
58B2 F3D4 NOP
58B4 F54E NOP
58B6 C54D MOVFF 0x54D, multiplicand
58B8 F53A NOP
58BA C54E MOVFF 0x54E, counter
58BC F53B NOP
58BE 6A3C CLRF 0x3C, ACCESS
58C0 BE3B BTFSC 0x3B, 7, ACCESS
58C2 063C DECF 0x3C, F, ACCESS
58C4 C5D1 MOVFF resADC, dividend
58C6 F537 NOP
58C8 C5D2 MOVFF 0x5D2, key
58CA F538 NOP
58CC 6A39 CLRF CLKRCON, ACCESS
58CE EC08 CALL 0x6810, 0
58D0 F034 NOP
58D2 C537 MOVFF dividend, dividend
58D4 F540 NOP
58D6 C538 MOVFF key, 0x541
58D8 F541 NOP
58DA C539 MOVFF divisor, 0x542
58DC F542 NOP
58DE EC3A CALL 0x5C74, 0
58E0 F02E NOP
58E2 504B MOVF HLVDCON1, W, ACCESS
58E4 2440 ADDWF NVMCON0, W, ACCESS
58E6 0105 MOVLB 0x5
58E8 6FCE MOVWF 0xCE, BANKED
58EA 504C MOVF ZCDCON, W, ACCESS
58EC 2041 ADDWFC NVMCON1, W, ACCESS
58EE 6FCF MOVWF 0xCF, BANKED
58F0 0E00 MOVLW 0x0
58F2 BE4C BTFSC ZCDCON, 7, ACCESS
58F4 0EFF MOVLW 0xFF
58F6 2042 ADDWFC NVMLOCK, W, ACCESS
58F8 6FD0 MOVWF 0xD0, BANKED
58FA C5CE MOVFF __pcstackBANK5, dividend
58FC F540 NOP
58FE C5CF MOVFF 0x5CF, 0x541
5900 F541 NOP
5902 C5D0 MOVFF tempFreqMode, 0x542
5904 F542 NOP
5906 0E0A MOVLW 0xA
5908 6E43 MOVWF NVMADR, ACCESS
590A 0E00 MOVLW 0x0
590C 6E44 MOVWF NVMADRH, ACCESS
590E 0E00 MOVLW 0x0
5910 6E45 MOVWF NVMADRU, ACCESS
5912 EC3A CALL 0x5C74, 0
5914 F02E NOP
5916 5040 MOVF NVMCON0, W, ACCESS
5918 0FF8 ADDLW 0xF8
591A 0105 MOVLB 0x5
591C 6FD3 MOVWF 0xD3, BANKED
213: arrayTemp[index]=tempCurr;
591E 0E00 MOVLW 0x0
5920 2412 ADDWF 0x12, W, ACCESS
5922 6ED9 MOVWF 0xFD9, ACCESS
5924 6ADA CLRF 0xFDA, ACCESS
5926 0E08 MOVLW 0x8
5928 22DA ADDWFC 0xFDA, F, ACCESS
592C F74C NOP
592E F4DF NOP
214: index=(index+1)&0x7F;
5930 2812 INCF 0x12, W, ACCESS
5932 0B7F ANDLW 0x7F
5934 6E12 MOVWF 0x12, ACCESS
215: for(i=0;i<128;i++) tempFIR+=(int16_t)arrayTemp[i];
5936 0E00 MOVLW 0x0
5938 6FD6 MOVWF CLCnCON, BANKED
593A 0E00 MOVLW 0x0
593C 25D6 ADDWF CLCnCON, W, BANKED
593E 6ED9 MOVWF 0xFD9, ACCESS
5940 6ADA CLRF 0xFDA, ACCESS
5942 0E08 MOVLW 0x8
5944 22DA ADDWFC 0xFDA, F, ACCESS
5946 50DF MOVF 0xFDF, W, ACCESS
5948 6E4B MOVWF HLVDCON1, ACCESS
594A 504B MOVF HLVDCON1, W, ACCESS
594C 27D4 ADDWF CLCDATA, F, BANKED
594E 0E00 MOVLW 0x0
5950 BE4B BTFSC HLVDCON1, 7, ACCESS
5952 0EFF MOVLW 0xFF
5954 23D5 ADDWFC CLCSELECT, F, BANKED
5956 2BD6 INCF CLCnCON, F, BANKED
5958 0E7F MOVLW 0x7F
595A 65D6 CPFSGT CLCnCON, BANKED
595C EFB2 GOTO 0x5964
595E F02C NOP
5960 EFB4 GOTO 0x5968
5962 F02C NOP
5964 EF9D GOTO 0x593A
5966 F02C NOP
216: temperature=(int8_t)(tempFIR>>7);
5968 C5D4 MOVFF tempFIR, 0x54B
596A F54B NOP
596C C5D5 MOVFF 0x5D5, 0x54C
596E F54C NOP
5970 0E07 MOVLW 0x7
5972 6E4D MOVWF 0x4D, ACCESS
5974 344C RLCF ZCDCON, W, ACCESS
5976 324C RRCF ZCDCON, F, ACCESS
5978 324B RRCF HLVDCON1, F, ACCESS
597A 2E4D DECFSZ 0x4D, F, ACCESS
597C EFBA GOTO 0x5974
597E F02C NOP
5980 504B MOVF HLVDCON1, W, ACCESS
5982 6E2A MOVWF 0x2A, ACCESS
217:
218: ADCON0bits.GO=1;
5984 0103 MOVLB 0x3
5986 81F3 BSF DMAnSCNTH, 0, BANKED
219: }
5988 0012 RETURN 0
- Сообщения: 12867
- Зарегистрирован: Сб дек 18, 2021 19:25:32
удивительно, а я вот не могу Си сразу дизассемблировать
странно, пациент всех обозвал, но продолжает тут быть и что-то ещё требует с обещанием бесед капслоком... осень - она такая.
странно, пациент всех обозвал, но продолжает тут быть и что-то ещё требует с обещанием бесед капслоком... осень - она такая.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482522#p4482522"]... а вот PIC32MX120F032B-I/ML, которые купил до СВО в том-же chipdip.by по доллару за штуку (больше 20-ти)
- уже использовал в поворотниках для авто (для линейки WS281х) - вот те работают
[/uquote]
Я конечно дико извиняюсь, а в чём сакральный смысл применения 32-х разрядного процессора в реле поворотов ?
Спрашиваю так, с интереса.
- уже использовал в поворотниках для авто (для линейки WS281х) - вот те работают
Я конечно дико извиняюсь, а в чём сакральный смысл применения 32-х разрядного процессора в реле поворотов ?
Спрашиваю так, с интереса.
- Сообщения: 160
- Зарегистрирован: Пт мар 29, 2013 23:53:14
[uquote="КРАМ",url="/forum/viewtopic.php?p=4482590#p4482590"][uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482575#p4482575"]я тебе предлагаю показать СВОЙ СИ код, и потом его дизассемблировать[/uquote]
С какой целью?
Ты вообще отдаешь себе отчет в том, что ты предлагаешь незнакомому тебе ВЕСЬМА ЗАНЯТОМУ человеку проделать ряд действий, смысл которых ему не ясен?
Но если ты жаждешь что либо увидеть, то я не жадный:
[/uquote]
давай разберём твою левую функцию:
void CalcTemperature(void) {
uint16_t resADC;
uint8_t i;
uint8_t tempCurr;
int16_t tempFIR=0;
static uint8_t index=0;
if(!flag.tempSensReady) return; // ну тут понятно - некие флаги, которые ты назначил :)
flag.tempSensReady=0;
resADC=(uint16_t)ADRESL+((uint16_t)ADRESH<<8);
// некрасиво написал, так даже двоечники не пишут:
resADC=(uint16_t)(ADRESL + ADRESH<<8);
tempCurr=(int8_t)((((((__int24)resADC*gainTempSens)/256)+offsetTempSens)/10)-8);
// ну будем считать, что "resADC" перевёл в значение "uint24_t" - ну добавил 8 нулевых бит, и что????
"gainTempSens" я во первых - не вижу - какого "разрешения" :)
ну и дальше - некие непонятные: деления/умножения/прибавления/ и т.д....
Ты хотя-бы приведи значения того говна, которое используешь :)
/*
arrayTemp[index]=tempCurr;
index=(index+1)&0x7F;
for(i=0;i<128;i++) tempFIR+=(int16_t)arrayTemp;
temperature=(int8_t)(tempFIR>>7);
ADCON0bits.GO=1;
*/
т.е. ты произвёл КУЧУ бесполезных ПОДВЫПЕНДРОСОВ, чтобы в конце запустить ОДНОКРАТНОЕ измерение :) :) :)
и даже не проверить - прочитал ты АЦП или НЕТ????
А в чём смысл твоего ПОНОСА ? :) ?
}
С какой целью?
Ты вообще отдаешь себе отчет в том, что ты предлагаешь незнакомому тебе ВЕСЬМА ЗАНЯТОМУ человеку проделать ряд действий, смысл которых ему не ясен?
Но если ты жаждешь что либо увидеть, то я не жадный:
Код: Выделить всё
void CalcTemperature(void) {
uint16_t resADC;
uint8_t i;
uint8_t tempCurr;
int16_t tempFIR=0;
static uint8_t index=0;
if(!flag.tempSensReady) return;
flag.tempSensReady=0;
resADC=(uint16_t)ADRESL+((uint16_t)ADRESH<<8);
tempCurr=(int8_t)((((((__int24)resADC*gainTempSens)/256)+offsetTempSens)/10)-8);
arrayTemp[index]=tempCurr;
index=(index+1)&0x7F;
for(i=0;i<128;i++) tempFIR+=(int16_t)arrayTemp[i];
temperature=(int8_t)(tempFIR>>7);
ADCON0bits.GO=1;
}
Спойлер
Код: Выделить всё
199: void CalcTemperature(void) {
200:
201: uint16_t resADC;
202: uint8_t i;
203: uint8_t tempCurr;
204: int16_t tempFIR=0;
5844 0E00 MOVLW 0x0
5846 0105 MOVLB 0x5
5848 6FD5 MOVWF CLCSELECT, BANKED
584A 0E00 MOVLW 0x0
584C 6FD4 MOVWF CLCDATA, BANKED
205: static uint8_t index=0;
206:
207: if(!flag.tempSensReady) return;
584E BA19 BTFSC 0x19, 5, ACCESS
5850 EF2C GOTO 0x5858
5852 F02C NOP
5854 EF2E GOTO 0x585C
5856 F02C NOP
5858 EF30 GOTO 0x5860
585A F02C NOP
585C EFC4 GOTO 0x5988
585E F02C NOP
208: flag.tempSensReady=0;
5860 9A19 BCF 0x19, 5, ACCESS
209: resADC=(uint16_t)ADRESL+((uint16_t)ADRESH<<8);
5862 0103 MOVLB 0x3
5864 51EB MOVF DMAnDCNTH, W, BANKED
5866 6E4B MOVWF HLVDCON1, ACCESS
5868 51EA MOVF DMAnDCNT, W, BANKED
586A 0105 MOVLB 0x5
586C 6FD1 MOVWF 0xD1, BANKED
586E C54B MOVFF 0x54B, 0x5D2
5870 F5D2 NOP
210: tempCurr=(int8_t)((((((__int24)resADC*gainTempSens)/256)+offsetTempSens)/10)-8);
5872 0E2E MOVLW 0x2E
5874 6EF6 MOVWF 0xFF6, ACCESS
5876 0E00 MOVLW 0x0
5878 6EF7 MOVWF 0xFF7, ACCESS
587A 0E2C MOVLW 0x2C
587C 6EF8 MOVWF 0xFF8, ACCESS
587E 0009 TBLRD*+
5882 F3D4 NOP
5884 F54B NOP
5886 0009 TBLRD*+
588A F3D4 NOP
588C F54C NOP
588E 0E00 MOVLW 0x0
5890 6E43 MOVWF NVMADR, ACCESS
5892 0E01 MOVLW 0x1
5894 6E44 MOVWF NVMADRH, ACCESS
5896 0E00 MOVLW 0x0
5898 6E45 MOVWF NVMADRU, ACCESS
589A 0E2A MOVLW 0x2A
589C 6EF6 MOVWF 0xFF6, ACCESS
589E 0E00 MOVLW 0x0
58A0 6EF7 MOVWF 0xFF7, ACCESS
58A2 0E2C MOVLW 0x2C
58A4 6EF8 MOVWF 0xFF8, ACCESS
58A6 0009 TBLRD*+
58AA F3D4 NOP
58AC F54D NOP
58AE 0009 TBLRD*+
58B2 F3D4 NOP
58B4 F54E NOP
58B6 C54D MOVFF 0x54D, multiplicand
58B8 F53A NOP
58BA C54E MOVFF 0x54E, counter
58BC F53B NOP
58BE 6A3C CLRF 0x3C, ACCESS
58C0 BE3B BTFSC 0x3B, 7, ACCESS
58C2 063C DECF 0x3C, F, ACCESS
58C4 C5D1 MOVFF resADC, dividend
58C6 F537 NOP
58C8 C5D2 MOVFF 0x5D2, key
58CA F538 NOP
58CC 6A39 CLRF CLKRCON, ACCESS
58CE EC08 CALL 0x6810, 0
58D0 F034 NOP
58D2 C537 MOVFF dividend, dividend
58D4 F540 NOP
58D6 C538 MOVFF key, 0x541
58D8 F541 NOP
58DA C539 MOVFF divisor, 0x542
58DC F542 NOP
58DE EC3A CALL 0x5C74, 0
58E0 F02E NOP
58E2 504B MOVF HLVDCON1, W, ACCESS
58E4 2440 ADDWF NVMCON0, W, ACCESS
58E6 0105 MOVLB 0x5
58E8 6FCE MOVWF 0xCE, BANKED
58EA 504C MOVF ZCDCON, W, ACCESS
58EC 2041 ADDWFC NVMCON1, W, ACCESS
58EE 6FCF MOVWF 0xCF, BANKED
58F0 0E00 MOVLW 0x0
58F2 BE4C BTFSC ZCDCON, 7, ACCESS
58F4 0EFF MOVLW 0xFF
58F6 2042 ADDWFC NVMLOCK, W, ACCESS
58F8 6FD0 MOVWF 0xD0, BANKED
58FA C5CE MOVFF __pcstackBANK5, dividend
58FC F540 NOP
58FE C5CF MOVFF 0x5CF, 0x541
5900 F541 NOP
5902 C5D0 MOVFF tempFreqMode, 0x542
5904 F542 NOP
5906 0E0A MOVLW 0xA
5908 6E43 MOVWF NVMADR, ACCESS
590A 0E00 MOVLW 0x0
590C 6E44 MOVWF NVMADRH, ACCESS
590E 0E00 MOVLW 0x0
5910 6E45 MOVWF NVMADRU, ACCESS
5912 EC3A CALL 0x5C74, 0
5914 F02E NOP
5916 5040 MOVF NVMCON0, W, ACCESS
5918 0FF8 ADDLW 0xF8
591A 0105 MOVLB 0x5
591C 6FD3 MOVWF 0xD3, BANKED
213: arrayTemp[index]=tempCurr;
591E 0E00 MOVLW 0x0
5920 2412 ADDWF 0x12, W, ACCESS
5922 6ED9 MOVWF 0xFD9, ACCESS
5924 6ADA CLRF 0xFDA, ACCESS
5926 0E08 MOVLW 0x8
5928 22DA ADDWFC 0xFDA, F, ACCESS
592C F74C NOP
592E F4DF NOP
214: index=(index+1)&0x7F;
5930 2812 INCF 0x12, W, ACCESS
5932 0B7F ANDLW 0x7F
5934 6E12 MOVWF 0x12, ACCESS
215: for(i=0;i<128;i++) tempFIR+=(int16_t)arrayTemp[i];
5936 0E00 MOVLW 0x0
5938 6FD6 MOVWF CLCnCON, BANKED
593A 0E00 MOVLW 0x0
593C 25D6 ADDWF CLCnCON, W, BANKED
593E 6ED9 MOVWF 0xFD9, ACCESS
5940 6ADA CLRF 0xFDA, ACCESS
5942 0E08 MOVLW 0x8
5944 22DA ADDWFC 0xFDA, F, ACCESS
5946 50DF MOVF 0xFDF, W, ACCESS
5948 6E4B MOVWF HLVDCON1, ACCESS
594A 504B MOVF HLVDCON1, W, ACCESS
594C 27D4 ADDWF CLCDATA, F, BANKED
594E 0E00 MOVLW 0x0
5950 BE4B BTFSC HLVDCON1, 7, ACCESS
5952 0EFF MOVLW 0xFF
5954 23D5 ADDWFC CLCSELECT, F, BANKED
5956 2BD6 INCF CLCnCON, F, BANKED
5958 0E7F MOVLW 0x7F
595A 65D6 CPFSGT CLCnCON, BANKED
595C EFB2 GOTO 0x5964
595E F02C NOP
5960 EFB4 GOTO 0x5968
5962 F02C NOP
5964 EF9D GOTO 0x593A
5966 F02C NOP
216: temperature=(int8_t)(tempFIR>>7);
5968 C5D4 MOVFF tempFIR, 0x54B
596A F54B NOP
596C C5D5 MOVFF 0x5D5, 0x54C
596E F54C NOP
5970 0E07 MOVLW 0x7
5972 6E4D MOVWF 0x4D, ACCESS
5974 344C RLCF ZCDCON, W, ACCESS
5976 324C RRCF ZCDCON, F, ACCESS
5978 324B RRCF HLVDCON1, F, ACCESS
597A 2E4D DECFSZ 0x4D, F, ACCESS
597C EFBA GOTO 0x5974
597E F02C NOP
5980 504B MOVF HLVDCON1, W, ACCESS
5982 6E2A MOVWF 0x2A, ACCESS
217:
218: ADCON0bits.GO=1;
5984 0103 MOVLB 0x3
5986 81F3 BSF DMAnSCNTH, 0, BANKED
219: }
5988 0012 RETURN 0
давай разберём твою левую функцию:
void CalcTemperature(void) {
uint16_t resADC;
uint8_t i;
uint8_t tempCurr;
int16_t tempFIR=0;
static uint8_t index=0;
if(!flag.tempSensReady) return; // ну тут понятно - некие флаги, которые ты назначил :)
flag.tempSensReady=0;
resADC=(uint16_t)ADRESL+((uint16_t)ADRESH<<8);
// некрасиво написал, так даже двоечники не пишут:
resADC=(uint16_t)(ADRESL + ADRESH<<8);
tempCurr=(int8_t)((((((__int24)resADC*gainTempSens)/256)+offsetTempSens)/10)-8);
// ну будем считать, что "resADC" перевёл в значение "uint24_t" - ну добавил 8 нулевых бит, и что????
"gainTempSens" я во первых - не вижу - какого "разрешения" :)
ну и дальше - некие непонятные: деления/умножения/прибавления/ и т.д....
Ты хотя-бы приведи значения того говна, которое используешь :)
/*
arrayTemp[index]=tempCurr;
index=(index+1)&0x7F;
for(i=0;i<128;i++) tempFIR+=(int16_t)arrayTemp;
temperature=(int8_t)(tempFIR>>7);
ADCON0bits.GO=1;
*/
т.е. ты произвёл КУЧУ бесполезных ПОДВЫПЕНДРОСОВ, чтобы в конце запустить ОДНОКРАТНОЕ измерение :) :) :)
и даже не проверить - прочитал ты АЦП или НЕТ????
А в чём смысл твоего ПОНОСА ? :) ?
}
- Сообщения: 12867
- Зарегистрирован: Сб дек 18, 2021 19:25:32
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485799#p4485799"]// некрасиво написал, так даже двоечники не пишут:
resADC=(uint16_t)(ADRESL + ADRESH<<8);[/uquote]
представляю, что же за говно в тех огромных портянках на нерасшареных ресурсах....
resADC=(uint16_t)(ADRESL + ADRESH<<8);[/uquote]
представляю, что же за говно в тех огромных портянках на нерасшареных ресурсах....
- Сообщения: 160
- Зарегистрирован: Пт мар 29, 2013 23:53:14
[uquote="Martian",url="/forum/viewtopic.php?p=4485824#p4485824"][uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485799#p4485799"]// некрасиво написал, так даже двоечники не пишут:
resADC=(uint16_t)(ADRESL + ADRESH<<8);[/uquote]
:facepalm:
представляю, что же за говно в тех огромных портянках на нерасшареных ресурсах....[/uquote]
Я так понимаю - у Вас есть более красивый код :)
А иначе - Вы бы тут не светились :)
дык покажите :)
А я посмотрю ...
Добавлено after 18 minutes 52 seconds:
Для тех, ктоне знает пик и его файл "C:\Program Files\Microchip\xc8\ и т.д. - там есть описание - что и за чем ....
А вот что там у тебя нерасшарено - это нужно смотреть :)
resADC=(uint16_t)(ADRESL + ADRESH<<8);[/uquote]
:facepalm:
представляю, что же за говно в тех огромных портянках на нерасшареных ресурсах....[/uquote]
Я так понимаю - у Вас есть более красивый код :)
А иначе - Вы бы тут не светились :)
дык покажите :)
А я посмотрю ...
Добавлено after 18 minutes 52 seconds:
Для тех, ктоне знает пик и его файл "C:\Program Files\Microchip\xc8\ и т.д. - там есть описание - что и за чем ....
А вот что там у тебя нерасшарено - это нужно смотреть :)
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485799#p4485799"]if(!flag.tempSensReady) return; // ну тут понятно - некие флаги, которые ты назначил 
flag.tempSensReady=0;[/uquote]
Код рассчитан на людей, которые хотя бы чуть-чуть знают английский язык.
Ну и не совсем нубов в программировании.
Абисняю. АЦП работает с прерываниями. И в обработчике прерываний от АЦП взводится флаг готовности данных.
А представленная функция вызывается в главном цикле в порядке очередности. И первое что она делает, проверяет оный флаг. Если он не взведен, то немедленно выходит из функции.
Из кода очевидно, что есть глобально объявленная структура flag, у которой есть элемент tempSensReady. Имя этого элемента как бы намекает на то, что он отражает готовность данных температурного сенсора, который имеется в применяемом контроллере.
Бесплатный попутный совет. Не нужно писать комментарии там, где сам код может рассказать о себе достаточно для его понимания. Для этого код должен быть правильно написан, конечно...
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485799#p4485799"]resADC=(uint16_t)ADRESL+((uint16_t)ADRESH<<8);
// некрасиво написал, так даже двоечники не пишут:
resADC=(uint16_t)(ADRESL + ADRESH<<8);[/uquote]
То, что ты не знаком с Си от слова совсем уже давно всем очевидно. Но разберем все таки твои глупости.
Предложенный тобою код:
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485799#p4485799"]tempCurr=(int8_t)((((((__int24)resADC*gainTempSens)/256)+offsetTempSens)/10)-8);
// ну будем считать, что "resADC" перевёл в значение "uint24_t" - ну добавил 8 нулевых бит, и что????
"gainTempSens" я во первых - не вижу - какого "разрешения"
ну и дальше - некие непонятные: деления/умножения/прибавления/ и т.д....
Ты хотя-бы приведи значения того говна, которое используешь
[/uquote]
Ты просил привести не полный код, а фрагмент некоего кода с его дизасмом, чтобы что то там продемонстрировать. И для этого совершенно не требуется знать смысл приведенных арифметических выражений и значения используемых в них глобальных переменных. Хотя из названия этих неизвестных тебе переменных очевидно их назначение.
gainTempSens - это множитель к результату преобразования температурного сенсора.
offsetTempSens - это смещение результата преобразования температурного сенсора.
Обе этих переменных получают свои значения при инициализации МК посредством чтения из специальной нестираемой области флеша, куда производителем МК занесены калибровочные параметры температурного сенсора. Кстати, эти калибровочные параметры имеют созвучные применяемым переменным названия в даташите. Оба этих значения однобайтные для целочисленных вычислений.
Непонятая тобой формула так же приведена в даташите. Правда в традиционной алгебраической форме без учета разрядности применяемых величин. Но пользователь должен уметь программировать на Си, чтобы результат вычислений был достоверен.

Совершенно очевидно, что произведение 16-битной переменной с 8-битной В ОБЩЕМ СЛУЧАЕ даст 24-бита результата. Если явно не привести один из сомножителей к 24 битам, то результатом будет переполнение.
Но у тебя очевидно отсутствуют даже начальные знания Си, поэтому ты продолжаешь нас смешить своими глупостями.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485799#p4485799"]т.е. ты произвёл КУЧУ бесполезных ПОДВЫПЕНДРОСОВ, чтобы в конце запустить ОДНОКРАТНОЕ измерение
и даже не проверить - прочитал ты АЦП или НЕТ????[/uquote]
Вообще то ADRESH и ADRESL и есть регистры результата АЦП. Что мне надо проверять в функции, если я беру из них значения в самом начале?
ЗЫ. Дурачок, тебе не надоел твой позор?
И что ты там хотел сказать про ASM на основе моего дизасма? Или ты уже об этом забыл?
flag.tempSensReady=0;[/uquote]
Код рассчитан на людей, которые хотя бы чуть-чуть знают английский язык.
Ну и не совсем нубов в программировании.
Абисняю. АЦП работает с прерываниями. И в обработчике прерываний от АЦП взводится флаг готовности данных.
А представленная функция вызывается в главном цикле в порядке очередности. И первое что она делает, проверяет оный флаг. Если он не взведен, то немедленно выходит из функции.
Из кода очевидно, что есть глобально объявленная структура flag, у которой есть элемент tempSensReady. Имя этого элемента как бы намекает на то, что он отражает готовность данных температурного сенсора, который имеется в применяемом контроллере.
Бесплатный попутный совет. Не нужно писать комментарии там, где сам код может рассказать о себе достаточно для его понимания. Для этого код должен быть правильно написан, конечно...
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485799#p4485799"]resADC=(uint16_t)ADRESL+((uint16_t)ADRESH<<8);
// некрасиво написал, так даже двоечники не пишут:
resADC=(uint16_t)(ADRESL + ADRESH<<8);[/uquote]
То, что ты не знаком с Си от слова совсем уже давно всем очевидно. Но разберем все таки твои глупости.
Предложенный тобою код:
дословно будет выполнять следующее. Содержимое восьмибитного регистра ADRESH будет сдвинуто влево на восемь бит и результат этого сдвига будет очевидно равен НУЛЮ. То есть ты присвоил 16-битной локальной resADC значение только восьми младших бит 12-разрядного АЦП. 4 старших разряда пошли лесом.resADC=(uint16_t)(ADRESL + ADRESH<<8);
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485799#p4485799"]tempCurr=(int8_t)((((((__int24)resADC*gainTempSens)/256)+offsetTempSens)/10)-8);
// ну будем считать, что "resADC" перевёл в значение "uint24_t" - ну добавил 8 нулевых бит, и что????
"gainTempSens" я во первых - не вижу - какого "разрешения"
ну и дальше - некие непонятные: деления/умножения/прибавления/ и т.д....
Ты хотя-бы приведи значения того говна, которое используешь
Ты просил привести не полный код, а фрагмент некоего кода с его дизасмом, чтобы что то там продемонстрировать. И для этого совершенно не требуется знать смысл приведенных арифметических выражений и значения используемых в них глобальных переменных. Хотя из названия этих неизвестных тебе переменных очевидно их назначение.
gainTempSens - это множитель к результату преобразования температурного сенсора.
offsetTempSens - это смещение результата преобразования температурного сенсора.
Обе этих переменных получают свои значения при инициализации МК посредством чтения из специальной нестираемой области флеша, куда производителем МК занесены калибровочные параметры температурного сенсора. Кстати, эти калибровочные параметры имеют созвучные применяемым переменным названия в даташите. Оба этих значения однобайтные для целочисленных вычислений.
Непонятая тобой формула так же приведена в даташите. Правда в традиционной алгебраической форме без учета разрядности применяемых величин. Но пользователь должен уметь программировать на Си, чтобы результат вычислений был достоверен.
Совершенно очевидно, что произведение 16-битной переменной с 8-битной В ОБЩЕМ СЛУЧАЕ даст 24-бита результата. Если явно не привести один из сомножителей к 24 битам, то результатом будет переполнение.
Но у тебя очевидно отсутствуют даже начальные знания Си, поэтому ты продолжаешь нас смешить своими глупостями.
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4485799#p4485799"]т.е. ты произвёл КУЧУ бесполезных ПОДВЫПЕНДРОСОВ, чтобы в конце запустить ОДНОКРАТНОЕ измерение
и даже не проверить - прочитал ты АЦП или НЕТ????[/uquote]
Вообще то ADRESH и ADRESL и есть регистры результата АЦП. Что мне надо проверять в функции, если я беру из них значения в самом начале?
ЗЫ. Дурачок, тебе не надоел твой позор?
И что ты там хотел сказать про ASM на основе моего дизасма? Или ты уже об этом забыл?
- Сообщения: 160
- Зарегистрирован: Пт мар 29, 2013 23:53:14
А что? Дурачок уже висит, соображать не позволяет 
https://disk.yandex.ru/i/XGQ9jPhY1RVb2Q
PS: может я где-то пропустил твой АСМ, но если честно, то я его не видел
https://disk.yandex.ru/i/XGQ9jPhY1RVb2Q
PS: может я где-то пропустил твой АСМ, но если честно, то я его не видел


