Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2021-окт-23 17:12

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 377 сообщений ]  На страницу « 121 22 23 24 25 26 »
Автор Сообщение
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-фев-07 11:14 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1588
Откуда: Тула
Byte_My_Void писал(а): *
Открыть
prostoRomanвроде все добавлено, причем самое что интересное - по кнопке f12 keil перейти не может, пишет undefined, но в менеджере проекта при компиляции появляются подключенные к periphinint.c заголовочные файлы аля MDR32F9Qx_port.h.
При этом в начале файла periphinit.c такие строки.
#include "MDR32Fx.h"
#include "MDR32F9Qx_rst_clk.h"
#include "MDR32F9Qx_port.h"
#include "MDR32F9Qx_config.h"
#include "MDR32F9Qx_uart.h"
#include "MDR32F9Qx_ssp.h"
#include "periphinit.h"

и в свойствах проекта добавлены папки поиска инклюдов.
(пометка это вручную собранный проект, где файлы библиотек из библиотек гитхаба закидывались в папки вручную)


Может я что то не так делаю, но в моем понимании, чтобы использовать ту или иную функцию - нужно подключить заголовочный файл командой include и добавить папку в раздел include paths...
Закрыть
Вроде бы всё верно, я сам так делаю (при этом в менеджере RTE не подключено вообще ничего, а галочки No Auto Includes в опциях компилятора Си и Ассемблера установлены (это важно!)).

Проверьте это всё. Keil тоже всё должен видеть и понимать (открываемые им файлы библиотеки должны быть по предполагаемому пути).

_________________
сочувствующий…


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-фев-07 11:17 
Не в сети

Зарегистрирован: 2020-янв-31 15:30
Сообщения: 60
Организация: Istok
спасибо всем, кто помогал, опыта у меня мало, поэтому я плохо себе представляю многие процессы сборки, но я решил снести keil когда увидел 3 библиотеки миландра внутри (в скачанных библиотеках и добавленных в папке с программой)
В итоге после переустановки keil и установки библиотеки 1.5.3 насколько я могу судить все откомпилировалось с первой попытки, при этом в коде ничего не менял. Видимо затесалась какая то не такая библиотека, даже ощущение было, что для другого компилятора...

В общем пока все ок, спасибо всем еще раз


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-фев-07 19:54 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 344
Организация: ФГУП "РФЯЦ-ВНИИЭФ"
Byte_My_Void писал(а): *
я решил снести keil когда увидел 3 библиотеки миландра внутри (в скачанных библиотеках и добавленных в папке с программой)
В итоге после переустановки keil и установки библиотеки 1.5.3 насколько я могу судить все откомпилировалось с первой попытки, при этом в коде ничего не менял.
Достаточно было в том окошке выбрать галкой последнюю версию пака (1.5.3) и пересобрать проект. Судя по версии пака 1.3, работали вы с очень старым паком. Отсюда и проблема. В последней версии многое исправили в плане подключения нужных заголовков.
Byte_My_Void писал(а): *
в моем понимании, чтобы использовать ту или иную функцию - нужно подключить заголовочный файл командой include и добавить папку в раздел include paths...
Это не всё. Ещё нужно включить в проект файл с определением (телом) тех библиотечных функций, что вы используете. Ошибки линкера Undefined name вам об этом прямо говорят.


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-фев-10 08:20 
Не в сети

Зарегистрирован: 2020-янв-31 15:30
Сообщения: 60
Организация: Istok
Professor Chaos писал(а): *
Это не всё. Ещё нужно включить в проект файл с определением (телом) тех библиотечных функций, что вы используете. Ошибки линкера Undefined name вам об этом прямо говорят.
я наверное неправильно выразился.

добавить С файл с телом функции, заголовочный H, с прототипом и сделать include H файла, в том, файле, где нужно использовать данную функцию. При этом все, что будет использоваться в данной функции тоже должно быть подключено через заголовочные файлы.


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-фев-10 17:15 
Не в сети

