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

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
Встал на лапы
Аватара пользователя
Сообщения: 126
Зарегистрирован: Вт фев 28, 2017 08:13:31
Откуда: Свердловская обл.

Сообщение Zikon »

Давайте по порядку по поводу "правды" (лично для ALEKS1102X-а)

Повторим суть вопроса - "Родэрик" указал что при команде

const uint8_t R1 = 0xAA;

неправильно вычисляется адрес константы на PIC16F886 !

EEADR=(uint8_t)&R1;
EEADRH=((uint16_t)&R1)>>8;

// в данном случае &R1 - адрес R1 ( !! 16 бит )
// загружаем младший и старший байт адреса
// в переменные EEADR , EEADRH

скорее всего планируется работа с данной "константой"
// а почему нет? если знаем адрес, то можно и изменить!


в случае PIC12F1572 - работает - адрес вычисляется правильно


в случае когда задаём адрес напрямую - то всё работает

const uint8_t R1 @0x18D0=0xAA;

а также работает комбинация

const uint8_t R1 = 0xAA;
const uint8_t R2 @0x1FFF;

----------------------------------

смоделировал данную ситуацию
MPLABX 6.05 + XC8 2.41
pic16f690 ( как аналог по коду pic16f886 )
pic16f1827 ( как аналог по коду pic12f1572 )
// пустая программа и

1) const uint8_t R1 = 0xAA;

2) const uint8_t R1 __at(0x800) = 0xAA;

3) const uint8_t R1 = 0xAA;
const uint8_t R2 __at(0x800);


EEADR=(uint8_t)&R1;
EEADRH=((uint16_t)&R1)>>8;

// xc8 2.41 - не знает @

----------------------------------
и удивительно - проблема есть для pic16f690!
в листинге всё прекрасно видно что делает компилятор

для записи в память программ константы всегда используется RETLW

1. для pic16f690 получилось что R1
разместился по адресу 0x0007
а адрес назначается 0x8001

для pic16f1827 получилось что R1
разместился по адресу 0x0800
а адрес назначается 0x8800

2. для pic16f690 получилось что R1
разместился по адресу 0x0800
а адрес назначается 0x0800

для pic16f1827 получилось что R1
разместился по адресу 0x0800
а адрес назначается 0x0800

3. для pic16f690 получилось что R1
разместился по адресу 0x0908
а адрес назначается 0x8908
R2 разместился по адресу 0x0800

для pic16f1827 получилось что R1
разместился по адресу 0x0801
а адрес назначается 0x8801
R2 разместился по адресу 0x0800


для расширенной серии pic12f1xxx - pic16f1xxx
есть мапирование памяти программ на память озу с адреса 0x8000
(только младшие байты памяти программ)

используя указатели можно читать таблицы очень быстро
поэтому назначаемый адрес и входит в диапазон 0x8xxx
и сегмент stringX - организуется правильно

для обычных pic16 - xc8 переклинивает и адрес неверно расчитывается

если адрес явно задан для константы или
есть хотя бы одна константа с явным адресом
то сегменты srtringX назначаются правильно

старший бит15 в данном случае - неважен,
так как при записи в EEADRH - отбрасывается

данные манипуляции нужны только для изменения константы
// вычисляем адрес и записываем стандартным алгоритмом
// новые данные по этому адресу


--------------------- дополнительно -----------------

для pic16f1xxx команда
EEADR = &R1
правильно запишет 16 бит адрес в старший и младший байт
команда
EEADR=(uint8_t)&R1;
также пишет 16 бит адрес, игнорируя приведение типа
Последний раз редактировалось Zikon Ср сен 20, 2023 06:37:20, всего редактировалось 1 раз.
PY32F002A+, N32G430, CW32L010
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 126
Зарегистрирован: Вт фев 28, 2017 08:13:31
Откуда: Свердловская обл.

Сообщение Zikon »

EEADRH=((uint16_t)&R1)>>8;
старший байт отбрасывается и так
и да можно сократить ещё
EEADRH=(&R1)>>8;


