Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Re: Програмирование pic на СИ.

Вс сен 24, 2023 11:45:17

Ага, ни в коем случае никакого Яндекса, только элитная помойка Гугл :)))

Re: Програмирование pic на СИ.

Вс сен 24, 2023 12:59:39

если СИ запрещает кому-то пользоваться ВСЕМИ хотелками микроконтроллера, то АСМ все запреты снимает.
Си никому ничего не запрещает. Просто нужно уметь им пользоваться и читать мануалы, а не фантазировать.
Только ЗАСАДА - она и осталась :) Куча переключений банков ОЗУ, из-за которых, если нужно написать ЧЁТКИЙ-ТОЧНЫЙ тайминг - то не получиться :( нужны вставки на АСМ.

"Чёткий-точный" тайминг на Си и без банков не получится. А писать тогда лучше всё на АСМе.
Да ладно вставки, память читать всё равно нет возможности, да и как она появится, если прямой доступ к памяти - это регистры TBLPTRx и TABLAT, а это уже серия пик18.

Чушь изволите писать, милейший... В не самых старых PIC16 и PIC12 с адреса 0x2000 отображено ЛИНЕЙНОЕ пространство ОЗУ, а с адреса 0x8000 младшие байты флеша. Табличный доступ к флешу имеется во всех не самых старых PIC12/PIC16.
Да и 14-ти битный адрес к памяти флешь - это тоже "энтузязизма" не добавляет ... когда старший адрес может быть только до 0x3F ...
Вот поэтому, и нет смысла читать старший адрес программной памяти

:facepalm: Это тупой бред. Ты бездарно путаешь РАЗРЯДНОСТЬ флеша, с размером флеша. Разрядность адреса определяется размером флеша. И только. Так происходит во всех без исключениях контроллерах и процессорах любой разрядности и любого производителя. Возьми любой ARM - там тоже самое. Более того, 32-разрядный адрес перекрывает все пространство ФРАГМЕНТАМИ. То есть доступная память находится на определенных участках полного диапазона адресов.
Читать старший неполный байт флеша есть прямой резон тогда, когда табличные значения требуются выше 8 разрядов, но ниже 15. Под размерность 14 разрядов всегда можно подогнать коэффициенты фильтров, например.
В моём понятии - мелкий, это частота не более 8-ми МИпс, памячти почти НОЛЬ, но есть несколько аппаратных модулей, которые можно использовать, к примеру, для связи с иммо от WV :)
Ну можно ещё взять м/с типа DS1307, DS1338, MCP7941x и сделать добротные часики - прицепить ещё солнечную панель, аккум типа 16850, и можно сказать - почти на всю жизнь
Главное - правильно программу написать, чтобы аккум не всё время заряжался, а по мере необходимости.

Есть куча внешне простых задач, которые используют ресурсы МК на 100%. Например, DDS в программной реализации для МК в котором нет модуля NCO. Таким образом, можно на 8-ногом МК генерировать синус-ШИМ с линейной сеткой частот в 0,1 Гц.
А что? здесь есть файлообменник, который вкурит от 700 МГбайт и выше ? Чёт я сумневаюсь
А кто хочет, тот и нерасшаренный скачает

Что такого ты хочешь поведать миру с объемом в 700 метров? :))) :))) :)))
Кому нахер сдались твои поделия? Научись излагать свои мысли лаконично и сопровождать их примерами УЧАСТКОВ кода в тегах code. Твои программные портянки тут никому не нужны.

Re: Програмирование pic на СИ.

Пн сен 25, 2023 09:29:44

...Научись излагать свои мысли лаконично и сопровождать их примерами УЧАСТКОВ кода в тегах code. Твои программные портянки тут никому не нужны.

+1000 Вот еще из очень риторического, с послевкусием мании величия:
...Я что? ЛОХ свою инфу разбрасывать по всей интернетовской помойке? Да она завтра будет доступна последнему бомжу...

:)))