Зарегистрирован: 2016-окт-14 19:39
Сообщения: 93
Организация: АО "РИРВ"
Откуда: СПБ
В файле MDR32F9Qx_mil_std_1553.h (вер. 1.5.3) странное объявление:
typedef enum {
	FALSE = 0,
	TRUE = !DISABLE
} Bool;
Может хотели сказать
typedef enum {
	FALSE = 0,
	TRUE = !FALSE
} Bool;
?
К тому же нигде не используется.


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-май-12 23:33 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 344
Организация: ФГУП "РФЯЦ-ВНИИЭФ"
Заглянул в потроха функций:
uint8_t EEPROM_ReadByte(uint32_t Address, uint32_t BankSelector)
uint16_t EEPROM_ReadHalfWord(uint32_t Address, uint32_t BankSelector)
uint32_t EEPROM_ReadWord(uint32_t Address, uint32_t BankSelector)
и вижу там дублирование кода:
  MDR_EEPROM->KEY = EEPROM_REG_ACCESS_KEY;
  Command = (MDR_EEPROM->CMD & EEPROM_CMD_DELAY_Msk) | EEPROM_CMD_CON;
  Command |= (BankSelector == EEPROM_Info_Bank_Select) ? EEPROM_CMD_IFREN : 0;
  MDR_EEPROM->CMD = Command;
  MDR_EEPROM->ADR = Address;
  MDR_EEPROM->CMD = Command | EEPROM_CMD_XE | EEPROM_CMD_YE | EEPROM_CMD_SE;
  MDR_EEPROM->DO;   /* Idle Reading for Delay */
  MDR_EEPROM->DO;   /* Idle Reading for Delay */
  MDR_EEPROM->DO;   /* Idle Reading for Delay */
  Data = MDR_EEPROM->DO;
  Command &= EEPROM_CMD_DELAY_Msk;
  MDR_EEPROM->CMD = Command;
  MDR_EEPROM->KEY = 0;
Есть предложение оставить этот код только в функции чтения слова, а в функциях чтения байта и полуслова заменить этот код вызовом функции чтения слова. По аналогии, как сделано в функциях записи байта, полуслова и слова:
uint8_t EEPROM_ReadByte(uint32_t Address, uint32_t BankSelector)
{
  uint32_t Data;
  uint32_t Shift;

  assert_param(IS_EEPROM_BANK_SELECTOR(BankSelector));

  Data = EEPROM_ReadWord((Address & ~3), BankSelector);

  Shift = (Address & 3) * 8;
  Data >>= Shift;
  return Data;
}
uint16_t EEPROM_ReadHalfWord(uint32_t Address, uint32_t BankSelector)
{
  uint32_t Data;
  uint32_t Shift;

  assert_param(IS_EEPROM_BANK_SELECTOR(BankSelector));
  assert_param(IS_TWO_BYTE_ALLIGNED(Address));

  Data = EEPROM_ReadWord((Address & ~3), BankSelector);

  Shift = (Address & 2) * 8;
  Data >>= Shift;
  return Data;
}
При таком подходе атрибуты размещения в ОЗУ для функций чтения байта и слова не нужны. Также, как не нужны они и для функций записи байта и слова. Эти функции могут спокойно работать из флеш-памяти.

Также есть мысль изменить код функции чтения слова на такой:
__RAMFUNC uint32_t EEPROM_ReadWord(uint32_t Address, uint32_t BankSelector)
{
  uint32_t Command;
  uint32_t Data;

  assert_param(IS_EEPROM_BANK_SELECTOR(BankSelector));
  assert_param(IS_FOUR_BYTE_ALLIGNED(Address));
  
  if(BankSelector == EEPROM_Info_Bank_Select) {
    MDR_EEPROM->KEY = EEPROM_REG_ACCESS_KEY;
    Command = (MDR_EEPROM->CMD & EEPROM_CMD_DELAY_Msk) | EEPROM_CMD_CON;
    Command |= EEPROM_CMD_IFREN;
    MDR_EEPROM->CMD = Command;
    MDR_EEPROM->ADR = Address;
    MDR_EEPROM->CMD = Command | EEPROM_CMD_XE | EEPROM_CMD_YE | EEPROM_CMD_SE;
    MDR_EEPROM->DO;   /* Idle Reading for Delay */
    MDR_EEPROM->DO;   /* Idle Reading for Delay */
    MDR_EEPROM->DO;   /* Idle Reading for Delay */
    Data = MDR_EEPROM->DO;
    Command &= EEPROM_CMD_DELAY_Msk;
    MDR_EEPROM->CMD = Command;
    MDR_EEPROM->KEY = 0;
  }
  else {
    Data = *((uint32_t*)Address);
  }
  return Data;
}
При чтении из информационной памяти всё идет по-прежней ветке. А при чтении из основной - производится обычное чтение константы из памяти по указателю, сделанному из адреса, без перевода флеш-памяти в режим периферийного устройства.


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-май-13 08:54 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1588
Откуда: Тула
Имеет ли исходная ф-ция ограничение на выравнивание адреса? (тогда стоит добавить assert)
Если нет, что вернёт Ваша ф-ция при чтении по не выровненному адресу? (assert на диапазон eeprom в любом случае будет полезен).
Professor Chaos писал(а): *
uint16_t EEPROM_ReadHalfWord(uint32_t Address, uint32_t BankSelector)
{
...
  Data = EEPROM_ReadWord((Address & ~3), BankSelector);

  Shift = (Address & 2) * 8;
  Data >>= Shift;
  return Data;
}
При таком подходе атрибуты размещения в ОЗУ для функций чтения байта и слова не нужны. Также, как не нужны они и для функций записи байта и слова. Эти функции могут спокойно работать из флеш-памяти.
Про атрибуты - тут всем не угодишь. Мелкие функции-обёртки, как Вы предложили, стоит сделать inline. Работать из ОЗУ в общем случае безопаснее...