для
EEADR=(uint8_t)&R1;
также будет верно
EEADR=&R1;
тоже отбрасывается старший байт

// просто копировал код который указали ранее

Добавлено after 2 minutes 52 seconds:
для pic16f1xxx
EEADR - 16 бит объявлен

а старший и младший байты
EEADRL
EEADRH
PY32F002A+, N32G430, CW32L010
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="Zikon",url="/forum/viewtopic.php?p=4478743#p4478743"]и удивительно - проблема есть для pic16f690!
в листинге всё прекрасно видно что делает компилятор...
для записи в память программ константы всегда используется RETLW[/uquote]
А что он должен использовать для чипа, в котором нет другого доступа к программному флешу?
Спешу напомнить, что В ЛЮБОМ контроллере доступ к программному флешу не является нативной для Си процедурой. Поэтому в компиляторах используются костыльные для Си спецификаторы, а результат компиляции глубоко аппаратно зависим.
Кстати, спецификатор @ - это от IAR. О чем совершенно определенно сказано в мануале на XC8.
Но вопрос Родэрика был СОВЕРШЕННО О ДРУГОМ. Речь шла о неявном размещении константы линкером.

Добавлено after 2 minutes 36 seconds:
[uquote="Martian",url="/forum/viewtopic.php?p=4478763#p4478763"]так-то это сплошь и всюду встречается...[/uquote]
А я не парюсь по этому поводу и просто всегда привожу явно. Ведь я не профессиональный программист и откровенно не помню нюансов неявного приведения.

Добавлено after 3 minutes 9 seconds:
[uquote="Zikon",url="/forum/viewtopic.php?p=4478761#p4478761"]и да можно сократить ещё
EEADRH=(&R1)>>8;[/uquote]
Вообще то нельзя. В нормальном компиляторе это вызывает варнинг. EEADRH - это не указатель, а простой регистр и потому константу-указатель нужно привести к простой константе.
Последний раз редактировалось КРАМ Ср сен 20, 2023 09:10:52, всего редактировалось 1 раз.
Поставщик валерьянки для Кота
Сообщения: 1974
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

Zikon, попробовал write_program_memory() (в CCS) для 16f690. Функция недоступна.
16F886, 12f1572 - ОК.
Спасибо за инфо.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пт мар 29, 2013 23:53:14

Сообщение ALEKS1102X »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4478775#p4478775"][uquote="Zikon",url="/forum/viewtopic.php?p=4478743#p4478743"]и удивительно - проблема есть для pic16f690!
в листинге всё прекрасно видно что делает компилятор...
для записи в память программ константы всегда используется RETLW[/uquote]
А что он должен использовать для чипа, в котором нет другого доступа к программному флешу?
Спешу напомнить, что В ЛЮБОМ контроллере доступ к программному флешу не является нативной для Си процедурой. Поэтому в компиляторах используются костыльные для Си спецификаторы, а результат компиляции глубоко аппаратно зависим.
Кстати, спецификатор @ - это от IAR. О чем совершенно определенно сказано в мануале на XC8.
Но вопрос Родэрика был СОВЕРШЕННО О ДРУГОМ. Речь шла о неявном размещении константы линкером.

Добавлено after 2 minutes 36 seconds:
[uquote="Martian",url="/forum/viewtopic.php?p=4478763#p4478763"]так-то это сплошь и всюду встречается...[/uquote]
А я не парюсь по этому поводу и просто всегда привожу явно. Ведь я не профессиональный программист и откровенно не помню нюансов неявного приведения.

Добавлено after 3 minutes 9 seconds:
[uquote="Zikon",url="/forum/viewtopic.php?p=4478761#p4478761"]и да можно сократить ещё
EEADRH=(&R1)>>8;[/uquote]
Вообще то нельзя. В нормальном компиляторе это вызывает варнинг. EEADRH - это не указатель, а простой регистр и потому константу-указатель нужно привести к простой константе.[/uquote]

А ты (Вы) напиши это на АСМ :)
А потом будешь выкладывать вырезки из даташита на пик16 :)

