Змінюй хід війни! Допомагай ЗСУ!

Программирование ARM. Eclipse, Keil,IAR,CooCox - всё сюда.

Мда. По весне начался падеж мелкого китайского скота программатора.
Статикой видимо выбило пин reset, он звонился на землю несколькими десятками Ом. Кристалл, естессно, не стартовал. Запаял проводок на +3,3. Полет нормальный. ИЧСХ этот самый ресет икуд не выведен наружу, все внутри люминёвего корпуса. КАК?!

Странное событие... Не, у меня нет пробоев - я всё прозвонил.
Похоже, действительно, кварц. Есть все питания, есть контакты, но нет связи. Ваачпе. ЮСБ видит 1,5кОм резистор и детектит неизвестное устройство, на чем их взаимопонимание и заканчивается.

Keil - странная, всё-таки, зверушка.
Ему, *****, правила хорошего тона подавай, переменные, *****, в хедер не суй, зато функция с объявленным целочисленным типом великолепно компилируется, если не возвращает значение.
Ну не дятел он?

P.S. И эти люди запрещают мне ковыряться в носу.



ЫЫЫЫ.

Народ, а как вы в кейле передаете в функцию указатель на массив?
Вот есть у меня функция по кодировке десятичного числа в ASCII строку.
Строка - в массиве.
Код:
uint8_t tempstr[5];
encodeASCII (&tempstr, 32765);

//------ где-то в совсем другом файле ---

void encodeASCII (uint8_t *psy[], uint16_t code)
{
 // и тут как напедалили кода
}

Разіменовівать **** отказівается. Чего ему, ****у, ещё надо?

Он считает, что передает параметр aka unsigned char* в функцию, которая принимает unsigned char**...

Шозанах? Указатель на указатель? *****, убрал указатели, передал просто имя массива - тоже авотхуй...

Оказывается - ему надо массив без указателя впердолить в аргументы. Он типа умный и сам понимает, что затянуть массив ему не по силам и тянет указатель.

А явным образом он охуевает, и считает, что я указатель на указатель показал
****, из 3х способов из учебника он почему-то выбирает 4-й:рл:

P.S. Не, оно конечно удобно - не надо ******* с указателями, работаешь с массивами, как с обычной переменной, беря его из аргумента, но, *****... может давайте уже и структуры тоже передавать начнем? Не, ну правда, ***** вообще те указатели?
 
Останнє редагування:
Все он правильно делает. При передаче указателя на массив ты можешь пойти двумя путями:
или так func( &var[0]) в явном виде объявив указатель на нулевой элемент
или так func(var) нифига не объявляя

Оба способа соответствуют стандарту С89
 
P.P.S Причем, только в объявлении и прототипе функции он это делает.
В вызове - пожалуйста, или тупо имя без скобочков, или &имя[0] - одинаково хавает.
А вот в прототипе указатель на массив назначить аргументом - нимаги. Только голый массив, или он посчитает имя указателем и неявно преобразует * к **.
Больной *****...

Все он правильно делает. При передаче указателя на массив ты можешь пойти двумя путями:
или так func( &var[0]) в явном виде объявив указатель на нулевой элемент
или так func(var) нифига не объявляя

Оба способа соответствуют стандарту С89

При вызове - да, и так и так работает. А в прототипе он имя массива автоснабжает значком *. Мне его он не показывает. Таким образом принимать он будет var**. Нельзя * в прототипе перед массивом ставить, ели надо сам массив передавать.
 
uint8_t tempstr[5]; encodeASCII (&tempstr, 32765); //------ где-то в совсем другом файле --- void encodeASCII (uint8_t *psy[], uint16_t code) { // и тут как напедалили кода }
а там точно на входе должен быть массив указателей на указатель? :eyecrazy: вернее ***** он там всрался?
скобочки *psy[] явно лишние
void encodeASCII (uint8_t *psy, uint16_t code)
 
а там точно на входе должен быть массив указателей на указатель? :eyecrazy: вернее ***** он там всрался?
скобочки *psy[] явно лишние
void encodeASCII (uint8_t *psy, uint16_t code)

В объявлении работает и так и так. Я ж дебагером смотрю на результат функции - всё там происходит нормально.
[] можно ставить, это он понимает. Можно не ставить - тоже понимает.

Вроде как передавать можно 2-мя способами.
func (int n[]) {...}
func (int* n) {.....}

***... я в следующий раз скринить буду такие чудеса.
Усё, со скобками уже не катит. Теперь всё по классике uint8_t *psy[] - выдает болт. Вернее, оно выдает что и положено - массив указателей, соответственно, код в функции не работает.