_________________
сочувствующий…


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-май-13 11:06 
Не в сети

Зарегистрирован: 2018-мар-18 15:49
Сообщения: 267
Организация: StartMilandr.ru
Поскольку на цвет и вкус все фломастеры разные, то:

1 - Я бы вообще удалил функции работы с EEPROM не 32-разрядными словами. Зачем они нужны? Лишь вводят в заблуждение! Программист может решить что чтение байта - это нативная для регистрового чтения функция и начнет вычитывать байтовый массив такой функцией. И получит снижение производительности в несколько раз, поскольку вместо того чтобы за раз считать 4 байта, будет четырежды читать одну и ту-же 32-разрядную ячейку для каждого байта. Так было со мной, пока я не залез внутрь функции и не увидел что творится. Поэтому оставить надо только "родное" 32-разрядное чтение/запись. Если пользователь библиотеки захочет таки работать с меньшими данными он сам додумается как из 32-разрядных слов перейти к байтам.

2 - Вместо удаленных в п1. функций реализовать функцию которая читает/пишет массив байт. Это наиболее универсальное решение при котором пользователю снаружи вообще не придется задумываться как все внутри устроено.

3 - Мешать в одной функции чтения регистровый доступ к памяти и не регистровый нельзя. Пока не залезешь внутрь - не поймешь как собсно функция отработала, а если исходников нет - вообще не узнаешь. Если функция имеет в нотации EEPROM, то это говорит что реализуется регистровый доступ и ничего более там быть не должно. Если нужно упрощение для чтения банка main - пользователь должен написать обертку. Либо можно такую обертку сделать в самой библиотеке, отдельной функцией. Но не внутри EEPROM_ReadWord().


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-июн-07 18:16 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 344
Организация: ФГУП "РФЯЦ-ВНИИЭФ"
Представляю на пробу чуть допиленный файл описания ресурсов МК 1986ВЕ1Т для более удобного и наглядного отображения содержимого регистров. Это проба пера, так что правились только описания портов и блока RST_CLK (и то, последний не все регистры).
Основной посыл - описать раздельно все битовые поля, чтобы не заниматься в уме переводом шестнадцатеричных чисел в двоичные, вычислять позиции, и решать, а что же там в нужном мне битовом поле в 26-й позиции записано.
Кому интересны структура и синтаксис svd-файла - ищите там по тегам <enumeratedValue> и <dim> - все изменения в этих местах. Тут подробно написано про SVD на уровне описания регистров, битовых полей и их именованных значений.
Попутно обнаружил глюк SVDConv.exe (или Кейла - не ясно точно, кто из них виноват).
Такая конструкция в svd:
Открыть из SVD
          <fields>
            <field>
              <dim>16</dim>
              <dimIncrement>1</dimIncrement>
              <name>PULL_DOWN%s</name>
              <description>Pull down</description>
              <bitOffset>0</bitOffset>
              <bitWidth>1</bitWidth>
              <access>read-write</access>
            </field>
            <field>
              <dim>16</dim>
              <dimIncrement>1</dimIncrement>
              <name>PULL_UP%s</name>
              <description>Pull up</description>
              <bitOffset>16</bitOffset>
              <bitWidth>1</bitWidth>
              <access>read-write</access>
            </field>
          </fields>
Закрыть
при конвертации в sfr не выдает ошибок. Но в окне просмотра регистра PD порта отображаются только элементы PULL_DOWN0-PULL_DOWN15, а PULL_UP0-PULL_UP15 нет. Пришлось прописывать их вручную. Если кто-то разберется в чем дело - просьба написать тут. Может это не ошибка конвертера или Кейла, а моя. Может это я что-то не понимаю и делаю неправильно.
В архиве всё, даже командный файл для запуска конвертации из svd в sfr. У меня он работает в папке, путь к которой включает кириллицу и пробелы. Необходимо все файлы разместить в одной папке, запустить SVDconv.cmd. Запустится конвертер (из папки с установленным Кейлом) и сгенерирует (обновит) файлы .SFR, .sfd, .log. В логе смотрим ошибки и предупреждения. Путь к файлу .SFR указываем в Кейле в опциях проекта: вкладка Target, поле System Viewer File (установив галку Use Custom File). Запускаем отладку, смотрим периферию.