Re: Програмирование pic на СИ.

Чт сен 28, 2023 22:10:38

Ага, ни в коем случае никакого Яндекса, только элитная помойка Гугл :)))


Ты САМ то понял - чего написал ?

Добавлено after 4 minutes 37 seconds:
если СИ запрещает кому-то пользоваться ВСЕМИ хотелками микроконтроллера, то АСМ все запреты снимает.
Си никому ничего не запрещает. Просто нужно уметь им пользоваться и читать мануалы, а не фантазировать.
Только ЗАСАДА - она и осталась :) Куча переключений банков ОЗУ, из-за которых, если нужно написать ЧЁТКИЙ-ТОЧНЫЙ тайминг - то не получиться :( нужны вставки на АСМ.

"Чёткий-точный" тайминг на Си и без банков не получится. А писать тогда лучше всё на АСМе.
Да ладно вставки, память читать всё равно нет возможности, да и как она появится, если прямой доступ к памяти - это регистры TBLPTRx и TABLAT, а это уже серия пик18.

Чушь изволите писать, милейший... В не самых старых PIC16 и PIC12 с адреса 0x2000 отображено ЛИНЕЙНОЕ пространство ОЗУ, а с адреса 0x8000 младшие байты флеша. Табличный доступ к флешу имеется во всех не самых старых PIC12/PIC16.
Да и 14-ти битный адрес к памяти флешь - это тоже "энтузязизма" не добавляет ... когда старший адрес может быть только до 0x3F ...
Вот поэтому, и нет смысла читать старший адрес программной памяти

:facepalm: Это тупой бред. Ты бездарно путаешь РАЗРЯДНОСТЬ флеша, с размером флеша. Разрядность адреса определяется размером флеша. И только. Так происходит во всех без исключениях контроллерах и процессорах любой разрядности и любого производителя. Возьми любой ARM - там тоже самое. Более того, 32-разрядный адрес перекрывает все пространство ФРАГМЕНТАМИ. То есть доступная память находится на определенных участках полного диапазона адресов.
Читать старший неполный байт флеша есть прямой резон тогда, когда табличные значения требуются выше 8 разрядов, но ниже 15. Под размерность 14 разрядов всегда можно подогнать коэффициенты фильтров, например.
В моём понятии - мелкий, это частота не более 8-ми МИпс, памячти почти НОЛЬ, но есть несколько аппаратных модулей, которые можно использовать, к примеру, для связи с иммо от WV :)
Ну можно ещё взять м/с типа DS1307, DS1338, MCP7941x и сделать добротные часики - прицепить ещё солнечную панель, аккум типа 16850, и можно сказать - почти на всю жизнь
Главное - правильно программу написать, чтобы аккум не всё время заряжался, а по мере необходимости.

Есть куча внешне простых задач, которые используют ресурсы МК на 100%. Например, DDS в программной реализации для МК в котором нет модуля NCO. Таким образом, можно на 8-ногом МК генерировать синус-ШИМ с линейной сеткой частот в 0,1 Гц.
А что? здесь есть файлообменник, который вкурит от 700 МГбайт и выше ? Чёт я сумневаюсь
А кто хочет, тот и нерасшаренный скачает

Что такого ты хочешь поведать миру с объемом в 700 метров? :))) :))) :)))
Кому нахер сдались твои поделия? Научись излагать свои мысли лаконично и сопровождать их примерами УЧАСТКОВ кода в тегах code. Твои программные портянки тут никому не нужны.


Завтра кину Вам файл, где будет работа с тем-же простым 1602, где разница в работе между асм и си будет ЯВНО очевидна.
И вы её не сможете исправить, кроме как через АСМ :)

Добавлено after 44 minutes 26 seconds:
https://disk.yandex.ru/d/XyseVQnLnX6n2w