А днём, когда я писал - работал и в том и в том виде.

P.S. Рождается вопрос - а как отучить кейл от "забывчивости"?
Он по ходу действительно забывает учитывать правки, получается, что я пишу, а компилируется несколько другой код, где написанного, как бы, и нет.
 
Он по ходу действительно забывает учитывать правки, получается, что я пишу, а компилируется несколько другой код, где написанного, как бы, и нет.
ноно. Это надо ребилд жмыхать. Я не помню, как там с зависимостями работать. Я когда сидел в кейле тупо ребилдил(clean&build) и все. А чтобы не дергалась большая масса исходников - собирать неизменяемую часть в статик либы.
----
в общем я сколотил вместе все наличествующие system_stm32*.h stm32*.S унд stm32f*.h из всех HALов
сторонние либы - для вкуривания непонятных моментов.
теперь у меня файл #include "stm32.h"
сборник занимает 55 метров
так же к нему питоноскриптики завязанные на grep для облегчения понимания шо можно делать и шо низя внутри всего большого семейства.
при оказии выложу на gitlab

оставаться на уровне подобных либ нехоцца - сразу этот слой пускаю в игнор и забочусь о более высокоуровневых вещах, с которыми приходится работать.

в файлы от куба *.ioc никогда не заглядывал, думал шо там жоский xml :d
а там ваще лафа для парсинга назначений пинов. обалдеть
перепиленный gpio у меня выглядит
Код:
struct gpio_configuration
{
  unsigned open_drain:1;
  unsigned output:1;
  unsigned analog:1;
  unsigned alter:1;
  unsigned speed:2;
  unsigned pullup:1;
  unsigned pulldn:1;
  unsigned lock:1;
  unsigned altfunc:4;
};

/*config one pin*/
void gpio_pin_conf(							// perform config for 1 pin
	GPIO_TypeDef *gp,						// select port
	uint8_t	num,							// bit number
	uint8_t	value,							// initial value
	const struct gpio_configuration *conf);	// config

/*config pin group*/
void gpio_group_conf(		// group conf
	GPIO_TypeDef *gp,		// port
	uint16_t group,			// pin mask
	uint16_t value,			// initial value (masked by group) and atomically set & reset
	const struct gpio_configuration *conf);
usage:
Код:
void pwm_pins_setup(void)
{
	static const struct gpio_configuration cfg=
	{
		.alter = 1,	.altfunc = 2 //ALT =2 T1 function
	};
	// pins PA 6,7,8,9,10 PB0,1
	gpio_group_conf(GPIOA, 0x1F << 6, 0xFFFF, &cfg);
	gpio_group_conf(GPIOB, 3, 3, &cfg);
}
шо я таки хочу этим сказать. забейте *** на эти все задроченные *InitStructure и живите нормальной жизнью.
:ги: в стандарте gnu99
у нас весь 100% портабельный конфиг пинов умещается в 2 байта флеша.
Изменяемые параметры - маска и порт.
Так и то можно забить на это и задавать всё во флеше.
такая же участь ожидает некоторые другие общие IP, но там надо ближе к области применения, поскольку сферический конь spi ***** не нужен никому. нужна конкретика а не дрыгалка битиками с "понятными" названиями от индусов.
-------------------------------
 
Останнє редагування:
Главное чтоб от себя не добавлял :D
 
ноно. Это надо ребилд жмыхать. Я не помню, как там с зависимостями работать. Я когда сидел в кейле тупо ребилдил(clean&build) и все. А чтобы не дергалась большая масса исходников - собирать неизменяемую часть в статик либы.

ребилд, ребилд, он самый.
Выше рокер тоже писал, что у него не вносятся правки.

Главное чтоб от себя не добавлял :D

Та ну его *****, я ж чуть моск не поломал с ним.
У меня крепнет желание перенести USB на кокос... Там вообще таких проблем нету. Он тупой шо AVR студия. И быстрее кейла заметно.

Времени не хватает, сцуко, хронически, но каждый раз убеждаешься, что мирясь с косяками - оно не экономится. В итоге его уходит больше, чем если бы сел и расколупал.
На противоположной чаше весов сидит жаба, и, ****, душит, ведь и кубик генерит исправно, и код, вроде, работает и какой-то уже написан...

****ая проблема выбора.

P.S.
Як остопиздило купатися мені.
Чи може іскупатися?
Купатись чи не купатись?
***дські ці питання зайобують.
То може, не вагаясь, спустити враз штани та батерфляєм
***рити, аж поки за буями в очах не потемніє?
Ну а згодом?
Про наслідки можливі не подумать?
Один лиш тільки раз і вже крадеться ****ець з своєю усмішкою хижой.
Простуда, геморой, чіряк на сраці, запльована підлога, лікарі, від шприца гематоми і могила...
На ній брудна Офелія вонюча та купка маргаріток, а під нею лежить той фраєр, що любив купатись.
Такіє варіанти єбав я в рот і в носа. (Гамлєт харка у море і його дрючком ****ячить.)
 
7227356.png


что у тебя за косяки с Кейлом. У меня нормально работет, не считая того глюка что я писал выше, ну и трабл с тем что он ***** НЕ ВИДИТ АЛГОРИТМА ПРОШИВКИ ПАДЛА!!!
А в остальном, ОК.
 
а я когда 5-й вышел - я его испугалси :D он падучий какой-то был.
вот все говорят на 4.7х ужасные вещи, а мне понравился. Стабильность :rolleyes:
Писать именно текст там невозможно - но для этого есть другие вещи. Я пользуюсь geany везде - и под форточькой и под линухом. А в остальном - когда ничего не работает - открываю хршный ноут хз каких времен и кейл 4.73 спасает положение :yahoo:



ведь и кубик генерит исправно, и код, вроде, работает и какой-то уже написан...

кста. я тут приводил cdc от opencm3 6кб.
поскольку это довольно таки самостоятельная вещь (один коллбек и все едет искаропки) - можно собрать его в статик либу под несколько подсемейств :rolleyes: да хоть под все - и забыть о нем надолго.
то же самое и с HID
а вот msc - то да. можно крупно :as is:
 
Останнє редагування:
7227356.png


что у тебя за косяки с Кейлом. У меня нормально работет, не считая того глюка что я писал выше, ну и трабл с тем что он ***** НЕ ВИДИТ АЛГОРИТМА ПРОШИВКИ ПАДЛА!!!
А в остальном, ОК.

Я когда сломался STlink - поставил J-link и тоже так было. Он на мидл не видел какого-то алгоритма.
Пришлось руками показывать
algoritm.png


С ST-link этой проблемы небыло. Я даже не имел понятия где он там прописывается, просто всё сразу заработало.

кста. я тут приводил cdc от opencm3 6кб.
поскольку это довольно таки самостоятельная вещь (один коллбек и все едет искаропки) - можно собрать его в статик либу под несколько подсемейств :rolleyes: да хоть под все - и забыть о нем надолго.
то же самое и с HID
а вот msc - то да. можно крупно :as is:

Ну, msc кубик тоже генерит. На кубик есть доки на HAL.
opencm3 я, честно говоря, просто не понял в каком составе качать и в каком порядке подключать. Если как и HAL - то нужно ещё знать кто там за шо отвечает, курить мануалы и :as is:

По хорошему - если бы был тупо заголовочный файл с закоментированными строками и оно подключалось бы тупым раскомментированием #include на каждый узел - это была бы тема. Я не знаю, есть ли там такой.
Если его нет - потери времени не оправдываются, ибо в HAL я уже прилично вгрызся, и он валится прямо из куба - только выставляй конфигурацию и топчи кнопку. И то и то, при всём, работает. В этом случае рулит время.
 
Опа, опа, а шо означают надписи в колонке Origin? У меня все файлы MDK Core. Подпихивал вручную много раз и пох, не работает
 
кста, китайcи-жлинк по слухам некоторые вспоминают шо их ломали и посылают всех искать Шамбалу :rolleyes:
 
Опа, опа, а шо означают надписи в колонке Origin? У меня все файлы MDK Core. Подпихивал вручную много раз и пох, не работает

Не имею понятия - оно такое было :D
Видимо, они ставятся с каким-то тулзом. STM32 Flash тулз, зрова на сеггер и т.д. У меня просто стоят все они и я не знаю из чего взялись эти строки.
Там стояло в общей сложности 5 IDE. Кокос, WS4, тру студио, IAR и кейл.
Сейчас стоит IAR, кейл и кокос, остальные выродки еклипса я удалил, но они все упорно ставили какие-то свои паки и дрова.
Не разобрать уже.

кста, китайcи-жлинк по слухам некоторые вспоминают шо их ломали и посылают всех искать Шамбалу :rolleyes:

Без всяких слухов. Один такой у меня дома. Завтра, одухотворенный там, что прокатило сегодня с другим Жлинком - попробую не забыть его взять на работу и туда же засунуть. Вдруг он оживится.
 
У меня эти алгоритмы ставились отдельным паком на Кейл, там поддержка туевой хучи процов всевозможных производителей. А мне бы 5-6 штук на F10x серию, но чтоб работало, мля...
 
У меня эти алгоритмы ставились отдельным паком на Кейл, там поддержка туевой хучи процов всевозможных производителей. А мне бы 5-6 штук на F10x серию, но чтоб работало, мля...

Я повторю совет - прошерстить менеджер пакетов. Там есть кнопочки "проверить апдейты"(кажется) и "update" (если есть апдейты).
У меня кейл обновился до 5.18 и я не жалеючи пространства жмакал апдейт на всё, на что он был, хотя мне кроме f10x нихрена и не надо было.
 
Не апдейтится, походу его все устраивает
 
Не апдейтится, походу его все устраивает

он сначала должен поискать и найти апдейты. Если они есть - тогда активируется кнопочко.

Но у меня эти карты памятей могли подтянуться и с другим софтом. Оригин - это значит, что STM влепил. Или с флэштулсом, или с другой IDE, потому как он дрова на СТлинк каждый раз поверх переставлял, а иногда - по 2 раза на 1 ИДЕ. Шо-то всё ставил и ставил. Выяснить нереально уже :)

У меня эта хрень лежит тута:
C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Flash\STM32F10x_128.FLM

а MDK Core хранит своё файло тута:
(пример) C:\Keil_v5\ARM\flash\K8P5615UQA_x2.FLM

Может тебе их просто выложить?

Там есть вот это:
Что тебе выложить из него?
keilpac.png


Пакдескриптор начинается так:
<?xml version="1.0" encoding="UTF-8"?>

<package schemaVersion="1.2" xmlns:xs="
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
" xs:noNamespaceSchemaLocation="PACK.xsd">
<vendor>Keil</vendor>
<url>
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
</url>
<name>STM32F1xx_DFP</name>
<description>STMicroelectronics STM32F1 Series Device Support, Drivers and Examples</description>

<releases>
<release version="2.1.0" date="2016-04-14">
Updated CMSIS drivers:
- EMAC:
-- Improved robustness by function checking that driver is powered (EMAC_FLAG_POWER)
- CAN:
-- Corrected functionality when only one CAN controller is used
-- Corrected pin remap configuration for CAN2 port pins
-- Corrected functionality when NULL pointer is provided for one or both signal callbacks in Initialize function
- USB Device:
-- Corrected Isochronous transfer
-- Corrected IN Endpoint FIFO flush procedure
- USB Host:
-- Removed interrupt priority handling
-- Corrected multiple packet sending
-- Corrected PowerControl function for unconditional Power Off
- USART:
-- Corrected Peripheral Reset and Clock enable/disable (check if peripheral is available on selected device)
-- Corrected CTS handling and added signal CTS change event.
- SPI:
-- Corrected Peripheral Reset and Clock enable/disable (check if peripheral is available on selected device)
-- Corrected Bus Speed configuration
-- Corrected 8bit/16bit Data register access, regarding the Data frame size
-I2C:
-- Corrected invalid __I2C_DMA field in I2C_DMA_TxEvent and I2C_DMA_RxEvent functions
Updated/added examples:
- Added examples using Network DualStack (IPv4/IPv6) Middleware targeting MCBSTM32C (Keil.MDK-Middleware.7.0.0.pack required)
- Updated emWin examples to emWin V5.32
- Updated CAN examples
- Updated USB Host examples
- Updated USB Device CDC ACM VirtualCOM examples
Updated RTE_Device.h: Corrected USART Pin configuration
Added trace configuration to the debug description and updated Quick Start Guide
</release>
 
Ну до второй линейки я пока не дорос :) Давай первую
 
То есть, это должно лежать на странице
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.

MDK5 Software Packs
For MDK Version 5 additional software components and support for microcontroller devices is provided by Software Packs. DFP (Device Family Pack) indicates that a Software Pack contains support for microcontroller devices.

и там где-то он есть. То есть - это не левак, это пак и он как-то у меня скачался.

Ну до второй линейки я пока не дорос :) Давай первую

82МБ :)

Это так просто не выложить.

Есть мысли?

Он лежит тут. Конкретно тот, что у меня
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.


ссылка на скачивание:
Ctrl+F - > "STMicroelectronics STM32F1 Series Device Support, Drivers and Examples"

Там есть такая строка и в ней стрелочка даунлоада справа. Работает, проверил.

Вот в этом самом паке - те самые файлы лежат.
 
Назад
Зверху Знизу