Вложения:
SVD.zip [336.77 КБ]
135 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-июн-07 21:25 
Не в сети

Зарегистрирован: 2018-мар-18 15:49
Сообщения: 267
Организация: StartMilandr.ru
Professor Chaos писал(а): *
Такая конструкция в svd:
...
при конвертации в sfr не выдает ошибок. Но в окне просмотра регистра PD порта отображаются только элементы PULL_DOWN0-PULL_DOWN15, а PULL_UP0-PULL_UP15 нет. Пришлось прописывать их вручную. Если кто-то разберется в чем дело - просьба написать тут. Может это не ошибка конвертера или Кейла, а моя. Может это я что-то не понимаю и делаю неправильно.
Посмотрел в наши svd, видимо была такая же история. Половина полей заведена индексно, а вторая руками. Это было давно, ничего не помню, видимо решил не заморачиваться. https://github.com/StartMilandr/MDR_Pac ... s/Keil/SVD


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-июн-08 10:44 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 344
Организация: ФГУП "РФЯЦ-ВНИИЭФ"
StartMilandr писал(а): *
Спасибо. У вас уже все сделано, что я хотел. Можно было велосипед не изобретать :D
Еще один глюк вылез.
Если описать два битовых поля так (см. строку с тегом <isDefault>true</isDefault>):
Открыть
            <field>
              <name>CPU_C3_SEL</name>
              <description>CPU_C2 mux output freq devider, [/1, /2, /4 .. /256]</description>
              <bitRange>[7:4]</bitRange>
              <access>read-write</access>
              <enumeratedValues>
                <headerEnumName>MDR_RST__CPU__C3_</headerEnumName>
                <enumeratedValue>
                  <name>div1</name>
                  <description>div by 1</description>
                  <isDefault>true</isDefault>
                </enumeratedValue>
                <enumeratedValue>
                  <name>div2</name>
                  <description>div by 2</description>
                  <value>8</value></enumeratedValue>
                </enumeratedValue>
                ...
              </enumeratedValues>
            </field>
            ...
            <field derivedFrom="MDR_RST_CLOCK.CPU_CLOCK.CPU_C3_SEL">
              <name>ADC_C3_SEL</name>
              <description>ADC_C2 mux output freq devider, [/1, /2, /4 .. /256]</description>
              <bitRange>[11:8]</bitRange>
              <access>read-write</access>
            </field>
Закрыть
то для первого поля значения по-умолчанию отображаются правильно
А для второго в случае значений по-умолчанию в значении отображается только число, без его имени и описания.


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-июн-08 15:59 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 544
Цитата:
<value>8</value></enumeratedValue>
</enumeratedValue>
вроде один </enumeratedValue> лишний?


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-июн-08 16:37 
Не в сети

Зарегистрирован: 2018-мар-18 15:49
Сообщения: 267
Организация: StartMilandr.ru
Professor Chaos писал(а): *
У вас уже все сделано, что я хотел. Можно было велосипед не изобретать
Всегда можно сделать что-то лучше. Наши минусы:
1 - Совсем нет блоков CAN, Arink, MKIO, USB (Не успели с ними поработать). И еще каких-то мелких блоков нет.
2 - В SVD для отображения надо убрать регистры DR блоков SSP, UART - это мешает отладке, потому что Keil их постоянно вычитывает. (Нам эти регистры были нужны, т.к. мы SVD использовали чтобы сгенерить заголовочники для МК, как это делал когда-то в своем паке RMax.)
3 - Вывод некоторых полей удобней сделать чекбоксами, а не выпадающими списками (On/Off).


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-июн-08 20:02 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 344
Организация: ФГУП "РФЯЦ-ВНИИЭФ"
редактор писал(а): *
вроде один </enumeratedValue> лишний?
Да, лишний, но в файле ошибки нет. Она только здесь - ошибся, когда удалял другие значения, чтобы не загромождать текст. Не удалил один тег.


Вернуться к началу
 Заголовок сообщения: Re: Standard Peripherals Library MDR32F9x, VE1, VE3, VE4, VC1
СообщениеДобавлено: 2020-июн-08 20:10 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 344
Организация: ФГУП "РФЯЦ-ВНИИЭФ"
StartMilandr писал(а): *
SVD для отображения надо убрать регистры DR блоков SSP, UART - это мешает отладке, потому что Keil их постоянно вычитывает.
Может присвоить им атрибут read-only и оставить?
StartMilandr писал(а): *
Вывод некоторых полей удобней сделать чекбоксами, а не выпадающими списками (On/Off).
Согласен, чекбоксы более читабельны, чем текстовые значения типа ON/OFF, YES/NO, TRUE/FALSE.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 377 сообщений ]  На страницу « 121 22 23 24 25 26 »

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти: 

Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB