Microchip XC8 1.33, XC16 1.22, XC32 1.33 x86 [2014, ENG]

Страницы :   Пред.  1, 2, 3, 4, 5, 6, 7, 8  След.
Ответить
 

sptes

Стаж: 14 лет 6 месяцев

Сообщений: 7


sptes · 20-Апр-19 09:14 (6 лет 5 месяцев назад)

igorg10 писал(а):
77221870
sptes писал(а):
77211314народ, у кого есть xc8 1.45 инсталлер? Скиньте, по-братски, пожалуйста!
https://www.microchip.com/development-tools/pic-and-dspic-downloads-archive
Спасибо!
[Профиль]  [ЛС] 

jwalkerbg

Стаж: 11 лет 7 месяцев

Сообщений: 9


jwalkerbg · 20-Авг-19 14:49 (спустя 4 месяца, ред. 20-Авг-19 14:49)

Вышел XC8 2.10. Попробовал лечение которое лечило успешно 2.05, но потом при компилляции в MPLAB X компиллятор сказал что corrupted и надо быть инсталлирован снова.
[Профиль]  [ЛС] 

skumpol

Стаж: 11 лет 10 месяцев

Сообщений: 1585


skumpol · 23-Авг-19 15:38 (спустя 3 дня)

Так. А где скачать 2.05? )
[Профиль]  [ЛС] 

igorg10

Стаж: 15 лет 8 месяцев

Сообщений: 108

igorg10 · 23-Авг-19 23:58 (спустя 8 часов, ред. 23-Авг-19 23:58)

skumpol писал(а):
77855308Так. А где скачать 2.05? )
Постом раньше дана ссылка на архивы.
XC8 v2.10 работает и на атмел и на пиках.
Делаем как раньше, без изменений:
1. С раздачи берём файл xclm.exe.
2. В папке C:\Program Files (x86)\Microchip\xc8\v2.10\bin переименовываем файл xclm.exe в xclm.old.
3. В эту папку копируем файл с раздачи xclm.exe.
4. Копируем файлы xclm.old и xclm.exe с папки C:\Program Files (x86)\Microchip\xc8\v2.10\bin в папки C:\Program Files (x86)\Microchip\xc8\v2.10\pic\bin и C:\Program Files (x86)\Microchip\xc8\v2.10\avr\bin.
5. В папках C:\Program Files (x86)\Microchip\xc8\v2.10\pic\bin и C:\Program Files (x86)\Microchip\xc8\v2.10\avr\bin с правами администратора запускаем в командной строке файл xclm.exe.
6. Работаем.
[Профиль]  [ЛС] 

reasonx1

Стаж: 13 лет 7 месяцев

Сообщений: 21


reasonx1 · 14-Окт-19 19:20 (спустя 1 месяц 21 день, ред. 14-Окт-19 19:20)

igorg10 писал(а):
77857542
skumpol писал(а):
77855308Так. А где скачать 2.05? )
Постом раньше дана ссылка на архивы.
XC8 v2.10 работает и на атмел и на пиках.
Делаем как раньше, без изменений:
1. С раздачи берём файл xclm.exe.
2. В папке C:\Program Files (x86)\Microchip\xc8\v2.10\bin переименовываем файл xclm.exe в xclm.old.
3. В эту папку копируем файл с раздачи xclm.exe.
4. Копируем файлы xclm.old и xclm.exe с папки C:\Program Files (x86)\Microchip\xc8\v2.10\bin в папки C:\Program Files (x86)\Microchip\xc8\v2.10\pic\bin и C:\Program Files (x86)\Microchip\xc8\v2.10\avr\bin.
5. В папках C:\Program Files (x86)\Microchip\xc8\v2.10\pic\bin и C:\Program Files (x86)\Microchip\xc8\v2.10\avr\bin с правами администратора запускаем в командной строке файл xclm.exe.
6. Работаем.
Вот этот пост на главную прикрепить. Спасибо большое.
От себя добавлю, что У МЕНЯ получилось активировать после активного использования триальной версии без переустановки и запускал от администратора мышкой, а не через командную строку.
[Профиль]  [ЛС] 

sav1812

Стаж: 16 лет 3 месяца

Сообщений: 6


sav1812 · 13-Дек-19 14:42 (спустя 1 месяц 29 дней)

igorg10 писал(а):
Постом раньше дана ссылка на архивы.
XC8 v2.10 работает и на атмел и на пиках.
Вот только в архивах по ссылке последняя версия XC8 — 2.05
Где вы 2.10 брали? И брали ли?..
[Профиль]  [ЛС] 

igorg10

Стаж: 15 лет 8 месяцев

Сообщений: 108

igorg10 · 13-Дек-19 21:19 (спустя 6 часов, ред. 13-Дек-19 21:19)

sav1812 писал(а):
78492033
igorg10 писал(а):
Постом раньше дана ссылка на архивы.
XC8 v2.10 работает и на атмел и на пиках.
Вот только в архивах по ссылке последняя версия XC8 — 2.05
Где вы 2.10 брали? И брали ли?..
Только что зашел на сайт Микрочипа - https://www.microchip.com/mplab/compilers - вкладка downloads внизу страницы - скачиваем под нужную архитектуру компиляторы (ХС8, ХС16, ХС32). На вкладке вверху где MPLAB, справа будет MPLAB XC Compilers - там в архиве можно выбрать архивные версии:)
[Профиль]  [ЛС] 

ALEKS1102X

Стаж: 5 лет 10 месяцев

Сообщений: 14


ALEKS1102X · 13-Дек-19 22:24 (спустя 1 час 4 мин., ред. 13-Дек-19 22:24)

igorg10 писал(а):
77857542
skumpol писал(а):
77855308Так. А где скачать 2.05? )
Постом раньше дана ссылка на архивы.
XC8 v2.10 работает и на атмел и на пиках.
Делаем как раньше, без изменений:
1. С раздачи берём файл xclm.exe.
2. В папке C:\Program Files (x86)\Microchip\xc8\v2.10\bin переименовываем файл xclm.exe в xclm.old.
3. В эту папку копируем файл с раздачи xclm.exe.
4. Копируем файлы xclm.old и xclm.exe с папки C:\Program Files (x86)\Microchip\xc8\v2.10\bin в папки C:\Program Files (x86)\Microchip\xc8\v2.10\pic\bin и C:\Program Files (x86)\Microchip\xc8\v2.10\avr\bin.
5. В папках C:\Program Files (x86)\Microchip\xc8\v2.10\pic\bin и C:\Program Files (x86)\Microchip\xc8\v2.10\avr\bin с правами администратора запускаем в командной строке файл xclm.exe.
6. Работаем.
А Вы уверены что эти действия действительно из пробной версии делают Про ?
Вот что у меня пишет на версию 1.44:
Microchip MPLAB XC8 C Compiler (PRO Mode) V1.44
Build date: Sep 13 2017
Part Support Version: 1.44
Copyright (C) 2017 Microchip Technology Inc.
License type: Node Configuration
И вот что на версию 2.10 после манипуляций выше:
Microchip MPLAB XC8 C Compiler V2.10
Build date: Jul 30 2019
Part Support Version: 2.10
Copyright (C) 2019 Microchip Technology Inc.
License type: Node Configuration
Вполне возможно что этот кряк ничего не сделал, а сам компилятор просто находится в пробном периоде (60 дней), поэтому позволяет включать режим "про"...
Причём по коду компилируемая программа прилично прибавила в весе, хотя вроде компилятор более свежий - должно быть наоборот...
[Профиль]  [ЛС] 

igorg10

Стаж: 15 лет 8 месяцев

Сообщений: 108

igorg10 · 14-Дек-19 15:26 (спустя 17 часов, ред. 14-Дек-19 15:26)

ALEKS1102X писал(а):
78495058
igorg10 писал(а):
77857542
skumpol писал(а):
77855308Так. А где скачать 2.05? )
Постом раньше дана ссылка на архивы.
XC8 v2.10 работает и на атмел и на пиках.
Делаем как раньше, без изменений:
1. С раздачи берём файл xclm.exe.
2. В папке C:\Program Files (x86)\Microchip\xc8\v2.10\bin переименовываем файл xclm.exe в xclm.old.
3. В эту папку копируем файл с раздачи xclm.exe.
4. Копируем файлы xclm.old и xclm.exe с папки C:\Program Files (x86)\Microchip\xc8\v2.10\bin в папки C:\Program Files (x86)\Microchip\xc8\v2.10\pic\bin и C:\Program Files (x86)\Microchip\xc8\v2.10\avr\bin.
5. В папках C:\Program Files (x86)\Microchip\xc8\v2.10\pic\bin и C:\Program Files (x86)\Microchip\xc8\v2.10\avr\bin с правами администратора запускаем в командной строке файл xclm.exe.
6. Работаем.
А Вы уверены что эти действия действительно из пробной версии делают Про ?
Вот что у меня пишет на версию 1.44:
Microchip MPLAB XC8 C Compiler (PRO Mode) V1.44
Build date: Sep 13 2017
Part Support Version: 1.44
Copyright (C) 2017 Microchip Technology Inc.
License type: Node Configuration
И вот что на версию 2.10 после манипуляций выше:
Microchip MPLAB XC8 C Compiler V2.10
Build date: Jul 30 2019
Part Support Version: 2.10
Copyright (C) 2019 Microchip Technology Inc.
License type: Node Configuration
Вполне возможно что этот кряк ничего не сделал, а сам компилятор просто находится в пробном периоде (60 дней), поэтому позволяет включать режим "про"...
Причём по коду компилируемая программа прилично прибавила в весе, хотя вроде компилятор более свежий - должно быть наоборот...
License type: Node Configuration:) Через 60-ть дней поглядите, сможете ли включить оптимизацию. На триальном не получится.
Если запустить компилятор без манипуляций - будет написано тип лицензии - free . И через 60-ть дней не даст включить оптимизацию.
По поводу размера hex файла - отличия не должны быть большими, если использовать один и тот же вид оптимизации компилятора.
[Профиль]  [ЛС] 

skumpol

Стаж: 11 лет 10 месяцев

Сообщений: 1585


skumpol · 14-Дек-19 15:29 (спустя 3 мин., ред. 14-Дек-19 15:29)

Явный признак полноценного патча - уменьшение размера hex-а при увеличении степени оптимизации. И вообще при включении оптимизации.
Я тут писал про феерическую историю с какой-то из старых версий, при установке не в дефолтную папку патчилка которой говорила что всё ок, а по факту оптимизация не работала. И код ранее компилировавшийся "под обрез" памяти перестал в неё влезать, давая одинаковый размер на любой степени оптимизации.
[Профиль]  [ЛС] 

ALEKS1102X

Стаж: 5 лет 10 месяцев

Сообщений: 14


ALEKS1102X · 14-Дек-19 15:37 (спустя 7 мин., ред. 14-Дек-19 15:37)

igorg10 писал(а):
78498883
ALEKS1102X писал(а):
78495058
igorg10 писал(а):
77857542
skumpol писал(а):
77855308Так. А где скачать 2.05? )
Постом раньше дана ссылка на архивы.
XC8 v2.10 работает и на атмел и на пиках.
Делаем как раньше, без изменений:
1. С раздачи берём файл xclm.exe.
2. В папке C:\Program Files (x86)\Microchip\xc8\v2.10\bin переименовываем файл xclm.exe в xclm.old.
3. В эту папку копируем файл с раздачи xclm.exe.
4. Копируем файлы xclm.old и xclm.exe с папки C:\Program Files (x86)\Microchip\xc8\v2.10\bin в папки C:\Program Files (x86)\Microchip\xc8\v2.10\pic\bin и C:\Program Files (x86)\Microchip\xc8\v2.10\avr\bin.
5. В папках C:\Program Files (x86)\Microchip\xc8\v2.10\pic\bin и C:\Program Files (x86)\Microchip\xc8\v2.10\avr\bin с правами администратора запускаем в командной строке файл xclm.exe.
6. Работаем.
А Вы уверены что эти действия действительно из пробной версии делают Про ?
Вот что у меня пишет на версию 1.44:
Microchip MPLAB XC8 C Compiler (PRO Mode) V1.44
Build date: Sep 13 2017
Part Support Version: 1.44
Copyright (C) 2017 Microchip Technology Inc.
License type: Node Configuration
И вот что на версию 2.10 после манипуляций выше:
Microchip MPLAB XC8 C Compiler V2.10
Build date: Jul 30 2019
Part Support Version: 2.10
Copyright (C) 2019 Microchip Technology Inc.
License type: Node Configuration
Вполне возможно что этот кряк ничего не сделал, а сам компилятор просто находится в пробном периоде (60 дней), поэтому позволяет включать режим "про"...
Причём по коду компилируемая программа прилично прибавила в весе, хотя вроде компилятор более свежий - должно быть наоборот...
License type: Node Configuration:) Через 60-ть дней поглядите.
Если запустить компилятор без манипуляций - будет написано тип лицензии - trial. И через 60-ть дней не даст включить оптимизацию.
По поводу размера hex файла - отличия не должны быть большими, если использовать один и тот же вид оптимизации компилятора.
Я имел ввиду что для версии 1.44 после компиляции, в окне прописывает в каком режиме стоит компилятор "Microchip MPLAB XC8 C Compiler (PRO Mode) V1.44",
а для новой версии никаких опознавательных, плюс ко всему ставлю оптимизацию любую из трёх, испытуемый проект всё равно получается 31916 байт:
Memory Summary:
Program space used 7CACh ( 31916) of 10000h bytes ( 48.7%)
Data space used 712h ( 1810) of F60h bytes ( 46.0%)
Configuration bits used 7h ( 7) of 7h words (100.0%)
EEPROM space used 100h ( 256) of 400h bytes ( 25.0%)
ID Location space used 8h ( 8) of 8h bytes (100.0%)
Data stack space used 0h ( 0) of 800h bytes ( 0.0%)
А в версии 1.44 в режиме "про" 31686 байт:
Memory Summary:
Program space used 7BC6h ( 31686) of F000h bytes ( 51.6%)
Data space used 6FEh ( 1790) of F5Fh bytes ( 45.5%)
Configuration bits used 7h ( 7) of 7h words (100.0%)
EEPROM space used 100h ( 256) of 400h bytes ( 25.0%)
ID Location space used 8h ( 8) of 8h bytes (100.0%)
Data stack space used 0h ( 0) of 800h bytes ( 0.0%)
У меня правда все компиляторы установлены не по дефолтному пути: C:\MPLABX\xc8\...
Может поэтому не получается его крякнуть...
Попробую переустановить по новому mplabx, xc8 v1.44 и v2.10 по умолчанию: C:\Program Files (x86)\Microchip\xc8\...
[Профиль]  [ЛС] 

igorg10

Стаж: 15 лет 8 месяцев

Сообщений: 108

igorg10 · 14-Дек-19 16:21 (спустя 44 мин., ред. 19-Дек-19 08:30)

skumpol писал(а):
78498957Явный признак полноценного патча - уменьшение размера hex-а при увеличении степени оптимизации. И вообще при включении оптимизации.
Я тут писал про феерическую историю с какой-то из старых версий, при установке не в дефолтную папку патчилка которой говорила что всё ок, а по факту оптимизация не работала. И код ранее компилировавшийся "под обрез" памяти перестал в неё влезать, давая одинаковый размер на любой степени оптимизации.
Явный признак полноценного патча - использование покупного компилятора. Для чистоты эксперимента - устанавливаем на виртуальной машине не ломаный компилятор, включаем ему режим Про, устанавливаем любой вид оптимизации (1,2,3 или S (по размеру)), компилируем. Сохраняем скомпилированный файл. Делаем то же самое на пролеченном компиляторе. И сраниваем файлы получившиеся. Отличий НЕ будет, при условии использования одной версии компилятора и одного уровня оптимизации и одного DFP.
В версии 2.Х ХС8 можно использовать разные DFP (смотрим в свойствах проекта, там может быть несколько DFP (Device Family Pack ), их можно выбирать), сделано сие в рамках подготовки к миграции в 64 бита, так вот эти DFP и в конечном итоге и влияют на размер хекса вкупе с оптимизацией.
ALEKS1102X писал(а):
78499006
igorg10 писал(а):
78498883
ALEKS1102X писал(а):
78495058
igorg10 писал(а):
77857542
skumpol писал(а):
77855308Так. А где скачать 2.05? )
Постом раньше дана ссылка на архивы.
XC8 v2.10 работает и на атмел и на пиках.
Делаем как раньше, без изменений:
1. С раздачи берём файл xclm.exe.
2. В папке C:\Program Files (x86)\Microchip\xc8\v2.10\bin переименовываем файл xclm.exe в xclm.old.
3. В эту папку копируем файл с раздачи xclm.exe.
4. Копируем файлы xclm.old и xclm.exe с папки C:\Program Files (x86)\Microchip\xc8\v2.10\bin в папки C:\Program Files (x86)\Microchip\xc8\v2.10\pic\bin и C:\Program Files (x86)\Microchip\xc8\v2.10\avr\bin.
5. В папках C:\Program Files (x86)\Microchip\xc8\v2.10\pic\bin и C:\Program Files (x86)\Microchip\xc8\v2.10\avr\bin с правами администратора запускаем в командной строке файл xclm.exe.
6. Работаем.
А Вы уверены что эти действия действительно из пробной версии делают Про ?
Вот что у меня пишет на версию 1.44:
Microchip MPLAB XC8 C Compiler (PRO Mode) V1.44
Build date: Sep 13 2017
Part Support Version: 1.44
Copyright (C) 2017 Microchip Technology Inc.
License type: Node Configuration
И вот что на версию 2.10 после манипуляций выше:
Microchip MPLAB XC8 C Compiler V2.10
Build date: Jul 30 2019
Part Support Version: 2.10
Copyright (C) 2019 Microchip Technology Inc.
License type: Node Configuration
Вполне возможно что этот кряк ничего не сделал, а сам компилятор просто находится в пробном периоде (60 дней), поэтому позволяет включать режим "про"...
Причём по коду компилируемая программа прилично прибавила в весе, хотя вроде компилятор более свежий - должно быть наоборот...
License type: Node Configuration:) Через 60-ть дней поглядите.
Если запустить компилятор без манипуляций - будет написано тип лицензии - trial. И через 60-ть дней не даст включить оптимизацию.
По поводу размера hex файла - отличия не должны быть большими, если использовать один и тот же вид оптимизации компилятора.
Я имел ввиду что для версии 1.44 после компиляции, в окне прописывает в каком режиме стоит компилятор "Microchip MPLAB XC8 C Compiler (PRO Mode) V1.44",
а для новой версии никаких опознавательных, плюс ко всему ставлю оптимизацию любую из трёх, испытуемый проект всё равно получается 31916 байт:
Memory Summary:
Program space used 7CACh ( 31916) of 10000h bytes ( 48.7%)
Data space used 712h ( 1810) of F60h bytes ( 46.0%)

Configuration bits used 7h ( 7) of 7h words (100.0%)
EEPROM space used 100h ( 256) of 400h bytes ( 25.0%)
ID Location space used 8h ( 8) of 8h bytes (100.0%)
Data stack space used 0h ( 0) of 800h bytes ( 0.0%)
А в версии 1.44 в режиме "про" 31686 байт:
Memory Summary:
Program space used 7BC6h ( 31686) of F000h bytes ( 51.6%)
Data space used 6FEh ( 1790) of F5Fh bytes ( 45.5%)

Configuration bits used 7h ( 7) of 7h words (100.0%)
EEPROM space used 100h ( 256) of 400h bytes ( 25.0%)
ID Location space used 8h ( 8) of 8h bytes (100.0%)
Data stack space used 0h ( 0) of 800h bytes ( 0.0%)
У меня правда все компиляторы установлены не по дефолтному пути: C:\MPLABX\xc8\...
Может поэтому не получается его крякнуть...
Попробую переустановить по новому mplabx, xc8 v1.44 и v2.10 по умолчанию: C:\Program Files (x86)\Microchip\xc8\...
Попробуйте скомпилировать на чистом и пропатченном компиляторе с разными уровнями оптимизации. Разницу увидите. И вот такой вопрос - Вы скинули логи с разных проектов? Просто в Ваших логах разные размеры програмной памяти (выделил жирным).
Еще раз раз по поводу размера hex файла. Размер хекса напрямую зависит от версии компилятора, DFP, уровня оптимизации и настроек оптимизации (debug оптимизация, ассемблерный файл, собираетесь ли Вы использовать code coverage и пр. настроек, какой стиль (С90/С99)). Также размер файла зависит используете ли в проекте .h файлы, которые включили. В старших версиях (ХС16, ХС32) в настройках можно выбирать, включать ли в проект неиспользуемые файлы. В ХС8 прямо этого нет, но в любом случае в дисассемблерном файле можно погляеть, что компилятор включил и как он работает с инструкциями в си:). Так что универсальных рецептов нет по снижению/увеличению размера хекса:).
[Профиль]  [ЛС] 

ALEKS1102X

Стаж: 5 лет 10 месяцев

Сообщений: 14


ALEKS1102X · 14-Дек-19 17:01 (спустя 40 мин., ред. 14-Дек-19 17:01)

Нет это один и тот же проект на pic18f46k20. На чистом компиляторе не компилирует, почему-то он не видит этого файла "#include <pic18f46k20.h> ", или же что-то
в нём не нравится компилятору.
После патча он его компилирует, и вот что получается:
В версии 1.44 от 0х0000 до 0х7084 память занята, после от 0xF4A0 и до конца (0хFFFF), в конце это вывод надписей на графический индикатор.
Для версии 2.10 занято от нуля до 0х715А, и после в конце так же.
Почему один компилятор считает объём памяти до 0хF000 а второй аж на байт больше памяти мк - это наверное известно только разработчикам...
В первом случае, вероятно для чего-то резервирует...
"Попробуйте скомпилировать на чистом и пропатченном компиляторе с разными уровнями оптимизации. Разницу увидите."
В том то и дело что для компилятора 2.10 я выбираю любое значение "Free, Standart, Pro" а на выходе один и тот же результат...
[Профиль]  [ЛС] 

igorg10

Стаж: 15 лет 8 месяцев

Сообщений: 108

igorg10 · 14-Дек-19 17:15 (спустя 13 мин., ред. 14-Дек-19 17:15)

ALEKS1102X писал(а):
78499391Нет это один и тот же проект на pic18f46k20. На чистом компиляторе не компилирует, почему-то он не видит этого файла "#include <pic18f46k20.h> ", или же что-то
в нём не нравится компилятору.
После патча он его компилирует, и вот что получается:
В версии 1.44 от 0х0000 до 0х7084 память занята, после от 0xF4A0 и до конца (0хFFFF), в конце это вывод надписей на графический индикатор.
Для версии 2.10 занято от нуля до 0х715А, и после в конце так же.
Почему один компилятор считает объём памяти до 0хF000 а второй аж на байт больше памяти мк - это наверное известно только разработчикам...
В первом случае, вероятно для чего-то резервирует...
"Попробуйте скомпилировать на чистом и пропатченном компиляторе с разными уровнями оптимизации. Разницу увидите."
В том то и дело что для компилятора 2.10 я выбираю любое значение "Free, Standart, Pro" а на выходе один и тот же результат...
Нет это один и тот же проект на pic18f46k20. На чистом компиляторе не компилирует, почему-то он не видит этого файла "#include <pic18f46k20.h> ", или же что-то
в нём не нравится компилятору.
- В настройках проекта пропишите путь где установлен компилятор - propetries - general - source Folders. Не видит потому что компилятор стоит не по дефолтным путям.
Выберите разные уровни оптимизации - 0,1,2,3,S - в настройках проекта (XC8 Compiler - Option categories - optimizations). Увидете разницу. А как Вы выбираете "Free, Standart, Pro"?
[Профиль]  [ЛС] 

ALEKS1102X

Стаж: 5 лет 10 месяцев

Сообщений: 14


ALEKS1102X · 14-Дек-19 17:24 (спустя 9 мин., ред. 14-Дек-19 17:24)

igorg10 писал(а):
78499622
ALEKS1102X писал(а):
78499391Нет это один и тот же проект на pic18f46k20. На чистом компиляторе не компилирует, почему-то он не видит этого файла "#include <pic18f46k20.h> ", или же что-то
в нём не нравится компилятору.
После патча он его компилирует, и вот что получается:
В версии 1.44 от 0х0000 до 0х7084 память занята, после от 0xF4A0 и до конца (0хFFFF), в конце это вывод надписей на графический индикатор.
Для версии 2.10 занято от нуля до 0х715А, и после в конце так же.
Почему один компилятор считает объём памяти до 0хF000 а второй аж на байт больше памяти мк - это наверное известно только разработчикам...
В первом случае, вероятно для чего-то резервирует...
"Попробуйте скомпилировать на чистом и пропатченном компиляторе с разными уровнями оптимизации. Разницу увидите."
В том то и дело что для компилятора 2.10 я выбираю любое значение "Free, Standart, Pro" а на выходе один и тот же результат...
Выберите разные уровни оптимизации - 0,1,2,3,S - в настройках проекта. Увидете разницу. А как Вы выбираете "Free, Standart, Pro"?
Про уровни "0 - S" - это где выбирается ???
А про уровни "Free, Standart, Pro" - дык слева снизу в mplabx окно "название проекта - Dashboard" - в нём на ключик, дальше левой кнопкой
"XC8 complier" -> Optimizations и там уже снизу выбираю, напомню что в 1.44 это всё давно работает..
Можно на выбор выйти и по другому: File/ Project Properties (название проекта) - так далее...
https://yadi.sk/i/xSsdaoJqoFkY1Q
[Профиль]  [ЛС] 

igorg10

Стаж: 15 лет 8 месяцев

Сообщений: 108

igorg10 · 14-Дек-19 18:03 (спустя 39 мин., ред. 14-Дек-19 18:03)

ALEKS1102X писал(а):
78499684
igorg10 писал(а):
78499622
ALEKS1102X писал(а):
78499391Нет это один и тот же проект на pic18f46k20. На чистом компиляторе не компилирует, почему-то он не видит этого файла "#include <pic18f46k20.h> ", или же что-то
в нём не нравится компилятору.
После патча он его компилирует, и вот что получается:
В версии 1.44 от 0х0000 до 0х7084 память занята, после от 0xF4A0 и до конца (0хFFFF), в конце это вывод надписей на графический индикатор.
Для версии 2.10 занято от нуля до 0х715А, и после в конце так же.
Почему один компилятор считает объём памяти до 0хF000 а второй аж на байт больше памяти мк - это наверное известно только разработчикам...
В первом случае, вероятно для чего-то резервирует...
"Попробуйте скомпилировать на чистом и пропатченном компиляторе с разными уровнями оптимизации. Разницу увидите."
В том то и дело что для компилятора 2.10 я выбираю любое значение "Free, Standart, Pro" а на выходе один и тот же результат...
Выберите разные уровни оптимизации - 0,1,2,3,S - в настройках проекта. Увидете разницу. А как Вы выбираете "Free, Standart, Pro"?
Про уровни "0 - S" - это где выбирается ???
А про уровни "Free, Standart, Pro" - дык слева снизу в mplabx окно "название проекта - Dashboard" - в нём на ключик, дальше левой кнопкой
"XC8 complier" -> Optimizations и там уже снизу выбираю, напомню что в 1.44 это всё давно работает..
Можно на выбор выйти и по другому: File/ Project Properties (название проекта) - так далее...
https://yadi.sk/i/xSsdaoJqoFkY1Q
Вот так надо:
https://img15.lostpic.net/2019/12/14/94404cae889c5683e2d0ae7a6cdb5358.png
И у компилятора, если он не free, нет уровня выбора Free, Standart, Pro:
https://img15.lostpic.net/2019/12/14/69980196a9802f764079cc3fc836d25e.png
[Профиль]  [ЛС] 

ALEKS1102X

Стаж: 5 лет 10 месяцев

Сообщений: 14


ALEKS1102X · 14-Дек-19 18:15 (спустя 11 мин., ред. 14-Дек-19 18:19)

А у меня нету такого окошка!
https://yadi.sk/i/QhmnXo33LqedEA
Так и не это главное, в окне компиляторов которые я могу выбрать для проекта у меня числится версия 2.10,
и она компилирует проект, но с одним уровнем, скорее всего "Free"
На всякий случай я прописал путь "где установлен компилятор - propetries - general - source Folders" - не помогло...
Скорее всего (если у кого-то действительно работает) нужно переустановить оболочку и компиляторы по умолчанию "C:\Program Files (x86)\Microchip\xc8\"
А по поводу оптимизации "0-S" скорее всего у Вас более новая MPLABX установлена, а у меня нет этого окна.
"И у компилятора, если он не free, нет уровня выбора Free, Standart, Pro:" - а Вы мне скажите какая у Вас версия MPLABX ?
У меня стоит 4.15, и нету у меня окна оптимизации 0 - S. Да собственно какая разница - в прошлых был выбор Free, Standart, Pro, в новых стало 0,1,2,3 и т.д..
Что изменилось то ? Под уровень micro C подвели ? От названия переменных их сумма не меняется...
А у меня от изменения переменной сумма не меняется...
[Профиль]  [ЛС] 

igorg10

Стаж: 15 лет 8 месяцев

Сообщений: 108

igorg10 · 14-Дек-19 18:28 (спустя 12 мин., ред. 14-Дек-19 18:28)

ALEKS1102X писал(а):
78500076А у меня нету такого окошка!
https://yadi.sk/i/QhmnXo33LqedEA
Так и не это главное, в окне компиляторов которые я могу выбрать для проекта у меня числится версия 2.10,
и она компилирует проект, но с одним уровнем, скорее всего "Free"
На всякий случай я прописал путь "где установлен компилятор - propetries - general - source Folders" - не помогло...
Скорее всего (если у кого-то действительно работает) нужно переустановить оболочку и компиляторы
А по поводу оптимизации "0-S" скорее всего у Вас более новая MPLABX установлена, а у меня нет этого окна.
MPLABX ver 5.30, насколько помню выбор оптимизации 0-S был всегда, оптимизация - это опция компилятора, IDE не при делах. На работе покупные компиляторы (требование заказчика), всё то же самое. А если изменить у Вас опцию Favor Optimization For - размер хекса такой же?
Установите новый IDE, кто мешает? Работает лучше и стабильнее.
На всякий случай я прописал путь "где установлен компилятор - propetries - general - source Folders" - не помогло...
Надо ещё правильно прописать в коде инклуд - #include "путь_где_лежит_файл/файл.h" - в случае если начать писать правильно, IDE сама будет подставлять путь.
Да, вот ещё, откройте командную строку, перейдите в папку где установлен компилятор, наберите комнду xclm, если будет ответ - Node Configuration - всё нормально, компилятор может работать в любом режиме оптимизации.
[Профиль]  [ЛС] 

ALEKS1102X

Стаж: 5 лет 10 месяцев

Сообщений: 14


ALEKS1102X · 14-Дек-19 22:08 (спустя 3 часа, ред. 14-Дек-19 22:08)

igorg10 писал(а):
78500141
ALEKS1102X писал(а):
78500076А у меня нету такого окошка!
https://yadi.sk/i/QhmnXo33LqedEA
Так и не это главное, в окне компиляторов которые я могу выбрать для проекта у меня числится версия 2.10,
и она компилирует проект, но с одним уровнем, скорее всего "Free"
На всякий случай я прописал путь "где установлен компилятор - propetries - general - source Folders" - не помогло...
Скорее всего (если у кого-то действительно работает) нужно переустановить оболочку и компиляторы
А по поводу оптимизации "0-S" скорее всего у Вас более новая MPLABX установлена, а у меня нет этого окна.
MPLABX ver 5.30, насколько помню выбор оптимизации 0-S был всегда, оптимизация - это опция компилятора, IDE не при делах. На работе покупные компиляторы (требование заказчика), всё то же самое. А если изменить у Вас опцию Favor Optimization For - размер хекса такой же?
Установите новый IDE, кто мешает? Работает лучше и стабильнее.
На всякий случай я прописал путь "где установлен компилятор - propetries - general - source Folders" - не помогло...
Надо ещё правильно прописать в коде инклуд - #include "путь_где_лежит_файл/файл.h" - в случае если начать писать правильно, IDE сама будет подставлять путь.
От этого "Favor Optimization For" в версии 1.44 точно меняется, если установить "Space", то повторяющиеся кучки команд превращаются в подпрограммы, т.е. добавляются
команды "call - return" а одинаковый код превращается в ПП, в компиляторе 2.10 это тоже не исключение, но это всё скорее всего для режима самой низкой оптимизации "Free":
Memory Summary:
Program space used 73F2h ( 29682) of 10000h bytes ( 45.3%)
Data space used 712h ( 1810) of F60h bytes ( 46.0%)
Configuration bits used 7h ( 7) of 7h words (100.0%)
EEPROM space used 100h ( 256) of 400h bytes ( 25.0%)
ID Location space used 8h ( 8) of 8h bytes (100.0%)
Data stack space used 0h ( 0) of 800h bytes ( 0.0%)
Да короче, чего переливать то из пустого в порожнее - переставлю и оболочку и компилляторы, а там буду посмотреть...
Меня то в принципе и 1.44 устраивает, да и около года назад пытался MPLABX больше 4.15 поставить - что-то мне в нём не понравилось, а что не помню...
читал я все 6 стр. этого топика, пытался посмотреть через командную строку как Вы ранее указывали челу - чёт ничего у меня не получилось...
https://yadi.sk/i/K4bI3CPNsr5bNw
Ну что, переставил, ощущение такое что поцеловал в жо... ёжика. Ну в версии 2.10 появилось это - оптимизация или как её назвать " 0-S",
ну поставил на "S" - ну получил в основном коде эти переходы на ранее мной описанные подпрограммы. А мне они не нужны, если я захочу чтобы код был подпрограммой - я его сделаю функцией.
В какое положение мне теперь поставить эту оптимизацию - чтобы не было бездумных созданий ПП в угоду размеру кода ?
Теперь второе - из окна выходного файла напрочь пропало в каком состоянии находится этот компилятор:
скрытый текст
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'C:/Temp_MPLABX/P18_hx1230.X'
make -f nbproject/Makefile-default.mk dist/default/production/P18_hx1230.X.production.hex
make[2]: Entering directory 'C:/Temp_MPLABX/P18_hx1230.X'
"C:\Program Files (x86)\Microchip\xc8\v2.10\bin\xc8-cc.exe" -mcpu=18F46K20 -c -fno-short-double -fno-short-float -memi=wordwrite -Os -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=default -msummary=-psect,-class,+mem,-hex,-file -ginhx032 -Wl,--data-init -mno-keep-startup -mno-download -mdefault-config-bits -std=c90 -gcoff -mstack=compiled:auto:auto:auto -o build/default/production/Spidometr.p1 Spidometr.c
Spidometr.h:272:21: warning: (2038) use of short long integer types is deprecated; use __int24 or __uint24 to avoid this warning
Spidometr.h:278:30: warning: (2038) use of short long integer types is deprecated; use __int24 or __uint24 to avoid this warning
Spidometr.h:279:30: warning: (2038) use of short long integer types is deprecated; use __int24 or __uint24 to avoid this warning
Spidometr.h:432:29: warning: (2038) use of short long integer types is deprecated; use __int24 or __uint24 to avoid this warning
Spidometr.c:62:7: warning: (1385) variable "WR" is deprecated (declared at Spidometr.c:62)
Spidometr.c:63:1: warning: (1385) variable "WR" is deprecated (declared at Spidometr.c:63)
Spidometr.c:83:7: warning: (1385) variable "WR" is deprecated (declared at Spidometr.c:83)
Spidometr.c:103:49: warning: (346) declaration of "Bit_time_WR" hides outer declaration
Spidometr.c:112:34: warning: (373) implicit signed to unsigned conversion
Spidometr.c:114:91: warning: (373) implicit signed to unsigned conversion
Spidometr.c:338:21: warning: (2038) use of short long integer types is deprecated; use __int24 or __uint24 to avoid this warning
Spidometr.c:365:19: warning: (359) illegal conversion between pointer types
pointer to const unsigned char -> pointer to unsigned char
Spidometr.c:367:23: warning: (359) illegal conversion between pointer types
pointer to const unsigned char -> pointer to unsigned char
Spidometr.c:369:19: warning: (359) illegal conversion between pointer types
pointer to const unsigned char -> pointer to unsigned char
Spidometr.c:400:21: warning: (2038) use of short long integer types is deprecated; use __int24 or __uint24 to avoid this warning
Spidometr.c:491:21: warning: (2038) use of short long integer types is deprecated; use __int24 or __uint24 to avoid this warning
Spidometr.c:503:58: warning: (373) implicit signed to unsigned conversion
Spidometr.c:595:21: warning: (2038) use of short long integer types is deprecated; use __int24 or __uint24 to avoid this warning
Spidometr.c:667:33: warning: (373) implicit signed to unsigned conversion
Spidometr.c:668:38: warning: (373) implicit signed to unsigned conversion
"C:\Program Files (x86)\Microchip\xc8\v2.10\bin\xc8-cc.exe" -mcpu=18F46K20 -Wl,-Map=dist/default/production/P18_hx1230.X.production.map -DXPRJ_default=default -Wl,--defsym=__MPLAB_BUILD=1 -fno-short-double -fno-short-float -memi=wordwrite -Os -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx032 -Wl,--data-init -mno-keep-startup -mno-download -mdefault-config-bits -std=c90 -gcoff -mstack=compiled:auto:auto:auto -Wl,--memorysummary,dist/default/production/memoryfile.xml -o dist/default/production/P18_hx1230.X.production.cof build/default/production/Spidometr.p1 build/default/production/init_cpu.p1 build/default/production/hx1230_lib.p1 build/default/production/delay.p1 build/default/production/interrupt.p1 build/default/production/indikaciya.p1 build/default/production/Eeprom.p1 build/default/production/I2C_soft.p1 build/default/production/Probeg.p1 build/default/production/Function.p1 build/default/production/Menu_osn.p1
Non line specific message::: advisory: (1492) using updated 32-bit floating-point libraries; improved accuracy might increase code size
Spidometr.c:62:: warning: (1385) variable "_WR" is deprecated (declared at C:\Program Files (x86)\Microchip\xc8\v2.10\pic\include\pic18f46k20.h:9307)
Spidometr.c:63:: warning: (1385) variable "_WR" is deprecated (declared at C:\Program Files (x86)\Microchip\xc8\v2.10\pic\include\pic18f46k20.h:9307)
Spidometr.c:83:: warning: (1385) variable "_WR" is deprecated (declared at C:\Program Files (x86)\Microchip\xc8\v2.10\pic\include\pic18f46k20.h:9307)
hx1230_lib.c:270:: warning: (765) degenerate unsigned comparison
Eeprom.c:49:: warning: (1385) variable "_RD" is deprecated (declared at C:\Program Files (x86)\Microchip\xc8\v2.10\pic\include\pic18f46k20.h:8668)
Eeprom.c:61:: warning: (751) arithmetic overflow in constant expression
hx1230_lib.c:185:: warning: (520) function "_LCD_Print" is never called
hx1230_lib.c:245:: warning: (520) function "_LCD_Inverse" is never called
delay.c:20:: warning: (520) function "_Delay_2us" is never called
delay.c:24:: warning: (520) function "_Delay_2_5us" is never called
delay.c:28:: warning: (520) function "_Delay_3us" is never called
delay.c:32:: warning: (520) function "_Delay_3_5us" is never called
delay.c:36:: warning: (520) function "_Delay_4us" is never called
delay.c:40:: warning: (520) function "_Delay_4_5us" is never called
delay.c:44:: warning: (520) function "_Delay_5us" is never called
delay.c:48:: warning: (520) function "_Delay_6us" is never called
delay.c:60:: warning: (520) function "_Delay_30us" is never called
delay.c:64:: warning: (520) function "_Delay_50us" is never called
delay.c:84:: warning: (520) function "_Delay_1s" is never called
fonts.h:238:: warning: (1090) variable "fonts@mass16x32" is not used
fonts.h:238:: warning: (1090) variable "fonts@mass16x32" is not used
fonts.h:238:: warning: (1090) variable "fonts@mass16x32" is not used
fonts.h:238:: warning: (1090) variable "fonts@mass16x32" is not used
fonts.h:238:: warning: (1090) variable "fonts@mass16x32" is not used
fonts.h:238:: warning: (1090) variable "fonts@mass16x32" is not used
fonts.h:238:: warning: (1090) variable "fonts@mass16x32" is not used
fonts.h:238:: warning: (1090) variable "fonts@mass16x32" is not used
fonts.h:238:: warning: (1090) variable "fonts@mass16x32" is not used
fonts.h:238:: warning: (1090) variable "_mass16x32" is not used
fonts.h:290:: warning: (1090) variable "fonts@mass10x16" is not used
fonts.h:290:: warning: (1090) variable "fonts@mass10x16" is not used
fonts.h:290:: warning: (1090) variable "fonts@mass10x16" is not used
fonts.h:290:: warning: (1090) variable "fonts@mass10x16" is not used
fonts.h:290:: warning: (1090) variable "fonts@mass10x16" is not used
fonts.h:290:: warning: (1090) variable "fonts@mass10x16" is not used
fonts.h:290:: warning: (1090) variable "fonts@mass10x16" is not used
fonts.h:290:: warning: (1090) variable "fonts@mass10x16" is not used
fonts.h:290:: warning: (1090) variable "fonts@mass10x16" is not used
fonts.h:290:: warning: (1090) variable "_mass10x16" is not used
I2C_soft.c:182:: warning: (1257) local variable "_data" is used but never given a value
Memory Summary:
Program space used 73F6h ( 29686) of 10000h bytes ( 45.3%)
Data space used 712h ( 1810) of F60h bytes ( 46.0%)
Configuration bits used 7h ( 7) of 7h words (100.0%)
EEPROM space used 100h ( 256) of 400h bytes ( 25.0%)
ID Location space used 8h ( 8) of 8h bytes (100.0%)
Data stack space used 0h ( 0) of 800h bytes ( 0.0%)
make[2]: Leaving directory 'C:/Temp_MPLABX/P18_hx1230.X'
make[1]: Leaving directory 'C:/Temp_MPLABX/P18_hx1230.X'
BUILD SUCCESSFUL (total time: 34s)
Loading code from C:/Temp_MPLABX/P18_hx1230.X/dist/default/production/P18_hx1230.X.production.hex...
Loading completed
То биш - где вот такая инфа только для текущей версии:
Microchip MPLAB XC8 C Compiler (PRO Mode) V1.44
Build date: Sep 13 2017
Part Support Version: 1.44
Copyright (C) 2017 Microchip Technology Inc.
License type: Node Configuration
На варнинги не смотрите, преобразования из флоат в целое и наоборот я конечно не выкину из кода, а остальное...
А для остального и оставляю предупреждения - чтобы знать где и каким образом накосячил...
В общем, я ещё немного конечно повишу на этом 2.10, но лучше 1.44 пока альтернативы не вижу для себя лично.
Кстати, в 1.44 так и осталась нормальная оптимизация:
1. по скорости или по объёму кода
2. три варианта "free, std, pro" по выкидыванию из кода бесполезных команд и ненужного использования локальных регистров...
[Профиль]  [ЛС] 

igorg10

Стаж: 15 лет 8 месяцев

Сообщений: 108

igorg10 · 15-Дек-19 10:50 (спустя 12 часов, ред. 19-Дек-19 08:34)

ALEKS1102X писал(а):
78500245
igorg10 писал(а):
78500141
ALEKS1102X писал(а):
78500076А у меня нету такого окошка!
https://yadi.sk/i/QhmnXo33LqedEA
Так и не это главное, в окне компиляторов которые я могу выбрать для проекта у меня числится версия 2.10,
и она компилирует проект, но с одним уровнем, скорее всего "Free"
На всякий случай я прописал путь "где установлен компилятор - propetries - general - source Folders" - не помогло...
Скорее всего (если у кого-то действительно работает) нужно переустановить оболочку и компиляторы
А по поводу оптимизации "0-S" скорее всего у Вас более новая MPLABX установлена, а у меня нет этого окна.
MPLABX ver 5.30, насколько помню выбор оптимизации 0-S был всегда, оптимизация - это опция компилятора, IDE не при делах. На работе покупные компиляторы (требование заказчика), всё то же самое. А если изменить у Вас опцию Favor Optimization For - размер хекса такой же?
Установите новый IDE, кто мешает? Работает лучше и стабильнее.
На всякий случай я прописал путь "где установлен компилятор - propetries - general - source Folders" - не помогло...
Надо ещё правильно прописать в коде инклуд - #include "путь_где_лежит_файл/файл.h" - в случае если начать писать правильно, IDE сама будет подставлять путь.
От этого "Favor Optimization For" в версии 1.44 точно меняется, если установить "Space", то повторяющиеся кучки команд превращаются в подпрограммы, т.е. добавляются
команды "call - return" а одинаковый код превращается в ПП, в компиляторе 2.10 это тоже не исключение, но это всё скорее всего для режима самой низкой оптимизации "Free":
Memory Summary:
Program space used 73F2h ( 29682) of 10000h bytes ( 45.3%)
Data space used 712h ( 1810) of F60h bytes ( 46.0%)
Configuration bits used 7h ( 7) of 7h words (100.0%)
EEPROM space used 100h ( 256) of 400h bytes ( 25.0%)
ID Location space used 8h ( 8) of 8h bytes (100.0%)
Data stack space used 0h ( 0) of 800h bytes ( 0.0%)
Да короче, чего переливать то из пустого в порожнее - переставлю и оболочку и компилляторы, а там буду посмотреть...
Меня то в принципе и 1.44 устраивает, да и около года назад пытался MPLABX больше 4.15 поставить - что-то мне в нём не понравилось, а что не помню...
читал я все 6 стр. этого топика, пытался посмотреть через командную строку как Вы ранее указывали челу - чёт ничего у меня не получилось...
https://yadi.sk/i/K4bI3CPNsr5bNw
Ну что, переставил, ощущение такое что поцеловал в жо... ёжика. Ну в версии 2.10 появилось это - оптимизация или как её назвать " 0-S",
ну поставил на "S" - ну получил в основном коде эти переходы на ранее мной описанные подпрограммы. А мне они не нужны, если я захочу чтобы код был подпрограммой - я его сделаю функцией.
В какое положение мне теперь поставить эту оптимизацию - чтобы не было бездумных созданий ПП в угоду размеру кода ?
Теперь второе - из окна выходного файла напрочь пропало в каком состоянии находится этот компилятор:
скрытый текст
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'C:/Temp_MPLABX/P18_hx1230.X'
make -f nbproject/Makefile-default.mk dist/default/production/P18_hx1230.X.production.hex
make[2]: Entering directory 'C:/Temp_MPLABX/P18_hx1230.X'
"C:\Program Files (x86)\Microchip\xc8\v2.10\bin\xc8-cc.exe" -mcpu=18F46K20 -c -fno-short-double -fno-short-float -memi=wordwrite -Os -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=default -msummary=-psect,-class,+mem,-hex,-file -ginhx032 -Wl,--data-init -mno-keep-startup -mno-download -mdefault-config-bits -std=c90 -gcoff -mstack=compiled:auto:auto:auto -o build/default/production/Spidometr.p1 Spidometr.c
Spidometr.h:272:21: warning: (2038) use of short long integer types is deprecated; use __int24 or __uint24 to avoid this warning
Spidometr.h:278:30: warning: (2038) use of short long integer types is deprecated; use __int24 or __uint24 to avoid this warning
Spidometr.h:279:30: warning: (2038) use of short long integer types is deprecated; use __int24 or __uint24 to avoid this warning
Spidometr.h:432:29: warning: (2038) use of short long integer types is deprecated; use __int24 or __uint24 to avoid this warning
Spidometr.c:62:7: warning: (1385) variable "WR" is deprecated (declared at Spidometr.c:62)
Spidometr.c:63:1: warning: (1385) variable "WR" is deprecated (declared at Spidometr.c:63)
Spidometr.c:83:7: warning: (1385) variable "WR" is deprecated (declared at Spidometr.c:83)
Spidometr.c:103:49: warning: (346) declaration of "Bit_time_WR" hides outer declaration
Spidometr.c:112:34: warning: (373) implicit signed to unsigned conversion
Spidometr.c:114:91: warning: (373) implicit signed to unsigned conversion
Spidometr.c:338:21: warning: (2038) use of short long integer types is deprecated; use __int24 or __uint24 to avoid this warning
Spidometr.c:365:19: warning: (359) illegal conversion between pointer types
pointer to const unsigned char -> pointer to unsigned char
Spidometr.c:367:23: warning: (359) illegal conversion between pointer types
pointer to const unsigned char -> pointer to unsigned char
Spidometr.c:369:19: warning: (359) illegal conversion between pointer types
pointer to const unsigned char -> pointer to unsigned char
Spidometr.c:400:21: warning: (2038) use of short long integer types is deprecated; use __int24 or __uint24 to avoid this warning
Spidometr.c:491:21: warning: (2038) use of short long integer types is deprecated; use __int24 or __uint24 to avoid this warning
Spidometr.c:503:58: warning: (373) implicit signed to unsigned conversion
Spidometr.c:595:21: warning: (2038) use of short long integer types is deprecated; use __int24 or __uint24 to avoid this warning
Spidometr.c:667:33: warning: (373) implicit signed to unsigned conversion
Spidometr.c:668:38: warning: (373) implicit signed to unsigned conversion
"C:\Program Files (x86)\Microchip\xc8\v2.10\bin\xc8-cc.exe" -mcpu=18F46K20 -Wl,-Map=dist/default/production/P18_hx1230.X.production.map -DXPRJ_default=default -Wl,--defsym=__MPLAB_BUILD=1 -fno-short-double -fno-short-float -memi=wordwrite -Os -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx032 -Wl,--data-init -mno-keep-startup -mno-download -mdefault-config-bits -std=c90 -gcoff -mstack=compiled:auto:auto:auto -Wl,--memorysummary,dist/default/production/memoryfile.xml -o dist/default/production/P18_hx1230.X.production.cof build/default/production/Spidometr.p1 build/default/production/init_cpu.p1 build/default/production/hx1230_lib.p1 build/default/production/delay.p1 build/default/production/interrupt.p1 build/default/production/indikaciya.p1 build/default/production/Eeprom.p1 build/default/production/I2C_soft.p1 build/default/production/Probeg.p1 build/default/production/Function.p1 build/default/production/Menu_osn.p1
Non line specific message::: advisory: (1492) using updated 32-bit floating-point libraries; improved accuracy might increase code size
Spidometr.c:62:: warning: (1385) variable "_WR" is deprecated (declared at C:\Program Files (x86)\Microchip\xc8\v2.10\pic\include\pic18f46k20.h:9307)
Spidometr.c:63:: warning: (1385) variable "_WR" is deprecated (declared at C:\Program Files (x86)\Microchip\xc8\v2.10\pic\include\pic18f46k20.h:9307)
Spidometr.c:83:: warning: (1385) variable "_WR" is deprecated (declared at C:\Program Files (x86)\Microchip\xc8\v2.10\pic\include\pic18f46k20.h:9307)
hx1230_lib.c:270:: warning: (765) degenerate unsigned comparison
Eeprom.c:49:: warning: (1385) variable "_RD" is deprecated (declared at C:\Program Files (x86)\Microchip\xc8\v2.10\pic\include\pic18f46k20.h:8668)
Eeprom.c:61:: warning: (751) arithmetic overflow in constant expression
hx1230_lib.c:185:: warning: (520) function "_LCD_Print" is never called
hx1230_lib.c:245:: warning: (520) function "_LCD_Inverse" is never called
delay.c:20:: warning: (520) function "_Delay_2us" is never called
delay.c:24:: warning: (520) function "_Delay_2_5us" is never called
delay.c:28:: warning: (520) function "_Delay_3us" is never called
delay.c:32:: warning: (520) function "_Delay_3_5us" is never called
delay.c:36:: warning: (520) function "_Delay_4us" is never called
delay.c:40:: warning: (520) function "_Delay_4_5us" is never called
delay.c:44:: warning: (520) function "_Delay_5us" is never called
delay.c:48:: warning: (520) function "_Delay_6us" is never called
delay.c:60:: warning: (520) function "_Delay_30us" is never called
delay.c:64:: warning: (520) function "_Delay_50us" is never called
delay.c:84:: warning: (520) function "_Delay_1s" is never called
fonts.h:238:: warning: (1090) variable "fonts@mass16x32" is not used
fonts.h:238:: warning: (1090) variable "fonts@mass16x32" is not used
fonts.h:238:: warning: (1090) variable "fonts@mass16x32" is not used
fonts.h:238:: warning: (1090) variable "fonts@mass16x32" is not used
fonts.h:238:: warning: (1090) variable "fonts@mass16x32" is not used
fonts.h:238:: warning: (1090) variable "fonts@mass16x32" is not used
fonts.h:238:: warning: (1090) variable "fonts@mass16x32" is not used
fonts.h:238:: warning: (1090) variable "fonts@mass16x32" is not used
fonts.h:238:: warning: (1090) variable "fonts@mass16x32" is not used
fonts.h:238:: warning: (1090) variable "_mass16x32" is not used
fonts.h:290:: warning: (1090) variable "fonts@mass10x16" is not used
fonts.h:290:: warning: (1090) variable "fonts@mass10x16" is not used
fonts.h:290:: warning: (1090) variable "fonts@mass10x16" is not used
fonts.h:290:: warning: (1090) variable "fonts@mass10x16" is not used
fonts.h:290:: warning: (1090) variable "fonts@mass10x16" is not used
fonts.h:290:: warning: (1090) variable "fonts@mass10x16" is not used
fonts.h:290:: warning: (1090) variable "fonts@mass10x16" is not used
fonts.h:290:: warning: (1090) variable "fonts@mass10x16" is not used
fonts.h:290:: warning: (1090) variable "fonts@mass10x16" is not used
fonts.h:290:: warning: (1090) variable "_mass10x16" is not used
I2C_soft.c:182:: warning: (1257) local variable "_data" is used but never given a value
Memory Summary:
Program space used 73F6h ( 29686) of 10000h bytes ( 45.3%)
Data space used 712h ( 1810) of F60h bytes ( 46.0%)
Configuration bits used 7h ( 7) of 7h words (100.0%)
EEPROM space used 100h ( 256) of 400h bytes ( 25.0%)
ID Location space used 8h ( 8) of 8h bytes (100.0%)
Data stack space used 0h ( 0) of 800h bytes ( 0.0%)
make[2]: Leaving directory 'C:/Temp_MPLABX/P18_hx1230.X'
make[1]: Leaving directory 'C:/Temp_MPLABX/P18_hx1230.X'
BUILD SUCCESSFUL (total time: 34s)
Loading code from C:/Temp_MPLABX/P18_hx1230.X/dist/default/production/P18_hx1230.X.production.hex...
Loading completed
То биш - где вот такая инфа только для текущей версии:
Microchip MPLAB XC8 C Compiler (PRO Mode) V1.44
Build date: Sep 13 2017
Part Support Version: 1.44
Copyright (C) 2017 Microchip Technology Inc.
License type: Node Configuration
На варнинги не смотрите, преобразования из флоат в целое и наоборот я конечно не выкину из кода, а остальное...
А для остального и оставляю предупреждения - чтобы знать где и каким образом накосячил...
В общем, я ещё немного конечно повишу на этом 2.10, но лучше 1.44 пока альтернативы не вижу для себя лично.
Кстати, в 1.44 так и осталась нормальная оптимизация:
1. по скорости или по объёму кода
2. три варианта "free, std, pro" по выкидыванию из кода бесполезных команд и ненужного использования локальных регистров...
Ну давайте по-порядку:)
1. три варианта "free, std, pro" по выкидыванию из кода бесполезных команд и ненужного использования локальных регистров... В текущей версии (и вообще в версии ХС8 2.Х) нет компилятора в версии standart. Есть только Pro и Free - читаем Installing and Licensing MPLAB XC C Compiler, стр.17 внизу.
2. В варианте Pro доступны уровни оптимизации. Какой уровень оптимизации используется - это можно увидеть и в настройках проекта и при запуске компилятора командой make, например:
CLEAN SUCCESSFUL (total time: 54ms)
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory '/Users/igorimac/MPLABXProjects/***.X'
make -f nbproject/Makefile-default.mk dist/default/production/***.hex
make[2]: Entering directory '/Users/igorimac/MPLABXProjects/***.X'
"/Applications/microchip/xc8/v2.10/bin/xc8-cc" -mcpu=18F26K22 -c -fno-short-double -fno-short-float -memi=wordwrite -O3
Вот эта опция компилятора (выделена жирным, make не полностью приведён) и отвечает за уровень оптимизации. Увидеть эти строки можно в самом начале окна, после нажатия кнопки make.
3.ну поставил на "S" - ну получил в основном коде эти переходы на ранее мной описанные подпрограммы. А мне они не нужны, если я захочу чтобы код был подпрограммой - я его сделаю функцией.
В какое положение мне теперь поставить эту оптимизацию - чтобы не было бездумных созданий ПП в угоду размеру кода ?

опция S - оптимизировать по размеру. Соответственно компилятор чтобы уменьшить размер ПП и выделяет повторяющиеся куски в подпрограммы. Используйте 1 или 2 или 3. 0 отключает оптимизацию, нужна для отладки, естественно если есть отладчик:).
4. ХС8 версии 2.Х задумывался как компилятор, полностью поддерживающий всю линейку 8-ми битных контроллеров микрочипа, как пиков, так и атмелов. Также только ХС8 2.Х будет работать на 64-х битах ОС в будущих релизах (читаем release notes). Поэтому, если не нужна поддержка атмелов, не нужна поддержка новых 8-ми разрядных пиков (например 16F18455, 16F18456, 18F57Q43, 18F47Q43, 18F27Q43, 18F57Q83, 18F56Q83, 18F47Q83, 18F46Q83, 18F27Q83, 18F26Q83, 18F57Q84, 18F56Q84, 18F47Q84, 18F46Q84, 18F27Q84 и пр.) и не планируется использовать только 64-х битную операционную систему (например, у меня 2 компа с мак OS - один обновил до последней версии Mac OS - Catalina ( а она поддерживает только 64-х битные программы) - mplabX и компиляторы не запускаются), не нужен code coverage - тогда можно смело использовать ХС8 1.44. Больше апгрейд, кроме случаев указанных выше, не нужен. Хотя прогресс не остановить:) Ну и не забываем, что в ХС8 2.05 и выше можем использовать всю прелесть С99, включая библиотеки С99.
5. Кстати, вот что они сделали в версии 2.05 - Unlicensed (Free) versions of this compiler now allow optimizations up to and including level 2. This will permit a similar, although not identical, output to what was previously possible using a Standard license. Virtually all code generation optimizations are now enabled regardless of the license type, but most assembler optimizations still require a PRO license for them to be enabled. The --mode option to the legacy driver, xc8, no longer has any effect.. Т.е до уровня 2 (включая его) компилятор в режиме FREE оптимизирует, т.е работает в режиме PRO (Виртуально оптимизация возможна вне зависимости от типа лицензии, хотя многие ассемблерные инструкции требуют лицензию PRO:)). А уровни 3 и S доступны только в PRO.
[Профиль]  [ЛС] 

ALEKS1102X

Стаж: 5 лет 10 месяцев

Сообщений: 14


ALEKS1102X · 24-Дек-19 23:18 (спустя 9 дней)

igorg10 писал(а):
Ну давайте по-порядку:)
1. три варианта "free, std, pro" по выкидыванию из кода бесполезных команд и ненужного использования локальных регистров... В текущей версии (и вообще в версии ХС8 2.Х) нет компилятора в версии standart. Есть только Pro и Free - читаем Installing and Licensing MPLAB XC C Compiler, стр.17 внизу.
2. В варианте Pro доступны уровни оптимизации. Какой уровень оптимизации используется - это можно увидеть и в настройках проекта и при запуске компилятора командой make, например:
CLEAN SUCCESSFUL (total time: 54ms)
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory '/Users/igorimac/MPLABXProjects/***.X'
make -f nbproject/Makefile-default.mk dist/default/production/***.hex
make[2]: Entering directory '/Users/igorimac/MPLABXProjects/***.X'
"/Applications/microchip/xc8/v2.10/bin/xc8-cc" -mcpu=18F26K22 -c -fno-short-double -fno-short-float -memi=wordwrite -O3
Вот эта опция компилятора (выделена жирным, make не полностью приведён) и отвечает за уровень оптимизации. Увидеть эти строки можно в самом начале окна, после нажатия кнопки make.
3.ну поставил на "S" - ну получил в основном коде эти переходы на ранее мной описанные подпрограммы. А мне они не нужны, если я захочу чтобы код был подпрограммой - я его сделаю функцией.
В какое положение мне теперь поставить эту оптимизацию - чтобы не было бездумных созданий ПП в угоду размеру кода ?

опция S - оптимизировать по размеру. Соответственно компилятор чтобы уменьшить размер ПП и выделяет повторяющиеся куски в подпрограммы. Используйте 1 или 2 или 3. 0 отключает оптимизацию, нужна для отладки, естественно если есть отладчик:).
4. ХС8 версии 2.Х задумывался как компилятор, полностью поддерживающий всю линейку 8-ми битных контроллеров микрочипа, как пиков, так и атмелов. Также только ХС8 2.Х будет работать на 64-х битах ОС в будущих релизах (читаем release notes). Поэтому, если не нужна поддержка атмелов, не нужна поддержка новых 8-ми разрядных пиков (например 16F18455, 16F18456, 18F57Q43, 18F47Q43, 18F27Q43, 18F57Q83, 18F56Q83, 18F47Q83, 18F46Q83, 18F27Q83, 18F26Q83, 18F57Q84, 18F56Q84, 18F47Q84, 18F46Q84, 18F27Q84 и пр.) и не планируется использовать только 64-х битную операционную систему (например, у меня 2 компа с мак OS - один обновил до последней версии Mac OS - Catalina ( а она поддерживает только 64-х битные программы) - mplabX и компиляторы не запускаются), не нужен code coverage - тогда можно смело использовать ХС8 1.44. Больше апгрейд, кроме случаев указанных выше, не нужен. Хотя прогресс не остановить:) Ну и не забываем, что в ХС8 2.05 и выше можем использовать всю прелесть С99, включая библиотеки С99.
5. Кстати, вот что они сделали в версии 2.05 - Unlicensed (Free) versions of this compiler now allow optimizations up to and including level 2. This will permit a similar, although not identical, output to what was previously possible using a Standard license. Virtually all code generation optimizations are now enabled regardless of the license type, but most assembler optimizations still require a PRO license for them to be enabled. The --mode option to the legacy driver, xc8, no longer has any effect.. Т.е до уровня 2 (включая его) компилятор в режиме FREE оптимизирует, т.е работает в режиме PRO (Виртуально оптимизация возможна вне зависимости от типа лицензии, хотя многие ассемблерные инструкции требуют лицензию PRO:)). А уровни 3 и S доступны только в PRO.
В общем, в режиме оптимизации "3" v2.10 так и компилирует с размером кода 31918, версия 2.00 компилирует 318хх, а 1.44 и 1.45 размер кода 31686. В режиме "Space" 1.44 компилирует код
размером 29482, версия 2.10 в режиме "S" компилирует размер 29684.
Разницы в 2.10 между С99 и С90 нету, не знаю где он код прибавляет, а всю прошивку шерстить не хочется...
То что мне нужно было от 2.10, а именно - оптимизация того, что они пропустили в предыдущих версиях я не нашёл. Меня никогда не напрягал размер кода, поэтому пока повишу на С99,
посмотрю чего они там наваляли...
А вообще, то что я хотел увидеть от компилятора, и не только, я сегодня "нарисовал" в файле: https://yadi.sk/d/KPqCBgn0-GByAQ, не всё конечно - только то что вспомнил...
[Профиль]  [ЛС] 

ALEKS1102X

Стаж: 5 лет 10 месяцев

Сообщений: 14


ALEKS1102X · 01-Янв-20 18:14 (спустя 7 дней)

Ребят, девчонки - С НОВЫМ ГОДОМ ВАС ВСЕХ!
Всем здоровья, успехов в жизни и разработках!
И качественных компиляторов!
Ещё раз - ВСЕХ с Новым Годом!
[Профиль]  [ЛС] 

ALEKS1102X

Стаж: 5 лет 10 месяцев

Сообщений: 14


ALEKS1102X · 07-Янв-20 00:20 (спустя 5 дней)

Добрый день конфе! У меня несколько вопросов к igorg10 - как к самому знающему. Сразу извинюсь, потому что вопросы немного не в тему...
Итак, Вы в последнем сообщении сказали: Ну и не забываем, что в ХС8 2.05 и выше можем использовать всю прелесть С99, включая библиотеки С99.
Я полазил трохи по нету, нашёл страницу Микрочика: https://www.microchip.com/mplab/microchip-libraries-for-applications
Скачал последнюю библиотеку "mla_v2018_11_26_windows_installer.exe", на этой же странице нашёл про "MPLAB Code Configurator", в
общем установил и одно и другое...
Дальше, по одной из инструкций в интернете создал новый проект, никаких файлов не создавал, только проект на PIC18F46K22, дальше запустил
этот "MPLAB Code Configurator", повыставлял от "балды" входы/выходы, аналоговые входы, конфигурацию, и получил готовый проект.
Проект пустой, но зато куча ххх.с и ххх.h файлов по инициализации ножек, конфигурации, АЦП...
Вопрос первый: Вы эту прелесть имели ввиду, которую описал выше, но ещё не задействовал ?
скрытый текст
Дальше, разбираться как там в проект добавить бутлодыря, или ещё чего не было особого желания, поэтому пошёл по кратчайшему пути -
нашёл путь, куда эти библиотеки легли: C: Пользователи / Aleks / .mcc / librariеs
Дальше, открыл архив в этой папке: C: Пользователи / Aleks / .mcc / librariеs / bootloader8bit-2.2.37.jar / com / microchip / mcc / mcu8 /
bootloaders / bg / resources папку "AN1473" - там небольшая кучка проектов-библиотек...
И вот в папке "AN1473" открыл первый попавшийся на глаза проект "IOC_Timer1".
Открыл файл "tmr1.c" и оху.. - пошёл ухи пожрать короче...
ЭТО ЧТО ??? Чтобы установить/сбросить бит нужно целую функцию создать ?
Такое ощущение, что они для того камня, который там заявлен "PIC16F18855" рабочую частоту подняли до 60 Мипс, а флеш память у него не ниже
512 КБайт, а иначе как объяснить вот такое чудо:
Функция:
void TMR1_StartTimer(void) {
// Start the Timer by writing to TMRxON bit
T1CONbits.TMR1ON = 1; // этож два слова программной памяти команда "call", одно слово "bsf TMR1ON", и два слова "return" а по
// времени вообще в пять раз больше!!!
}
Исполнение:
TMR1_StartTimer(); // вместо этой команды "call TMR1_StartTimer" должно было быть "bsf TMR1ON"...
//-----------------------------------------
вместо того чтобы сделать так:
#define TMR1_StartTimer T1CONbits.TMR1ON = 1
Исполнение:
TMR1_StartTimer;
//-----------------------------------------
Они чего там !?! Вообще на фоне покупки атмела с .овном смешали свои мозги?
Лично я даже для PIC32MZ такую бормотуху постремался бы в код вставлять - лучше уж пусть проц в холостую молотит, чем такую чушь
исполнять. А для этих убогих PIC16Fxxxxx это уже чересчур...
В общем, в архив всунул оригинал - папку "IOC_Timer1.X", и свой экспериментальный проект со своими поправками и комментариями нескольких
функций. Из своего проекта "Pic18_temp.X" отдельно достал файл "listing.disasm" чтобы если кто-то захочет скомпилировать - чтобы не потерять
то что я наваял. Здесь весь архив, про который говорил выше: https://yadi.sk/d/Vxjk0yEkqGKPmQ
Дальше, в файле "tmr1.c" они во многих местах предлагают на лету записывать в 16-ти битный таймер начиная со старшего байта:
TMR1H = (timer1ReloadVal >> 8);
TMR1L = timer1ReloadVal;
Хотя когда-то сами предлагали сначала обрабатывать мл. байт таймера (файл "pic16_TMR1.pdf", стр. 8), и раньше я был с ними согласен,
почему не согласен сейчас - описал в файле "tmr1.c" в ПП "TMR1_Reload(void)".
И это я ещё не лез к чему-то посложнее, чем тупо проинициализировать таймер для работы с модулем "сравнение/захват", а что ж там творится в
той же "WIFI" или "USB". Взять к примеру тот-же Keeloq - там же проц в прерывания приходит каждые 120 мкс, и там зависает на одну-двойку мкс
минимум, а после ещё нужно что-то посчитать (низкоприоритетные прерывания), а ещё в основном коде меню обработать - при нажатии кнопки
своевременно меню обработать на графическом индикаторе, а помимо этого ещё куча математики, а я видите ли в высокоприоритетном прерывании
по Keeloq перехожу с помощью "switch-case" 10 мкс на очередной принимаемый бит... Жуть!!!
А они видите ли здесь скоростью проца разбрасываются как-будто за последние 10 лет хоть на 1 Мипс подняли частоту...
Лично я редко использую аппаратные модули, ну разве что PWM, ADC, TMRx, USART, I2C.
Вот к примеру "I2C", многие используют его как в примере для работы с индикатором SD1306, пример из нета для pic32:
void OLED::_sendTWIcommand(uint8_t value)
{
if (_use_hw)
{
_waitForIdleBus(); // Wait for I2C bus to be Idle before starting
I2C1CONSET = (1 << _I2CCON_SEN); // Send start condition
if (I2C1STAT & (1 << _I2CSTAT_BCL)) { return; } // Check if there is a bus collision
while (I2C1CON & (1 << _I2CCON_SEN)) {} // Wait for start condition to finish
I2C1TRN = (SSD1306_ADDR<<1); // Send device Write address
while (I2C1STAT & (1 << _I2CSTAT_IWCOL)) // Check if there is a Write collision
{
I2C1STATCLR = (1 << _I2CSTAT_IWCOL); // Clear Write collision flag
I2C1TRN = (SSD1306_ADDR<<1); // Retry send device Write address
}
while (I2C1STAT & (1 << _I2CSTAT_TRSTAT)) {} // Wait for transmit to finish
while (I2C1STAT & (1 << _I2CSTAT_ACKSTAT)) {} // Wait for ACK
I2C1TRN = SSD1306_COMMAND; // Send the 1st data byte
while (I2C1STAT & (1 << _I2CSTAT_TRSTAT)) {} // Wait for transmit to finish
while (I2C1STAT & (1 << _I2CSTAT_ACKSTAT)) {} // Wait for ACK
I2C1TRN = value; // Send the 2nd data byte
while (I2C1STAT & (1 << _I2CSTAT_TRSTAT)) {} // Wait for transmit to finish
while (I2C1STAT & (1 << _I2CSTAT_ACKSTAT)) {} // Wait for ACK
I2C1CONSET = (1 << _I2CCON_PEN); // Send stop condition
while (I2C1CON & (1 << _I2CCON_PEN)) {} // Wait for stop condition to finish
}
else
{
_sendStart(SSD1306_ADDR<<1);
_waitForAck();
_writeByte(SSD1306_COMMAND);
_waitForAck();
_writeByte(value);
_waitForAck(); // А если "АСК" не придёт ??? Сколько он там в программе задержку поставил на своё "Тупой-"NoACK"",
// а если не поставил, и WDT выключен - сколько ж он в этом месте торчать будет?!?
// Вернее он не в этом месте будет торчать, а выше - на таких же проверках...
_sendStop();
}
}
Т.е. я так понял, что когда мозг находится в районе задницы, значит даже высокоскоростной проц будет простаивать, ожидая установки флага
опустошения буфера приёма/передачи, и т.п... Да ??!
А что ? Нельзя в прерывании обновлять буфер передачи из массива ОЗУ, чем тупо висеть ожидая окончания этой клоунады ??? а самой программе
в это время продолжать выполнять другие функции и задачи - а иначе зачем тогда аппаратные модули ? Чтобы тупые, которым не помогла школа,
училище, институт - могли навалять всякое ГЭ, и распространять по всемирной помойке ?!?
Я так понимаю что немногим понятен термин аппаратный или софтовый модуль, и зачем он нужен тот аппаратный...
Продолжение первого вопроса: В общем, если Вы эту "библиОтеку" имели ввиду, то я лично имел бы с удовольствием тех, кто её
написал (не в физическом плане) - а выгнал бы нах с волчьим билетом за ворота, и другим бы позвонил - чтобы брали на работу
только в сартир в качестве крикуна популярной фразы "ЗАНЯТО!!!"...
Теперь собственно второй вопрос, по которому я и пишу это сообщение: После установки "MPLAB Code Configurator" я сразу не заметил -
все файлы, созданные mplabx воспроизводятся корректно, и только мной написанные комментарии которые после "//" они подчёркиваются снизу волнистой линией. Подчёркиваются только прописные буквы (и кириллица, и английский, написанные заглавными не подчёркиваются).
Если на подчёркнутое слово навести курсор, после нажать "ALT" и не отпуская "Enter", то появится сообщение:
"Add "отсутствию" to the project's dictionary".
Если нажать на сообщение, то это слово уже нигде не будет подчёркиваться, но стоит изменить одну букву в слове и опять "тажа лажа".
Я понимаю что это словарь какой-то встроенный в МPLABX, но где он находится, и почему он вылез после установки этой так называемой библиотеки, и как с ним бороться, кроме как снести всё, и по новому установить - я не знаю...
Может поможете разобраться?
Да, и ещё - если я написал лишнее - можете смело удалять как сообщение так и меня...
[Профиль]  [ЛС] 

igorg10

Стаж: 15 лет 8 месяцев

Сообщений: 108

igorg10 · 07-Янв-20 21:12 (спустя 20 часов, ред. 07-Янв-20 21:12)

ALEKS1102X писал(а):
78636515Добрый день конфе! У меня несколько вопросов к igorg10 - как к самому знающему. Сразу извинюсь, потому что вопросы немного не в тему...
Итак, Вы в последнем сообщении сказали: Ну и не забываем, что в ХС8 2.05 и выше можем использовать всю прелесть С99, включая библиотеки С99.
Я полазил трохи по нету, нашёл страницу Микрочика: https://www.microchip.com/mplab/microchip-libraries-for-applications
Скачал последнюю библиотеку "mla_v2018_11_26_windows_installer.exe", на этой же странице нашёл про "MPLAB Code Configurator", в
общем установил и одно и другое...
Дальше, по одной из инструкций в интернете создал новый проект, никаких файлов не создавал, только проект на PIC18F46K22, дальше запустил
этот "MPLAB Code Configurator", повыставлял от "балды" входы/выходы, аналоговые входы, конфигурацию, и получил готовый проект.
Проект пустой, но зато куча ххх.с и ххх.h файлов по инициализации ножек, конфигурации, АЦП...
Вопрос первый: Вы эту прелесть имели ввиду, которую описал выше, но ещё не задействовал ?
скрытый текст
Дальше, разбираться как там в проект добавить бутлодыря, или ещё чего не было особого желания, поэтому пошёл по кратчайшему пути -
нашёл путь, куда эти библиотеки легли: C: Пользователи / Aleks / .mcc / librariеs
Дальше, открыл архив в этой папке: C: Пользователи / Aleks / .mcc / librariеs / bootloader8bit-2.2.37.jar / com / microchip / mcc / mcu8 /
bootloaders / bg / resources папку "AN1473" - там небольшая кучка проектов-библиотек...
И вот в папке "AN1473" открыл первый попавшийся на глаза проект "IOC_Timer1".
Открыл файл "tmr1.c" и оху.. - пошёл ухи пожрать короче...
ЭТО ЧТО ??? Чтобы установить/сбросить бит нужно целую функцию создать ?
Такое ощущение, что они для того камня, который там заявлен "PIC16F18855" рабочую частоту подняли до 60 Мипс, а флеш память у него не ниже
512 КБайт, а иначе как объяснить вот такое чудо:
Функция:
void TMR1_StartTimer(void) {
// Start the Timer by writing to TMRxON bit
T1CONbits.TMR1ON = 1; // этож два слова программной памяти команда "call", одно слово "bsf TMR1ON", и два слова "return" а по
// времени вообще в пять раз больше!!!
}
Исполнение:
TMR1_StartTimer(); // вместо этой команды "call TMR1_StartTimer" должно было быть "bsf TMR1ON"...
//-----------------------------------------
вместо того чтобы сделать так:
#define TMR1_StartTimer T1CONbits.TMR1ON = 1
Исполнение:
TMR1_StartTimer;
//-----------------------------------------
Они чего там !?! Вообще на фоне покупки атмела с .овном смешали свои мозги?
Лично я даже для PIC32MZ такую бормотуху постремался бы в код вставлять - лучше уж пусть проц в холостую молотит, чем такую чушь
исполнять. А для этих убогих PIC16Fxxxxx это уже чересчур...
В общем, в архив всунул оригинал - папку "IOC_Timer1.X", и свой экспериментальный проект со своими поправками и комментариями нескольких
функций. Из своего проекта "Pic18_temp.X" отдельно достал файл "listing.disasm" чтобы если кто-то захочет скомпилировать - чтобы не потерять
то что я наваял. Здесь весь архив, про который говорил выше: https://yadi.sk/d/Vxjk0yEkqGKPmQ
Дальше, в файле "tmr1.c" они во многих местах предлагают на лету записывать в 16-ти битный таймер начиная со старшего байта:
TMR1H = (timer1ReloadVal >> 8);
TMR1L = timer1ReloadVal;
Хотя когда-то сами предлагали сначала обрабатывать мл. байт таймера (файл "pic16_TMR1.pdf", стр. 8), и раньше я был с ними согласен,
почему не согласен сейчас - описал в файле "tmr1.c" в ПП "TMR1_Reload(void)".
И это я ещё не лез к чему-то посложнее, чем тупо проинициализировать таймер для работы с модулем "сравнение/захват", а что ж там творится в
той же "WIFI" или "USB". Взять к примеру тот-же Keeloq - там же проц в прерывания приходит каждые 120 мкс, и там зависает на одну-двойку мкс
минимум, а после ещё нужно что-то посчитать (низкоприоритетные прерывания), а ещё в основном коде меню обработать - при нажатии кнопки
своевременно меню обработать на графическом индикаторе, а помимо этого ещё куча математики, а я видите ли в высокоприоритетном прерывании
по Keeloq перехожу с помощью "switch-case" 10 мкс на очередной принимаемый бит... Жуть!!!
А они видите ли здесь скоростью проца разбрасываются как-будто за последние 10 лет хоть на 1 Мипс подняли частоту...
Лично я редко использую аппаратные модули, ну разве что PWM, ADC, TMRx, USART, I2C.
Вот к примеру "I2C", многие используют его как в примере для работы с индикатором SD1306, пример из нета для pic32:
void OLED::_sendTWIcommand(uint8_t value)
{
if (_use_hw)
{
_waitForIdleBus(); // Wait for I2C bus to be Idle before starting
I2C1CONSET = (1 << _I2CCON_SEN); // Send start condition
if (I2C1STAT & (1 << _I2CSTAT_BCL)) { return; } // Check if there is a bus collision
while (I2C1CON & (1 << _I2CCON_SEN)) {} // Wait for start condition to finish
I2C1TRN = (SSD1306_ADDR<<1); // Send device Write address
while (I2C1STAT & (1 << _I2CSTAT_IWCOL)) // Check if there is a Write collision
{
I2C1STATCLR = (1 << _I2CSTAT_IWCOL); // Clear Write collision flag
I2C1TRN = (SSD1306_ADDR<<1); // Retry send device Write address
}
while (I2C1STAT & (1 << _I2CSTAT_TRSTAT)) {} // Wait for transmit to finish
while (I2C1STAT & (1 << _I2CSTAT_ACKSTAT)) {} // Wait for ACK
I2C1TRN = SSD1306_COMMAND; // Send the 1st data byte
while (I2C1STAT & (1 << _I2CSTAT_TRSTAT)) {} // Wait for transmit to finish
while (I2C1STAT & (1 << _I2CSTAT_ACKSTAT)) {} // Wait for ACK
I2C1TRN = value; // Send the 2nd data byte
while (I2C1STAT & (1 << _I2CSTAT_TRSTAT)) {} // Wait for transmit to finish
while (I2C1STAT & (1 << _I2CSTAT_ACKSTAT)) {} // Wait for ACK
I2C1CONSET = (1 << _I2CCON_PEN); // Send stop condition
while (I2C1CON & (1 << _I2CCON_PEN)) {} // Wait for stop condition to finish
}
else
{
_sendStart(SSD1306_ADDR<<1);
_waitForAck();
_writeByte(SSD1306_COMMAND);
_waitForAck();
_writeByte(value);
_waitForAck(); // А если "АСК" не придёт ??? Сколько он там в программе задержку поставил на своё "Тупой-"NoACK"",
// а если не поставил, и WDT выключен - сколько ж он в этом месте торчать будет?!?
// Вернее он не в этом месте будет торчать, а выше - на таких же проверках...
_sendStop();
}
}
Т.е. я так понял, что когда мозг находится в районе задницы, значит даже высокоскоростной проц будет простаивать, ожидая установки флага
опустошения буфера приёма/передачи, и т.п... Да ??!
А что ? Нельзя в прерывании обновлять буфер передачи из массива ОЗУ, чем тупо висеть ожидая окончания этой клоунады ??? а самой программе
в это время продолжать выполнять другие функции и задачи - а иначе зачем тогда аппаратные модули ? Чтобы тупые, которым не помогла школа,
училище, институт - могли навалять всякое ГЭ, и распространять по всемирной помойке ?!?
Я так понимаю что немногим понятен термин аппаратный или софтовый модуль, и зачем он нужен тот аппаратный...
Продолжение первого вопроса: В общем, если Вы эту "библиОтеку" имели ввиду, то я лично имел бы с удовольствием тех, кто её
написал (не в физическом плане) - а выгнал бы нах с волчьим билетом за ворота, и другим бы позвонил - чтобы брали на работу
только в сартир в качестве крикуна популярной фразы "ЗАНЯТО!!!"...
Теперь собственно второй вопрос, по которому я и пишу это сообщение: После установки "MPLAB Code Configurator" я сразу не заметил -
все файлы, созданные mplabx воспроизводятся корректно, и только мной написанные комментарии которые после "//" они подчёркиваются снизу волнистой линией. Подчёркиваются только прописные буквы (и кириллица, и английский, написанные заглавными не подчёркиваются).
Если на подчёркнутое слово навести курсор, после нажать "ALT" и не отпуская "Enter", то появится сообщение:
"Add "отсутствию" to the project's dictionary".
Если нажать на сообщение, то это слово уже нигде не будет подчёркиваться, но стоит изменить одну букву в слове и опять "тажа лажа".
Я понимаю что это словарь какой-то встроенный в МPLABX, но где он находится, и почему он вылез после установки этой так называемой библиотеки, и как с ним бороться, кроме как снести всё, и по новому установить - я не знаю...
Может поможете разобраться?
Да, и ещё - если я написал лишнее - можете смело удалять как сообщение так и меня...
Ответ на первый вопрос - Нет, не эту прелесть, создаваемую МСС. Я имел ввиду стандартные библиотеки С99. Что такое С99 и зачем он нужен, чем отличется от ANSI и прочих Си - вопрос не этой ветки. ГУГЛ может помочь. МСС (Microchip Code Configurator) создаёт стандартные драйвера и функции (API), с одинаковым интерфейсом как и для PIC32MX так и для PIC10F:). Про обратную сторону данной стандартизации Вы написали. MCC задумывался как помощник начинающим, и он эту задачу выполняет неплохо. Нет желания его использовать? - не используйте. Есть силы и хватает ума настроить и написать драйвер для CAN или LIN или USB, например для PIC18, используя только даташит и еррату - значит делайте, в чём проблема:). Хотите вручную настроить порты и инициализацию ядра на том же PIC18F26K42 для I2C, используя все аппаратные средства контроллера - а они у него есть, и не запутаться - очень хорошо. А потом перетащить написаный код на тот же PIC18F47Q10 - и не править вручную инициализацию I2C и камня?
Нет универсальных рецептов. Избыточность сгенерированых МСС файлов с лихвой окупается легкостью миграции и стандартизации. Кстати, МСС древние камни не поддерживает. MLA (Microchip Library Application) - это прообраз MCC, скажем так, предшественник МСС, если поглядите - там в основном используются камни, не поддерживаемые МСС ( PIC24HJ, dsPIC33FJ и пр.). Он поэтому и остановился в своём развитии, уступив пальму первенства МСС - там в MLA была прямая инициализация регистров, и соответственно куча Config - по количеству используемых аппаратных средств в проекте. А МСС это вообще заготовка, причем работающая (хотя есть и исключения - на форуме микрочипа очень подробно обсуждают баги МСС) - если есть желание, оставляем название функций и внутри делаем что хочем. Только вопрос надо ли?
Ещё раз по поводу С99. Если он нужен - значит должен стоять XC8 2.X. Версии 1.4Х (до 2.0) не поддерживает С99.
ОТВЕТ на ВТОРОЙ вопрос Есть неплохие учебники по NetBeans ( а он лежит в основе MPLABX) в сети ( например для начала https://netbeans.org/kb/73/java/editor-codereference_ru.html#hints) - там много фичей, все отключаются в настройках. У меня MAC OS, поэтому конкретно сказать как отключить подсказку в NetBeans в Windows не знаю - разный интерфейс у NetBeans в разных операционных системах.. В Вашем случае скорее всего надо зайти в настройки - затем настройки редактора - проверить вкладки hints и spellchecker
В дополнение к написаному - те же контроллеры PIC18 K42 и Q10 серии имеют новые модулю SPI и I2C, равно как и DMA, и ручная их настройка - задача не совсем тривиальная. про старшие семейства (PIC24EP, dsPIC33CH и пр.) я вообще молчу. Можно конечно использовать и софтверные версии данных протоколов - но зачем, если есть готовые модули? И как в софтверных версиях бороться с прерываниями - как выдержать жесткие тайминги протоколов на больших скоростях? А если охота использовать framed SPI на (ds)PIC24?
Есть неплохой сайт, поддерживаемый микрочипом (microchipdeveloper.com , на английском) - там на нём много примеров использования и создания всего, что делает микрочип. В том числе примеры проектов, примеры использования компиляторов и отладчиков и пр. В том числе и очень нелохой учебник по Си. Разжевывают очень просто и красиво.
И чтобы не засорять ветку - будут вопросы - пишите в лс. Постараюсь ответить
[Профиль]  [ЛС] 

ALEKS1102X

Стаж: 5 лет 10 месяцев

Сообщений: 14


ALEKS1102X · 07-Янв-20 21:46 (спустя 33 мин.)

"Ответ на первый вопрос - Нет, не эту прелесть, создаваемую МСС. Я имел ввиду стандартные библиотеки С99. Что такое С99 и зачем он нужен, чем отличется от ANSI и прочих Си - вопрос не этой ветки. ГУГЛ может помочь."
Т.е. я так понял - это и есть те библиотеки, которые Вы так хвалили, потому как других у Микрочипа просто НЕТУ!
"Хотите вручную настроить порты и инициализацию ядра на том же PIC18F26K42 для I2C, используя все аппаратные средства контроллера - а они у него есть,"
Вручную ??? У такой какашки ? Конечно же нет... Не в ручную, и тем более не автоматом! Я такое ГЭ просто игнорирую...
Напомните мне - чем они лучше 26K22 ?
При компилировании прошивки на нём! у меня чуть ли через строку будет мелькать команда "MOVLB".
Не скажете кто её туда будет вставлять ?
А вообще Вы правы - если мне покажется что библиотека входит в пределы разумного - я Вам в ЛС постучусь...
[Профиль]  [ЛС] 

igorg10

Стаж: 15 лет 8 месяцев

Сообщений: 108

igorg10 · 08-Янв-20 01:36 (спустя 3 часа, ред. 08-Янв-20 01:36)

ALEKS1102X писал(а):
78642130"Ответ на первый вопрос - Нет, не эту прелесть, создаваемую МСС. Я имел ввиду стандартные библиотеки С99. Что такое С99 и зачем он нужен, чем отличется от ANSI и прочих Си - вопрос не этой ветки. ГУГЛ может помочь."
Т.е. я так понял - это и есть те библиотеки, которые Вы так хвалили, потому как других у Микрочипа просто НЕТУ!
"Хотите вручную настроить порты и инициализацию ядра на том же PIC18F26K42 для I2C, используя все аппаратные средства контроллера - а они у него есть,"
Вручную ??? У такой какашки ? Конечно же нет... Не в ручную, и тем более не автоматом! Я такое ГЭ просто игнорирую...
Напомните мне - чем они лучше 26K22 ?
При компилировании прошивки на нём! у меня чуть ли через строку будет мелькать команда "MOVLB".
Не скажете кто её туда будет вставлять ?
А вообще Вы правы - если мне покажется что библиотека входит в пределы разумного - я Вам в ЛС постучусь...
1. С99 - например, #include <stdbool.h> ...bool testBool=false; Объявили .h файл (библиотеку), переменную , далее можем использовать: if (testBool==false) ..... if (testBool). Так вот, этот трюк с булом можно сделать только в С99. В С90 нету була. Также нету uint8_t и прочих переносимых типов Зачем они нужны - хорошо объясняет стандарт С99 (читаем его). Согласитесь, хороший стимул использовать при объявлении булевой переменной 1 бит вместо 1 байта (https://microchipdeveloper.com/c:bits-bools-and-bit-fields). Особенной, если таких булов в коде много. Это к вопросу о затратах в памяти переменных. Хотя наверное для многих крутых парней (:)) писанина на Си вроде ...if (testBool==false)... попахивает быдлокодерством офисных недоучек на VBA .
2. K42 хороший чип. Имеет на борту CIP (Core Independent Peripherial - независимую от ядра периферию вроде CLC, NCO, CWG и пр.). Зачем она нужна - читаем там же. Так вот, используя CIP, без интервенции со стороны процессора, я могу получать по I2C (SPI и пр.) и передавать через DMA на другую периферию всё что я хочу ( в разумных пределах, конечно). Т.е. в while (1) в main у меня ничего не будет, в прерываниях тоже не будет кода, я только настрою регистры - а при получении данных от всенародно любимой DS3231 я буду передавать эти данные в UART. Повторите трюк на К22 без единой строчки кода и с надежностью Class B. И в диссассемблере у меня не будет ни одной инструкции Так же К42 имеет подтягивающие для I2C (не путать c pull up) резисторы. Любое I2C устройство цепляем напрямую без подтягивающих резисторов к питанию, выставляем в МСС использование специального режима I2C - и всё, работаем, съэкономив 2 резистра :D. И много других прелестей, недоступных 20-ти летнему камню К22.
Поймите, нет универсального микроконтроллера. Для каждой задачи есть свой камень. Проектирую блок питания - возьму PIC16F1769 - у него есть Ramp Generator. Дроссель, пара мосфетов и конденсаторов, десяток строк кода и настройка камня в МСС- и у меня готовый Boost/Buck преобразователь. Раньше такое можно было сделать только на dsPic с очень сложными расчётами.Есть желание попробовать мощь 32 разрядов - возьму PIC32MM. Цепляем к нему дисплей и без тормозов выводим графику. Разрабатываю простое USB устройство - возьму PIC18F14K50. Устройство USB более сложное, нужно больше ног и мощи - возьму PIC24FJ256GB106 или PIC32MM0256GPM064. И это не на хоббийном уровне.
[Профиль]  [ЛС] 

ALEKS1102X

Стаж: 5 лет 10 месяцев

Сообщений: 14


ALEKS1102X · 08-Янв-20 03:47 (спустя 2 часа 10 мин.)

Знаете, Вы мне такие вещи объясняете, которые мне как "отче наш", спасибо конечно, но лучше расскажите это дошколятам, которые пишут на си макросами, или чужими библиотеками - при этом не зная ядра проца. А потом создают кучу топиков, в которых собственно спрашивают: А почему моё ГЭ работает через жо..???
А вот про "bool" хотелось бы уточнить: в описании числится что "bool" это 0 - false, и остальное "правда". А в реалиях всё равно передаётся аж целый байт !?!
В чём прикол этого булевого значения ?
2. K42 хороший чип. Имеет на борту CIP (Core Independent Peripherial - независимую от ядра периферию вроде CLC, NCO, CWG и пр.). Зачем она нужна - читаем там же.
Знаете, если бы вместо сраной логики, Микрочип встроил в своё ядро маааленький проц типа 10F204, у которого былобы несколько регистров настройки его функций, и доступ к общему ОЗУ, то на основе такого аппаратного модуля можно было бы организовать вывод информации практически на любой LCD модуль независимо от протокола - просто в основной программе я заполняю некий буфер ОЗУ данными, устанавливаю флаг обновления данных индикатора, а модуль по своей микропрограмме дёргает ножками, и к примеру 2 раза в секунду всю инфу выворачивает на индикатор.
Вот это был бы модуль аппаратный, а понос наподобие нескольких логических элементов - знаете - я снаружи поставлю парочку CD4001/11 - от меня не убудет, да и работать точно будет не хуже..
Я Вам мульон таких вариантов приведу, а вот от Вас так и не дождался ответа:
Это всё таки та библиотека, которую ВЫ так расхваливали, или же приведите ссылку на ту - которая супер крутая...
[Профиль]  [ЛС] 

igorg10

Стаж: 15 лет 8 месяцев

Сообщений: 108

igorg10 · 08-Янв-20 13:52 (спустя 10 часов, ред. 08-Янв-20 13:52)

ALEKS1102X писал(а):
78643627Знаете, Вы мне такие вещи объясняете, которые мне как "отче наш", спасибо конечно, но лучше расскажите это дошколятам, которые пишут на си макросами, или чужими библиотеками - при этом не зная ядра проца. А потом создают кучу топиков, в которых собственно спрашивают: А почему моё ГЭ работает через жо..???
А вот про "bool" хотелось бы уточнить: в описании числится что "bool" это 0 - false, и остальное "правда". А в реалиях всё равно передаётся аж целый байт !?!
В чём прикол этого булевого значения ?
2. K42 хороший чип. Имеет на борту CIP (Core Independent Peripherial - независимую от ядра периферию вроде CLC, NCO, CWG и пр.). Зачем она нужна - читаем там же.
Знаете, если бы вместо сраной логики, Микрочип встроил в своё ядро маааленький проц типа 10F204, у которого былобы несколько регистров настройки его функций, и доступ к общему ОЗУ, то на основе такого аппаратного модуля можно было бы организовать вывод информации практически на любой LCD модуль независимо от протокола - просто в основной программе я заполняю некий буфер ОЗУ данными, устанавливаю флаг обновления данных индикатора, а модуль по своей микропрограмме дёргает ножками, и к примеру 2 раза в секунду всю инфу выворачивает на индикатор.
Вот это был бы модуль аппаратный, а понос наподобие нескольких логических элементов - знаете - я снаружи поставлю парочку CD4001/11 - от меня не убудет, да и работать точно будет не хуже..
Я Вам мульон таких вариантов приведу, а вот от Вас так и не дождался ответа:
Это всё таки та библиотека, которую ВЫ так расхваливали, или же приведите ссылку на ту - которая супер крутая...
Так:)
....которые пишут на си макросами, или чужими библиотеками - при этом не зная ядра проца Полный профит. Вы на Си макросами не пишете? Зачем нам например такая конструкция : #define WriteCommand(cmd) {DC_SetLow();CS_SetLow(); SPI2_Exchange8bit (cmd); __delay_us(1); CS_SetHigh();} #define WriteData(data) {DC_SetHigh(),CS_SetLow(); SPI2_Exchange8bit (data); __delay_us(1); CS_SetHigh();} или #define STOP_CONVERTER() { increment = 0; set_NCO(); TRIS_NCO = 1; }? Мы же как True Cool Guy (TCG) сделаем сиё используя индиректный метод через указатели, не так ли?
Прикол булевого значения выражается не только в щенячьем восторге от лаконичности и переносимости (bool exampleBool; if (!exampleBool)), но и в том, что конструкция типа: char exampleBool=0; ...... if (!(exampleBool & 0x01)) времён K&R не объясняет, сколько байтов занимает этот самый char и зачем нам нужна ещё одна битовая операция. А конструкция XC8 __bit powerOn занимает в памяти всего 1 бит, 8-мь таких конструкций съест всего один байт РАМу памяти.
Вот это тоже шедеврально: . . . знаете - я снаружи поставлю парочку CD4001/11 - от меня не убудет, да и работать точно будет не хуже.. Вместо CD4011 можно поставить брутальные отечественные К155ЛА3:). Если добавить ещё десяток-другой Dip корпусов всяких там JK и иных триггеров, и воткнуть всё это в пустой АТ корпус системного блока, получим в принципе неплохую самодостаточную конструкцию, где явно лишним звеном будет сам микроконтроллер . Мы не говорим что можно ещё поставить мы говорим от том что можно использовать из имеющегося на борту. Улавливаете разницу? Да, и сделайте DMA на рассыпухе, охота посмотреть как получится. А если нужно реально 2 ядра в одном корпусе - добро пожаловать в гости к dsPIC33CH. Только чтобы его отлаживать надо прикупить парочку ICD4, по одному на каждое ядро.
Когда я имел ввиду С99, я именно имел ввиду библиотеки С99, которые поддерживаются ХС компиляторами. Включая, но не ограничиваясь <stdbool.h>. А тот код, который генерирует МСС, к С99 не имеет никакого отношения. Поставьте в настройках проекта использование С90 - и будет Вам полное ANSI С счастье.
МСС крут именно в настройках регистров. Использовать или нет код его API - личное дело каждого. При компиляции ХС компилятор честно предупреждает, что такая-то функция не используется, и он её игнорирует. Размер хекса точно не увеличивается.
Я могу много рассказать историй про неправильное использование микроконтроллеров. Одна из недавних:) В одной из федеральной компаний, занимающейся пищевым производством, воодушевленные общим трендом на автоматизацию и цифровизацию, равно как и рассказами за столом сына (внука), что круче ардуино уно и Мега328 (не кидать в меня тазами и не разжигать религиозных войн) могут быть только его (или дедушки) яйца, облитые свежим кипятком, финансово подреплённые бюджетом с 8-ю нолями, решили сделать ЕЁ - систему, чтобы каждый юзер мог поглядеть онлайн, а что показывают весы в цеху. И правильно ли работают холопы, укладываются ли они в нормированные нормы времени. Чтобы была прослеживаемость и пр. И чтобы был обязательно штрих код:) Назвали систему гордо - MES система (что такое mes - читаем вики). Начали делать. Раньше был один сервер 1С и один сисадмин, который лениво консультировал несколько десятков пользователей. Количество устройств, подключенных к системе, росло лавинообразно, уно плохо работало в сети, начали к весам и сканерам подключать РС вместо уно. Бюджет позволял покупать Windows Ce сканеры беспроводные за 3 тыс зелёных за штуку:). Кол-во сисадминов росло также очень быстро, равно как и парк серверов и парк разработчиков, в том числе 1С. Итог - отдельная кондиционированная серверная, на её мощностях можно смело хостить фейсбук и майнить монету, 5-ть сисаднинов, тихо матерящихся и злобно сверкая глазами, втайне лелея надежду скрестить газовый ключ из ЗИПа с головой разработчиков, пытаются разобраться в веренице айпи адресов и что не работает, чтобы потом предъявить штатным разработчикам претензию. Размер базы 1С за год перевалил за 3 ТЕРАБАЙТА!!! А обратного пути нет - деньги потрачены, сканеры куплены, штат разрабов скомплектован. Только ничего толком не работает. И любая поломка весов, сканера, РС, к которому подключены они (ненужное зачеркнуть) вынуждает к простою. Плюс лишние ручные операции по наклейке штрих кода. Я когда это увидел, запил на 3 дня (такой я впечатлительный:)). Из запоя меня вывели конкуренты этой компании. Сказали, что тоже хотят такую систему, но только чтобы она работала. Бюджет на систему у них был раз в 20-ть меньше. Начали делать. Сделали. У меня весы и прочая периферия (простенькие, вывод только на UART) работает по кану, и полностью независима ни от кого. И сервер всего один (точнее два, на линуксе поднял кластер серверов) , на нём крутится 1С с постгрей ку эл (мне претила сама мысль купить MS SQL за 10-ть штук зелени). И размер базы на несколько порядков меньше. И пр. И пр. И всё работает.
[Профиль]  [ЛС] 

ALEKS1102X

Стаж: 5 лет 10 месяцев

Сообщений: 14


ALEKS1102X · 08-Янв-20 14:32 (спустя 40 мин., ред. 18-Янв-20 23:08)

Так:)
....которые пишут на си макросами, или чужими библиотеками - при этом не зная ядра проца Полный профит. Вы на Си макросами не пишете?

Знаете, я такими макросами не пишу, максимум:
// Для работы с байтами больше "char"
#define LOWBYTE(x) (*(unsigned char *)(&x))
#define MIDBYTE(x) (*(((unsigned char *)(&x))+1))
#define HIGHBYTE(x) (*(((unsigned char *)(&x))+2))
#define UPPERBYTE(x) (*(((unsigned char *)(&x))+3))
//-------------------------------
// Для работы с битами
#define bitset(var,bitno) ((var)|=1<<(bitno))
#define bitclr(var,bitno) ((var)&= ~(1<<(bitno)))
#define checkbit(var,bitno) ((var)&(1<<(bitno)))
или вот:
#define swap(a, b) { int8_t t = a; a = b; b = t; }
Ну походу ДА, это всё - макросы...
А те макросы про которые Вы написали, это да, жесть!
А Вам не жмёт размер кода в 26К22 с такими ПП установки/сброса битов SFR?
А как по поводу скорости работы того же проца ? Наверное на заявленном максимуме работаете!
"Вот это тоже шедеврально: . . . знаете - я снаружи поставлю парочку CD4001/11 - от меня не убудет, да и работать точно будет не хуже.. Если добавить ещё десяток-другой Dip корпусов всяких там JK и иных триггеров, и воткнуть всё это в пустой АТ корпус системного блока, получим в принципе неплохую самодостаточную конструкцию, где явно лишним звеном"
Ну чего уж тут шедеврального: делал брату года три назад управление воротами с сигнализацией, как говорится два в одном. Поставил транзисторы на ШИМ STP60NF06 (вернее один, хотя сам блок делал на управление двумя воротинами). Поставил напрямую через 100 Ом резистор. А транзисторы попались "качественные" - нагрузка меньше Ампера, напряжение около 40 вольт, у меня в настройках регулируется как только нагрузка поднялась выше 2 Ампер, и если с датчика оборотов не приходит импульсов больше 0,3 секунды - то стоп.
Когда первый раз сгорел транзистор, я как-то пропустил мимо ушей так сказать, поставил нового, а вот когда второй раз, да ещё и ножку проца выпалил, то я уже начал "сумнюваться" в качестве транзисторов, сделал отдельную плату с возможностью посадки на плату трёх транзисторов в параллель, а между процем и транзистором(ми) поставил буфер CD40106BM sop16 (дипами уже сто лет не пользуюсь), а на проце просто перенастроил на второй канал - у брата воротина одна, и ползает по рельсе, а блок я разрабатывал на две независимые воротины...
Так вот, после этого случая даже если покупаю запчасти (транзисторы) в ЧипДип.by (а оттуда пока присылали качественные) - всё равно буфер перед силовыми ставлю - смд14/16 проще поменять чем tqfp44.
Теперь дальше, мне к примеру нужен некий блок для измерения температуры с помощью датчиков типа ТСМ/ТСП50-1000. Встроенный АЦП конечно же ГЭ, даже если он 12-ти битный (я измеряю температуру с точностью до тысячных градуса), нужно что-то покруче. Оптимальный вариант MCP3421 (не забывайте что у меня это хобби, и деньги мне никто за это не платит), а у этой м/с всего один дифф. вход (2 ножки), а мне нужно к примеру восемь! Шо делать ? Ну конечно же две м/с HEF4051. И переключение на восемь датчиков, и буфер от криворуких чтобы аналоговый вход проца не спалили! А иначе никак!!!
У богатых конечно свои привычки, если фирма платит, можно взять теже 4051 и что-то из анальных девиц в качестве Дельта-Сигма АЦП, а вот меня устраивает и приведённая выше м/с
И всё равно буфер на входе будет!!!
По поводу "булевых" я так и не понял из Ваших объяснений, но я лично всё равно буду писать вот так:
void LCD_SendByte(char mode, unsigned char c) {
if (!(mode & 1)) SDA_LCD0;
...
По поводу написанного выше немного прокомментирую:
вместо "void LCD_SendByte(char mode, unsigned char c)" я мог написать "void LCD_SendByte(bool mode, unsigned char c)"
Программно это ничего бы не изменило - всё равно я приходил бы в ПП с целым байтом "mode", а здесь в этой подпрограмме
были бы такие действия:
if mode,0 ; проверка бита на ноль
bra 0xXXXX ; переход в пределах одной стр. прог. памяти если он равен нулю
Здесь вроде всё норм да ?
А вот такая запись, тоже вместо "char Control_Byte" можно написать "bool Control_Bit":
void Soft_IIC_Read(char Control_Byte, char Addr_World, char Count_Byte) {
Start_Bit(); // Старт бит
if (Err_I2C) return; // Если были ошибки чтения, то прекращаем работу
Эту компилятор преобразует вот так:
movf Err_I2C,W ; загрузка регистра в аккум
btfss STATUS,2 ; если бит "Зеро" сброшен (регистр !=0), значит были ошибки
return 0 ; выход из ПП
и вот такая:
void Soft_IIC_Read(char Control_Byte, char Addr_World, char Count_Byte) {
Start_Bit(); // Старт бит
if (Err_I2C & 1) return; // Если были ошибки чтения, то прекращаем работу
А эту компилятор преобразует вот так:
btfsc Err_I2C,0 ; булевое значение - > если бит 0 в регистре установлен
return 0 ; значит выход из ПП
Знаете какая разница в этих двух кусках ПП ?
Разница в двух освободившихся байтах программной памяти (которых очень много в ...К42, и у него очень крутая скорость работы -
всего 16 Мипс, поэтому лишних 62,5 нс ему не помешают...)
А вот то что меня очень сильно прикалывает, то это запись "ID пользователя" в пик18... Ну чего уж проще,
в асм это выглядит вот так:
ORG 0X200000
DB 0XAE,0X11,0X02,0X08,0X03,0X71,0X0A,0X01 ;User IDs
;
Теоретически в СИ это должно быть вроде тоже нормально:
//##############################################################################
//################### ID пользователя в PIC18F46K20 ######################
//##############################################################################
/*
#pragma config IDLOC0 = 0xAE // прописывает только мл. ниббл байта !!!
#pragma config IDLOC1 = 0x11
#pragma config IDLOC2 = 0x06
#pragma config IDLOC3 = 0x07
#pragma config IDLOC4 = 0x02
#pragma config IDLOC5 = 0x40
#pragma config IDLOC6 = 0x1F
#pragma config IDLOC7 = 0x01
*/
Дык где-ж там, прописывает только мл. ниббл - а память программная то уже давно не 14 бит по сравнению с пик16,
а полноценная, пиши как говорится ШО ХОШ !
Вот из-за этих чурбаданов индусских приходится вот так извращаться:
void main(void) {
//##########################################################################
//################### ID пользователя в PIC18F46K20 ##################
//##########################################################################
cpu_init(); // инициализация процессора
LCD_Init(); // инициализация индикатора
Soft_IIC_Read(Addr_24C04, 0x20, 8); // прочитаем спецификацию и серийный
// номер из 24С04. Полное описание в файле "Пользовательский ID в PIC18.c"...
if (Err_I2C) Rabota_Err_IND3(); // если есть ошибки - выход на индикацию ошибки на шине I2C
//-------------------------------
EEPGD = 1; // 1 - работа с Flash
CFGS = 0; // 1 - Config, 0 - Flash
WREN = 0; // ДЕактивация записи
TBLPTR = 0x200000; // адрес пользовательского ID
for (unsigned char i = 0; i < 8; i++) {
asm("TBLRD*+"); // читаем байт с инкрементом адреса
Buf_EEPROM = TABLAT; // прочитанные данные переписываем в буфер
}
Bit_Code_temp = 0; // для контроля корректности прочитанных данных
if (Buf_EEPROM[0] != 0xAE) Bit_Code_temp = 1;
if (Buf_EEPROM[1] != 0x11) Bit_Code_temp = 1;
if (Buf_EEPROM[2] != Buf_I2C[0]) Bit_Code_temp = 1;
if (Buf_EEPROM[3] != Buf_I2C[1]) Bit_Code_temp = 1;
if (Buf_EEPROM[4] != Buf_I2C[2]) Bit_Code_temp = 1;
if (Buf_EEPROM[5] != Buf_I2C[3]) Bit_Code_temp = 1;
if (Buf_EEPROM[6] != Buf_I2C[4]) Bit_Code_temp = 1;
if (Buf_EEPROM[7] != Buf_I2C[6]) Bit_Code_temp = 1;
//**************************************************************************
if (Bit_Code_temp) { // если данные не совпадают, то прописываем ID. Но
// сначала сотрём все ячейки пользовательского ID...
Podsvetka = 1; // если идёт прописывание ID, то включаем подсветку индикатора
TBLPTRL = 0; // адрес пользовательского ID, сбросили мл. адрес после чтения
WREN = 1; // активация записи
FREE = 1; // активация стирания
GIE = 0; // запрет прерываний
EECON2 = 0x55; // стандартная процедура перед записью
EECON2 = 0xAA; // ------ // ------
WR = 1; // запись буфера
while (WR) { // ожидаем сброс бита окончания записи
}
FREE = 0; // ДЕактивируем стирание
//-------------------------------
Buf_EEPROM[0] = 0xAE, Buf_EEPROM[1] = 0x11;
Buf_EEPROM[2] = Buf_I2C[0], Buf_EEPROM[3] = Buf_I2C[1];
Buf_EEPROM[4] = Buf_I2C[2], Buf_EEPROM[5] = Buf_I2C[3];
Buf_EEPROM[6] = Buf_I2C[4], Buf_EEPROM[7] = Buf_I2C[6];
// TBLPTR = 0x200000; // адрес пользовательского ID - при стирании
// он не изменился...
unsigned char i; // для подсчёта записываемых байт
for (i = 0; i < 7; i++) {
TABLAT = Buf_EEPROM;
asm("TBLWT*+"); // записываем байт с инкрементом адреса
}
TABLAT = Buf_EEPROM; // последний записываемый байт -
asm("TBLWT*"); // записываем без инкремента "TBLPTR", а иначе
// глючит толи Протеус, толи ХС8...
EECON2 = 0x55; // стандартная процедура перед записью
EECON2 = 0xAA; // --------- // ---------
WR = 1; // запись буфера (буфер в PIC18 = 64 байтам)
GIE = 1; // разрешаем прерывания
WREN = 0; // запрещаем запись
}
TBLPTRU = 0; // очищаем ст. регистр табличного чтения: Для работы с Flash,
// регистр "TBLPTRU" должен быть равен нулю. Почему-то его не хочет
// сбрасывать сам ХС8...
Delay_100ms(); // пауза чтобы увидеть по подсветке индикатора - что
// происходило прописывание "ID"...
По компилятору ещё раз скажу - тогочегохотел увидеть - не увидел, возможно он действительно под другое заточен, но как по мне -
он должен из штанов выпрыгнуть, но показать что используемый микроконроллер достоен того чтобы соперничать с другими марками
на этом рынке. От компиляторов фирмы Микрочип я этого не вижу, хотя я их если и поменяю на что-то другое (в смысле Микрочип),
то это должна быть некая ядерная война, после которой уже кроме кучки голодных людей никого не останется...
Тогда и мне будет не до МК ... ть.фу, ну и мысли ж по пьяне приходят дурные.
Вчера у дочки был День Рождения, сейчас вот сижу, пивом лечусь...
Всё! Я заканчиваю этот бесполезный флуд в теме, Ваше приглашение по разным вопросам в Си я услышал, если что - буду стучаться...
Прошу ещё раз извинить за флуд в теме - больше этого не повторится.
[Профиль]  [ЛС] 

talkos

Стаж: 14 лет 11 месяцев

Сообщений: 3


talkos · 03-Мар-20 22:47 (спустя 1 месяц 26 дней)

Всем привет , немогу скачать ету программу , возможно у когото есть что то поновее или ктото сможет подсказать где такое можно качнуть?
[Профиль]  [ЛС] 
 
Ответить
Loading...
Error