Добавлено after 29 minutes 4 seconds:
Знаете ребята ... :)
Есть такое понятие - кто-то что-то делает, а кто-то отсасыв*ет и плывёт как гов*о по течению форума :)
Так вот когда вы меня минусуете ( :) ), то не забывайте - что ВЫ себя минусуете :)
Вы же ЛОХИ, а вами ведуют ДВА так-сяк знающих .... но они для вас ЭТАЛОН - типа ведущие для быдло :)
А не пытались своё мнение и прошивки писать, и возразить этим ?
А в идеале - просто не посещать этот форум - он через год сам загнётся :)

Re: Програмирование pic на СИ.

Пт сен 29, 2023 00:33:49

Завтра кину Вам файл, где будет работа с тем-же простым 1602, где разница в работе между асм и си будет ЯВНО очевидна.
И вы её не сможете исправить, кроме как через АСМ

:facepalm: :))) :))) :)))
Твое "эпохальное" достижение состоит в том, что ты отказался от установки банка в функции и сделал ее использование зависимым от контекста.
Ничего более тупого ты не мог изобразить? :music:
он через год сам загнётся

Пока на форум ходят такие клоуны как ты, ему ничего не грозит. Всегда найдутся зрители для поржать. :tea:

Re: Програмирование pic на СИ.

Пт сен 29, 2023 01:05:51

Пока форумом заведуют КЛОУНЫ, которые друг с другом повязаны, тут нехер делать.

Re: Програмирование pic на СИ.

Пт сен 29, 2023 04:33:33

Тут ни одного "заведующего'" этим форумом не появлялось. Все, кто тут тебе отвечал, реагировали лишь на содержание твоих сообщений. Измени содержание ( и форму, кстати, тоже) и все будет пучком.
Твои глупости универсальны и не зависят от коллектива. Поэтому на любом форуме тебя постигнет идентичная судьба.

Re: Програмирование pic на СИ.

Пт сен 29, 2023 09:58:11

Тут ни одного "заведующего'" этим форумом не появлялось. Все, кто тут тебе отвечал, реагировали лишь на содержание твоих сообщений. Измени содержание ( и форму, кстати, тоже) и все будет пучком.
Твои глупости универсальны и не зависят от коллектива. Поэтому на любом форуме тебя постигнет идентичная судьба.


Ну тогда ответь на свои-же цитаты от "Чт сен 28, 2023 22:10:38", только не голословно, а с примерами, желательно и на СИ и на АСМ :)
Можно ЧИСТЫМ исходником, а можно и скринами :)

По поводу "постигнет идентичная судьба" :) ну если попадутся аналогичные тебе, то да :)
А если люди умеют оценивать - то, что написано, и соответствует или нет реальному коду, то вопросов не должно возникнуть :)

А я не любитель сидеть на форумах, и кому-то что-то доказывать :) Достаточно скрина, чтобы чел аналогичное проверил у себя в прошивке, и сказал - правда или пиз*ёж :) Кстати, жду -когда покажешь -
можно чисто на СИ работать без лишних команд (пик16, пик18), или это ЧИСТО ВЫПЁНДРЁЖЬ перед участниками форума ?
А я пишу от пик10 до пик32, сейчас в наличии лежит модуль "PIC32-HMZ144", купленный может года два-три назад в официальном chipdip.by :) .. ну поморгал светодиодом (не тем, который в оригинальном комплекте идёт в качестве примера, а совим), ну пока больше применить негде, а вот PIC32MX120F032B-I/ML, которые купил до СВО в том-же chipdip.by по доллару за штуку (больше 20-ти) - уже
использовал в поворотниках для авто (для линейки WS281х) - вот те работают :)

Re: Програмирование pic на СИ.

Пт сен 29, 2023 12:09:54

Ну тогда ответь на свои-же цитаты от "Чт сен 28, 2023 22:10:38", только не голословно, а с примерами, желательно и на СИ и на АСМ
Можно ЧИСТЫМ исходником, а можно и скринами