PS: я уже давно пик16 использую только для чего-то мелкого, ну типа иммо для авто :)
Серьёзного там ничего не напишешь :)
https://drive.google.com/file/d/1y0nTqb ... drive_link
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480455#p4480455"]А ты (Вы) напиши это на АСМ[/uquote]
Что "это"? Обращение к флешу через контроллер флеша? Так я привел скрин даташита с текстом на АСМе.
Ты изъясняйся конкретно, а не междометиями...
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480455#p4480455"]А потом будешь выкладывать вырезки из даташита на пик16[/uquote]
У тебя есть возражения к даташиту?
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480455#p4480455"]я уже давно пик16 использую только для чего-то мелкого, ну типа иммо для авто[/uquote]
Поздравляю. Возьми с полки пирожок.
Понятия мелкий/крупный зависят от соотношения ресурсов контроллера и решаемой задачи. Судя по твоим местным эпистолиям, работать с 8-битным Микрочипом ты можешь на очень начальном уровне. Что не сообщение, то какая то глупость...
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480455#p4480455"]Серьёзного там ничего не напишешь[/uquote]
Ты что считаешь "серьезным"?
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480455#p4480455"]https://drive.google.com/file/d/бла....бла...бла[/uquote]
Тебе уже писали, чтобы ты не давал тут нерасшаренных ссылок. Никому нах не облокотилось делать запросы для чтения твоих бестолковых нетленок...
И вообще, на этом форуме есть свой хостинг - потрудись использовать его.
Реклама
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пт мар 29, 2013 23:53:14

Сообщение ALEKS1102X »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4480477#p4480477"][uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480455#p4480455"]А ты (Вы) напиши это на АСМ[/uquote]
Что "это"? Обращение к флешу через контроллер флеша? Так я привел скрин даташита с текстом на АСМе.
Ты изъясняйся конкретно, а не междометиями...
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480455#p4480455"]А потом будешь выкладывать вырезки из даташита на пик16[/uquote]
У тебя есть возражения к даташиту?
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480455#p4480455"]я уже давно пик16 использую только для чего-то мелкого, ну типа иммо для авто[/uquote]
Поздравляю. Возьми с полки пирожок.
Понятия мелкий/крупный зависят от соотношения ресурсов контроллера и решаемой задачи. Судя по твоим местным эпистолиям, работать с 8-битным Микрочипом ты можешь на очень начальном уровне. Что не сообщение, то какая то глупость...
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480455#p4480455"]Серьёзного там ничего не напишешь[/uquote]
Ты что считаешь "серьезным"?
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480455#p4480455"]https://drive.google.com/file/d/бла....бла...бла[/uquote]
Тебе уже писали, чтобы ты не давал тут нерасшаренных ссылок. Никому нах не облокотилось делать запросы для чтения твоих бестолковых нетленок...
И вообще, на этом форуме есть свой хостинг - потрудись использовать его.[/uquote]


Добрый день!

Написать на "АСМ" я имел ввиду, что если СИ запрещает кому-то пользоваться ВСЕМИ хотелками микроконтроллера, то АСМ все запреты снимает.

Нет, возражений к даташиту нету, просто он рассчитан наверное на расширение функционала этой линейки процев. Они это и сделали в процах, в которых после "16F" стало больше ТРЁХ цифр.
Только ЗАСАДА - она и осталась :) Куча переключений банков ОЗУ, из-за которых, если нужно написать ЧЁТКИЙ-ТОЧНЫЙ тайминг - то не получиться :( нужны вставки на АСМ.
Да ладно вставки, память читать всё равно нет возможности, да и как она появится, если прямой доступ к памяти - это регистры TBLPTRx и TABLAT, а это уже серия пик18.
Да и 14-ти битный адрес к памяти флешь - это тоже "энтузязизма" не добавляет :) ... когда старший адрес может быть только до 0x3F ...
Вот поэтому, и нет смысла читать старший адрес программной памяти :)

Спасибо конечно за пирожок, но я его почему-то не нашёл на той полке, которую Вы не указали :)
В моём понятии - мелкий, это частота не более 8-ми МИпс, памячти почти НОЛЬ, но есть несколько аппаратных модулей, которые можно использовать, к примеру, для связи с иммо от WV :)
Ну можно ещё взять м/с типа DS1307, DS1338, MCP7941x и сделать добротные часики :) - прицепить ещё солнечную панель, аккум типа 16850, и можно сказать - почти на всю жизнь :)
Главное - правильно программу написать, чтобы аккум не всё время заряжался, а по мере необходимости.

Я не могу закинуть на Яндекс диск, он требует купить диск !?! Накой мне их диск? Я что? ЛОХ свою инфу разбрасывать по всей интернетовской помойке? Да она завтра будет доступна последнему бомжу.
Поэтому, я пользуюсь этой помойкой только для раздачи неких своих данных, которые я считаю - что можно выложить в помойку.
А что? здесь есть файлообменник, который вкурит от 700 МГбайт и выше ? Чёт я сумневаюсь :)

А кто хочет, тот и нерасшаренный скачает :)
Друг Кота
Аватара пользователя
Сообщения: 7021
Зарегистрирован: Сб янв 28, 2006 22:47:24

Сообщение Asmodey »

Ага, ни в коем случае никакого Яндекса, только элитная помойка Гугл :)))
Астролябия-сама меряет, было бы что мерять!!!
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[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]
:facepalm: Это тупой бред. Ты бездарно путаешь РАЗРЯДНОСТЬ флеша, с размером флеша. Разрядность адреса определяется размером флеша. И только. Так происходит во всех без исключениях контроллерах и процессорах любой разрядности и любого производителя. Возьми любой 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. Твои программные портянки тут никому не нужны.
Нашел транзистор. Понюхал.
Сообщения: 158
Зарегистрирован: Сб апр 24, 2021 18:42:11

Сообщение phalanx »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4480651#p4480651"]...Научись излагать свои мысли лаконично и сопровождать их примерами УЧАСТКОВ кода в тегах code. Твои программные портянки тут никому не нужны.[/uquote]
+1000 Вот еще из очень риторического, с послевкусием мании величия:
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4480603#p4480603"]...Я что? ЛОХ свою инфу разбрасывать по всей интернетовской помойке? Да она завтра будет доступна последнему бомжу...[/uquote]
:)))
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пт мар 29, 2013 23:53:14

Сообщение ALEKS1102X »

[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]
:facepalm: Это тупой бред. Ты бездарно путаешь РАЗРЯДНОСТЬ флеша, с размером флеша. Разрядность адреса определяется размером флеша. И только. Так происходит во всех без исключениях контроллерах и процессорах любой разрядности и любого производителя. Возьми любой 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:
Знаете ребята ... :)
Есть такое понятие - кто-то что-то делает, а кто-то отсасыв*ет и плывёт как гов*о по течению форума :)
Так вот когда вы меня минусуете ( :) ), то не забывайте - что ВЫ себя минусуете :)
Вы же ЛОХИ, а вами ведуют ДВА так-сяк знающих .... но они для вас ЭТАЛОН - типа ведущие для быдло :)
А не пытались своё мнение и прошивки писать, и возразить этим ?
А в идеале - просто не посещать этот форум - он через год сам загнётся :)
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482338#p4482338"]Завтра кину Вам файл, где будет работа с тем-же простым 1602, где разница в работе между асм и си будет ЯВНО очевидна.
И вы её не сможете исправить, кроме как через АСМ[/uquote]
:facepalm: :))) :))) :)))
Твое "эпохальное" достижение состоит в том, что ты отказался от установки банка в функции и сделал ее использование зависимым от контекста.
Ничего более тупого ты не мог изобразить? :music:
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482338#p4482338"]он через год сам загнётся[/uquote]
Пока на форум ходят такие клоуны как ты, ему ничего не грозит. Всегда найдутся зрители для поржать. :tea:
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пт мар 29, 2013 23:53:14

Сообщение ALEKS1102X »

Пока форумом заведуют КЛОУНЫ, которые друг с другом повязаны, тут нехер делать.
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

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

Сообщение ALEKS1102X »

[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х) - вот те работают :)
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482522#p4482522"]Ну тогда ответь на свои-же цитаты от "Чт сен 28, 2023 22:10:38", только не голословно, а с примерами, желательно и на СИ и на АСМ
Можно ЧИСТЫМ исходником, а можно и скринами[/uquote]
Ты предлагаешь мне показать ТВОИ скрины? :)))
Душевный ты наш, ты сам в состоянии посмотреть на собственный код и убедиться в том, что в твоих ASM-вставках отсутствует выбор банка при ногодрыге стробом. Что ты еще желаешь увидеть? Ты тупо сделал детскую ошибку. Причем тут мой код и мои скрины? То есть, если перед вызовом функции строба по каким либо причинам банк будет отличен от нулевого, то твой код будет фуфлом и никакого строба на выходе не будет.
Однако, я канешна понимаю, что ты вызываешь строб исключительно после вывода в линии данных и банк по любому будет нулевым. Но тогда ответь мне на простой вопрос. Напуркуа ты вообще выделил строб в отдельную функцию? Если ты такой "экономист" в машинных циклах и негодуешь по поводу двух лишних инструкций сгенерированных компилятором, то нахера ты, такой весь умный и шоколадный, создал ЧЕТЫРЕ машинных цикла вызова функции и выхода из нее (по две на каждую инструкцию), вместо того, что бы логично написать этот строб прямо в функции вывода данных?
:))) :))) :)))
И что мы имеем в результате? А имеем мы только твою пустопорожнюю болтовню и бахвальство.
И это я не упомянул, что все твои извращения с циклами нах ни кому не облокотились, ибо в инициализации не бывает критического кода.
Ну и если ты любишь минимализм, - пиши на чистом АСМе. У меня, например, почти все проекты на продукции Микрочипа написаны на АСМе. Без Си. Включая проекты на dsPIC33, включая двухядерные dsPIC33.
Вот тогда ты будешь истинным пацаком в красных штанах... :music:
[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482522#p4482522"]Достаточно скрина, чтобы чел аналогичное проверил у себя в прошивке, и сказал - .... это ЧИСТО ВЫПЁНДРЁЖЬ перед участниками форума ?[/uquote]
И это чистая правда. Единственной причиной твоей местной болтовни является ТВОЙ ВЫПЕНДРЕЖ. Причем безграмотный.
И к этому список твоих "достижений" в ПИКах никакого отношения не имеет. Ибо есть все основания полагать, что в них понатыканы аналогичные глупости. И не важно работает твой быдлокод или нет. Его проблема в том, что в нем разбросаны ошибки, которые всплывут, как только потребуется отклониться от твоего кода, взяв лишь фрагмент.
Последний раз редактировалось КРАМ Пт сен 29, 2023 12:17:39, всего редактировалось 1 раз.
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пт мар 29, 2013 23:53:14

Сообщение ALEKS1102X »

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

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

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

Сообщение КРАМ »

[uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482573#p4482573"]А вот как КРАМ может обходить уловки от СИ и писать практически как на АСМ - мы скоро узнаем[/uquote]
А я в каком то месте возражал против АСМ? Может процитируешь?
И нахера ты так активно пропагандируешь что ты такого сделал? Тут не тема про тебя?
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пт мар 29, 2013 23:53:14

Сообщение ALEKS1102X »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4482574#p4482574"][uquote="ALEKS1102X",url="/forum/viewtopic.php?p=4482573#p4482573"]А вот как КРАМ может обходить уловки от СИ и писать практически как на АСМ - мы скоро узнаем[/uquote]
А я в каком то месте возражал против АСМ? Может процитируешь?
И нахера ты так активно пропагандируешь что ты такого сделал? Тут не тема про тебя?[/uquote]

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

Я не предлагаю мои АСМ вставки обсуждать, я тебе предлагаю показать СВОЙ СИ код, и потом его дизассемблировать, а вот потом ЗАДУШЕВНО поговорим :)
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[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
Ответить

Вернуться в «PIC»