Ты предлагаешь мне показать ТВОИ скрины? :)))
Душевный ты наш, ты сам в состоянии посмотреть на собственный код и убедиться в том, что в твоих ASM-вставках отсутствует выбор банка при ногодрыге стробом. Что ты еще желаешь увидеть? Ты тупо сделал детскую ошибку. Причем тут мой код и мои скрины? То есть, если перед вызовом функции строба по каким либо причинам банк будет отличен от нулевого, то твой код будет фуфлом и никакого строба на выходе не будет.
Однако, я канешна понимаю, что ты вызываешь строб исключительно после вывода в линии данных и банк по любому будет нулевым. Но тогда ответь мне на простой вопрос. Напуркуа ты вообще выделил строб в отдельную функцию? Если ты такой "экономист" в машинных циклах и негодуешь по поводу двух лишних инструкций сгенерированных компилятором, то нахера ты, такой весь умный и шоколадный, создал ЧЕТЫРЕ машинных цикла вызова функции и выхода из нее (по две на каждую инструкцию), вместо того, что бы логично написать этот строб прямо в функции вывода данных?
:))) :))) :)))
И что мы имеем в результате? А имеем мы только твою пустопорожнюю болтовню и бахвальство.
И это я не упомянул, что все твои извращения с циклами нах ни кому не облокотились, ибо в инициализации не бывает критического кода.
Ну и если ты любишь минимализм, - пиши на чистом АСМе. У меня, например, почти все проекты на продукции Микрочипа написаны на АСМе. Без Си. Включая проекты на dsPIC33, включая двухядерные dsPIC33.
Вот тогда ты будешь истинным пацаком в красных штанах... :music:
Достаточно скрина, чтобы чел аналогичное проверил у себя в прошивке, и сказал - .... это ЧИСТО ВЫПЁНДРЁЖЬ перед участниками форума ?

И это чистая правда. Единственной причиной твоей местной болтовни является ТВОЙ ВЫПЕНДРЕЖ. Причем безграмотный.
И к этому список твоих "достижений" в ПИКах никакого отношения не имеет. Ибо есть все основания полагать, что в них понатыканы аналогичные глупости. И не важно работает твой быдлокод или нет. Его проблема в том, что в нем разбросаны ошибки, которые всплывут, как только потребуется отклониться от твоего кода, взяв лишь фрагмент.
Последний раз редактировалось КРАМ Пт сен 29, 2023 12:17:39, всего редактировалось 1 раз.

Re: Програмирование pic на СИ.

Пт сен 29, 2023 12:16:40

Лень искать видео, где есть все режимы для авто: повороты, габариты, тормоза, проблесковые маячки, несколько сигналов "Police".
В проект я их не вложил, а в Россию точно отправлял как наглядное пособие.
В архиве, пару вариантов видео, и первая плата :)
https://disk.yandex.ru/d/mGWBbRtD2oFL-w

PS: я никогда не говорю о том, что не проверил лично :)

Ещё раз повторюсь - на пик16 НИЧЕГО вменяемого не напишешь под современные нужды.
А вот как КРАМ может обходить уловки от СИ и писать практически как на АСМ - мы скоро узнаем :) ... ну он же не бросает слов на ветер ?!? он покажет ....

Re: Програмирование pic на СИ.

Пт сен 29, 2023 12:20:40

А вот как КРАМ может обходить уловки от СИ и писать практически как на АСМ - мы скоро узнаем

А я в каком то месте возражал против АСМ? Может процитируешь?
И нахера ты так активно пропагандируешь что ты такого сделал? Тут не тема про тебя?

Re: Програмирование pic на СИ.

Пт сен 29, 2023 12:25:37

А вот как КРАМ может обходить уловки от СИ и писать практически как на АСМ - мы скоро узнаем

А я в каком то месте возражал против АСМ? Может процитируешь?
И нахера ты так активно пропагандируешь что ты такого сделал? Тут не тема про тебя?


Душевный ты наш :)

Я не предлагаю мои АСМ вставки обсуждать, я тебе предлагаю показать СВОЙ СИ код, и потом его дизассемблировать, а вот потом ЗАДУШЕВНО поговорим :)

Re: Програмирование pic на СИ.

Пт сен 29, 2023 13:03:42

я тебе предлагаю показать СВОЙ СИ код, и потом его дизассемблировать

С какой целью?
Ты вообще отдаешь себе отчет в том, что ты предлагаешь незнакомому тебе ВЕСЬМА ЗАНЯТОМУ человеку проделать ряд действий, смысл которых ему не ясен?
Но если ты жаждешь что либо увидеть, то я не жадный:
Код:
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

Re: Програмирование pic на СИ.

Пт сен 29, 2023 13:39:19

удивительно, а я вот не могу Си сразу дизассемблировать :)
странно, пациент всех обозвал, но продолжает тут быть и что-то ещё требует с обещанием бесед капслоком... осень - она такая.

Re: Програмирование pic на СИ.

Пт окт 06, 2023 08:43:07

... а вот PIC32MX120F032B-I/ML, которые купил до СВО в том-же chipdip.by по доллару за штуку (больше 20-ти)
- уже использовал в поворотниках для авто (для линейки WS281х) - вот те работают :)

Я конечно дико извиняюсь, а в чём сакральный смысл применения 32-х разрядного процессора в реле поворотов ?
Спрашиваю так, с интереса.

Re: Програмирование pic на СИ.

Пт окт 06, 2023 22:57:53

я тебе предлагаю показать СВОЙ СИ код, и потом его дизассемблировать

С какой целью?
Ты вообще отдаешь себе отчет в том, что ты предлагаешь незнакомому тебе ВЕСЬМА ЗАНЯТОМУ человеку проделать ряд действий, смысл которых ему не ясен?
Но если ты жаждешь что либо увидеть, то я не жадный:
Код:
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[i];
temperature=(int8_t)(tempFIR>>7);

ADCON0bits.GO=1;
*/

т.е. ты произвёл КУЧУ бесполезных ПОДВЫПЕНДРОСОВ, чтобы в конце запустить ОДНОКРАТНОЕ измерение :) :) :)
и даже не проверить - прочитал ты АЦП или НЕТ????

А в чём смысл твоего ПОНОСА ? :) ?
}

Re: Програмирование pic на СИ.

Сб окт 07, 2023 01:10:47

// некрасиво написал, так даже двоечники не пишут:
resADC=(uint16_t)(ADRESL + ADRESH<<8);

:facepalm:
представляю, что же за говно в тех огромных портянках на нерасшареных ресурсах....

Re: Програмирование pic на СИ.

Сб окт 07, 2023 02:06:52

// некрасиво написал, так даже двоечники не пишут:
resADC=(uint16_t)(ADRESL + ADRESH<<8);

:facepalm:
представляю, что же за говно в тех огромных портянках на нерасшареных ресурсах....


Я так понимаю - у Вас есть более красивый код :)
А иначе - Вы бы тут не светились :)
дык покажите :)
А я посмотрю ...

Добавлено after 18 minutes 52 seconds:
Для тех, ктоне знает пик и его файл "C:\Program Files\Microchip\xc8\ и т.д. - там есть описание - что и за чем ....
А вот что там у тебя нерасшарено - это нужно смотреть :)

Re: Програмирование pic на СИ.

Сб окт 07, 2023 05:25:56

if(!flag.tempSensReady) return; // ну тут понятно - некие флаги, которые ты назначил :)
flag.tempSensReady=0;

Код рассчитан на людей, которые хотя бы чуть-чуть знают английский язык. :tea:
Ну и не совсем нубов в программировании. :wink:
Абисняю. АЦП работает с прерываниями. И в обработчике прерываний от АЦП взводится флаг готовности данных.
А представленная функция вызывается в главном цикле в порядке очередности. И первое что она делает, проверяет оный флаг. Если он не взведен, то немедленно выходит из функции.
Из кода очевидно, что есть глобально объявленная структура flag, у которой есть элемент tempSensReady. Имя этого элемента как бы намекает на то, что он отражает готовность данных температурного сенсора, который имеется в применяемом контроллере.
Бесплатный попутный совет. Не нужно писать комментарии там, где сам код может рассказать о себе достаточно для его понимания. Для этого код должен быть правильно написан, конечно...
resADC=(uint16_t)ADRESL+((uint16_t)ADRESH<<8);
// некрасиво написал, так даже двоечники не пишут:
resADC=(uint16_t)(ADRESL + ADRESH<<8);

То, что ты не знаком с Си от слова совсем уже давно всем очевидно. Но разберем все таки твои глупости.
Предложенный тобою код:
resADC=(uint16_t)(ADRESL + ADRESH<<8);

дословно будет выполнять следующее. Содержимое восьмибитного регистра ADRESH будет сдвинуто влево на восемь бит и результат этого сдвига будет очевидно равен НУЛЮ. То есть ты присвоил 16-битной локальной resADC значение только восьми младших бит 12-разрядного АЦП. 4 старших разряда пошли лесом.
:music:
tempCurr=(int8_t)((((((__int24)resADC*gainTempSens)/256)+offsetTempSens)/10)-8);

// ну будем считать, что "resADC" перевёл в значение "uint24_t" - ну добавил 8 нулевых бит, и что????
"gainTempSens" я во первых - не вижу - какого "разрешения" :)
ну и дальше - некие непонятные: деления/умножения/прибавления/ и т.д....

Ты хотя-бы приведи значения того говна, которое используешь :)

Ты просил привести не полный код, а фрагмент некоего кода с его дизасмом, чтобы что то там продемонстрировать. И для этого совершенно не требуется знать смысл приведенных арифметических выражений и значения используемых в них глобальных переменных. Хотя из названия этих неизвестных тебе переменных очевидно их назначение.
gainTempSens - это множитель к результату преобразования температурного сенсора.
offsetTempSens - это смещение результата преобразования температурного сенсора.
Обе этих переменных получают свои значения при инициализации МК посредством чтения из специальной нестираемой области флеша, куда производителем МК занесены калибровочные параметры температурного сенсора. Кстати, эти калибровочные параметры имеют созвучные применяемым переменным названия в даташите. Оба этих значения однобайтные для целочисленных вычислений.
Непонятая тобой формула так же приведена в даташите. Правда в традиционной алгебраической форме без учета разрядности применяемых величин. Но пользователь должен уметь программировать на Си, чтобы результат вычислений был достоверен.
Изображение
Совершенно очевидно, что произведение 16-битной переменной с 8-битной В ОБЩЕМ СЛУЧАЕ даст 24-бита результата. Если явно не привести один из сомножителей к 24 битам, то результатом будет переполнение.
Но у тебя очевидно отсутствуют даже начальные знания Си, поэтому ты продолжаешь нас смешить своими глупостями.
т.е. ты произвёл КУЧУ бесполезных ПОДВЫПЕНДРОСОВ, чтобы в конце запустить ОДНОКРАТНОЕ измерение
и даже не проверить - прочитал ты АЦП или НЕТ????

Вообще то ADRESH и ADRESL и есть регистры результата АЦП. Что мне надо проверять в функции, если я беру из них значения в самом начале?
:)))
ЗЫ. Дурачок, тебе не надоел твой позор? :wink: :tea:
И что ты там хотел сказать про ASM на основе моего дизасма? Или ты уже об этом забыл?

Re: Програмирование pic на СИ.

Сб окт 07, 2023 07:54:37

А что? Дурачок уже висит, соображать не позволяет :)
https://disk.yandex.ru/i/XGQ9jPhY1RVb2Q

PS: может я где-то пропустил твой АСМ, но если честно, то я его не видел :)
Ответить