реклама на сайте
подробности

 
 
> Щупаю HAL библиотеку. Групповое управление выводами?, С пинами понятно.А как для шин,когда в этом порту есть независим пины?
Мур
сообщение Jul 12 2015, 09:56
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Удобно в этой библиотеке организовывать ногодрыганье. Выбор стандартный GPIO_PIN_SET, GPIO_PIN_RESET...

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

Ткните носом, господа! По кругу блукаю и не верю в побитовые установки. Как-то коряво выходит! Что-то я не вижу главного...
Шина на 8 разрядов должна быть простой.

Спасибо за совет!
Рад буду примерам...
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 26)
Defin
сообщение Jul 12 2015, 11:51
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 105
Регистрация: 26-12-11
Из: Казань
Пользователь №: 69 101



HAL от ST я так понимаю?
Для такой задачи он не нужен, можно просто выставлять биты в регистре BSRR порта GPIO. Можно как задавать выводы для установки, так и для снятия.
Go to the top of the page
 
+Quote Post
Мур
сообщение Jul 12 2015, 12:55
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Defin @ Jul 12 2015, 14:51) *
HAL от ST я так понимаю?
Для такой задачи он не нужен, можно просто выставлять биты в регистре BSRR порта GPIO. Можно как задавать выводы для установки, так и для снятия.

Спасибо!
Да! STM32...
Сам HAL это использует...
Цитата
/**
* @brief Sets or clears the selected data port bit.
*
* @note This function uses GPIOx_BSRR register to allow atomic read/modify
* accesses. In this way, there is no risk of an IRQ occurring between
* the read and the modify access.
*
* @param GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral
* @param GPIO_Pin: specifies the port bit to be written.
* This parameter can be one of GPIO_PIN_x where x can be (0..15).
* @param PinState: specifies the value to be written to the selected bit.
* This parameter can be one of the GPIO_PinState enum values:
* @arg GPIO_BIT_RESET: to clear the port pin
* @arg GPIO_BIT_SET: to set the port pin
* @retval None
*/
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
{
/* Check the parameters */
assert_param(IS_GPIO_PIN(GPIO_Pin));
assert_param(IS_GPIO_PIN_ACTION(PinState));

if(PinState != GPIO_PIN_RESET)
{
GPIOx->BSRR = GPIO_Pin;
}
else
{
GPIOx->BSRR = (uint32_t)GPIO_Pin << 16;
}
}


Побитно это уместно. Но на 8 бит лаконично не получится...
Go to the top of the page
 
+Quote Post
Defin
сообщение Jul 12 2015, 13:20
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 105
Регистрация: 26-12-11
Из: Казань
Пользователь №: 69 101



Этот регистр принимает маску.

GPIOx->BSRR = (маска_пинов_для_установки_в_1) | (маска_пинов_для_установки_в_0 << 16);

Например есть порт GPIOA. Пины 0 - 7 используются для вывода на шину 1 байта. А Пины 8-15 для каких-либо других целей. Допустим управляют светодиодами.
И вот в шину понадобилось вывести значение 0xA1, при этом светодиоды не должны изменить своего состояния.

Делается просто:

void setByte(uint16_t value)
{
GPIOx->BSRR = (0xFF & value) | ((0xFF & (~value)) << 16 );
}

После вызова setByte(0xA1); в порте будут выставлены нужные биты.



Go to the top of the page
 
+Quote Post
Мур
сообщение Jul 12 2015, 13:33
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Defin @ Jul 12 2015, 16:20) *
Этот регистр принимает маску.

GPIOx->BSRR = (маска_пинов_для_установки_в_1) | (маска_пинов_для_установки_в_0 << 16);

Например есть порт GPIOA. Пины 0 - 7 используются для вывода на шину 1 байта. А Пины 8-15 для каких-либо других целей. Допустим управляют светодиодами.
И вот в шину понадобилось вывести значение 0xA1, при этом светодиоды не должны изменить своего состояния.

Делается просто:

void setByte(uint16_t value)
{
GPIOx->BSRR = (0xFF & value) | ((0xFF & (~value)) << 16 );
}

После вызова setByte(0xA1); в порте будут выставлены нужные биты.


Ну да!.. Непосредственно в регистр.. "Лучшее - враг хорошего!"(HAL ориентирован на биты) Проще не бывает!..
Я ожидал от HAL боле изящных ходов...
Спасибо!
Go to the top of the page
 
+Quote Post
Nixon
сообщение Jul 12 2015, 18:12
Сообщение #6


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



Кто вам мешает делать вызов HAL_GPIO_WritePin с параметрами в виде маски?
Код
HAL_GPIO_WritePin(GPIOx, PIN1 | PIN2 | | PINX, PinState)


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 12 2015, 20:07
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Defin @ Jul 12 2015, 14:51) *
Для такой задачи он не нужен, можно просто выставлять биты в регистре BSRR порта GPIO. Можно как задавать выводы для установки, так и для снятия.

+1.
Вот сейчас ваяю под LPC4370. У них там софтина называется LPCOpen. Я ваще не понял, зачем оно надо. Документации на софтину практически нет, работать напрямую с регистрами проще и быстрее (про них же написан мануал!). Заглядываю внутрь и вижу индусский говнокод: например, задержка 50 мкс "while(delay--) {}" - это вообще как или где? Такие дела. Видимо, не все софты одинаково полезны.
Go to the top of the page
 
+Quote Post
Defin
сообщение Jul 12 2015, 20:43
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 105
Регистрация: 26-12-11
Из: Казань
Пользователь №: 69 101



Цитата(Nixon @ Jul 12 2015, 21:12) *
Кто вам мешает делать вызов HAL_GPIO_WritePin с параметрами в виде маски?
Код
HAL_GPIO_WritePin(GPIOx, PIN1 | PIN2 | | PINX, PinState)


Можно, но это подходит только если всем пинам нужно выставить одно состояние. А если необходимо вывести байт иди два на шину - то нет.

Цитата(scifi @ Jul 12 2015, 23:07) *
+1.
Вот сейчас ваяю под LPC4370. У них там софтина называется LPCOpen. Я ваще не понял, зачем оно надо. Документации на софтину практически нет, работать напрямую с регистрами проще и быстрее (про них же написан мануал!). Заглядываю внутрь и вижу индусский говнокод: например, задержка 50 мкс "while(delay--) {}" - это вообще как или где? Такие дела. Видимо, не все софты одинаково полезны.


Такие софтины полезны для быстрого освоения процессора/платформы, нет необходимости прыгать по тысячестраничному референс мануалу.
Иногда отсутствие документации компенсируется примерами, внятными комментариями к коду или хорошим стилем кода.

Но говнокод в таких библиотеках раздражает, приходится допиливать. А если уж нужна скорость работы - то оперировать только регистрами.
Go to the top of the page
 
+Quote Post
Мур
сообщение Jul 13 2015, 06:14
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Nixon @ Jul 12 2015, 21:12) *
Кто вам мешает делать вызов HAL_GPIO_WritePin с параметрами в виде маски?
Код
HAL_GPIO_WritePin(GPIOx, PIN1 | PIN2 | | PINX, PinState)

Именно это меня и ужаснуло!... Коряво..
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 13 2015, 06:56
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Мур @ Jul 12 2015, 15:55) *
if(PinState != GPIO_PIN_RESET)
{
GPIOx->BSRR = GPIO_Pin;
}
else
{
GPIOx->BSRR = (uint32_t)GPIO_Pin << 16;
}
Бьюсь головой об стол.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 13 2015, 15:33
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Сергей Борщ @ Jul 13 2015, 09:56) *
Бьюсь головой об стол.

Сопереживаю.
Такое ачучение складывается, что эти "блюмблюатеки" проектируют недоучившиеся студенты. Вот есть нормальный такой регистр, который всем понятен. Нет, нужно завернуть его в говнообёртку. А потом неокрепшие умы терзаются: "Ну как же правильно дёргать ножкой, чтобы всё было по феншую?", подразумевая, конечно, что самому в регистры лезть нельзя. Театр абсурда.
Go to the top of the page
 
+Quote Post
Мур
сообщение Jul 13 2015, 16:04
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Сергей Борщ @ Jul 13 2015, 09:56) *
Бьюсь головой об стол.

Я же говорю,- побитно еще можно понять... Либо SET либо RESET(аж на 16 бит выше!).
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 13 2015, 19:42
Сообщение #13


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(scifi @ Jul 13 2015, 18:33) *
Вот есть нормальный такой регистр, который всем понятен. Нет, нужно завернуть его в говнообёртку.
Ну ладно, с содержимым функции еще можно было бы смириться, но почему не сделать эту функцию статической и не поместить ее в заголовочный файл? Компилятор бы ужал ее по максимуму и эффективность была бы практически как с прямой записью в регистр. Но видимо это верхняя математика для писателей библиотек.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
k000858
сообщение Jul 14 2015, 02:49
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(Сергей Борщ @ Jul 13 2015, 23:42) *
Ну ладно, с содержимым функции еще можно было бы смириться, но почему не сделать эту функцию статической и не поместить ее в заголовочный файл? Компилятор бы ужал ее по максимуму и эффективность была бы практически как с прямой записью в регистр. Но видимо это верхняя математика для писателей библиотек.

эм. простите что немного не по теме..
я привык считать, что статические функции имеют ограничения и доступны только в пределах библиотеки (за счет чего происходит сжатие - оптимизация).
т.е. выражения "сделать эту функцию статической" и "поместить ее в заголовочный файл" взаимоисключающие..
или я чего то не понимаю..?
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Jul 14 2015, 04:29
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(k000858 @ Jul 14 2015, 05:49) *
эм. простите что немного не по теме..
я привык считать, что статические функции имеют ограничения и доступны только в пределах библиотеки (за счет чего происходит сжатие - оптимизация).
т.е. выражения "сделать эту функцию статической" и "поместить ее в заголовочный файл" взаимоисключающие..
или я чего то не понимаю..?


static-функции доступны в пределах единицы трансляции (т.е. файла *.c после подстановки в него всех файлов *.h)

static в хидере - это, как я понимаю, замена inline для древних си-компиляторов. Без static будет ошибка линковки.
Однако со static, если компилятор не проинлайнит, получится несколько копий одной и той же функции в разных объектниках, а затем и в программе. Для inline, как я понимаю, в таком случае в программе будет одна копия.

Что касается громкого слова "библиотека", то это в данном случае это просто набор исходных файлов, которые лежат в отдельной папке и включаются в проект наравне с файлами самой программы.
Go to the top of the page
 
+Quote Post
k000858
сообщение Jul 14 2015, 07:12
Сообщение #16


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(Непомнящий Евгений @ Jul 14 2015, 08:29) *
static-функции доступны в пределах единицы трансляции (т.е. файла *.c после подстановки в него всех файлов *.h)

static в хидере - это, как я понимаю, замена inline для древних си-компиляторов. Без static будет ошибка линковки.
Однако со static, если компилятор не проинлайнит, получится несколько копий одной и той же функции в разных объектниках, а затем и в программе. Для inline, как я понимаю, в таком случае в программе будет одна копия.

Что касается громкого слова "библиотека", то это в данном случае это просто набор исходных файлов, которые лежат в отдельной папке и включаются в проект наравне с файлами самой программы.

под "в пределах библиотеки" имелось ввиду "в пределах с-файла"
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 14 2015, 07:18
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(k000858 @ Jul 14 2015, 05:49) *
я привык считать, что статические функции имеют ограничения и доступны только в пределах библиотеки
В пределах единицы трансляции.

Цитата(k000858 @ Jul 14 2015, 05:49) *
т.е. выражения "сделать эту функцию статической" и "поместить ее в заголовочный файл" взаимоисключающие..
Напротив. Это позволяет иметь в каждой единице трансляции копию этой функции, что позволяет оптимизатору видеть тело этой функции в каждой единице трансляции и попытаться вставить все тело в точку вызова. Поскольку обсуждаемая функция в 99.99% случаев имеет константный аргумент PinState, оптимизатор выкидывает и проверку условия и неиспользуемую ветку под условием. Оставшееся вырождается в пару-тройку команд, которые занимают явно меньше места, чем код по вызову исходной функции (не говоря уже о времени исполнения). А если таких вызовов идет несколько, то оптимизатор может дополнительно объединить между ними загрузку указателя на структуру порта. Да, как заметил Непомнящий Евгений, это некое подобие inline, не предусмотренного в стандартном C 89 года. К сожалению, подобные "библиотеки от призводителя" до сих пор тащат в себе совместимость с этим древним стандартом. Можно пойти еще дальше - написать макрос, который при компиляции в режиме стандарта 89 года будет разворачиваться в static, а для более нового - в inline. Но слабо верится, что кто-то в ST когда-нибудь так сделает.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
k000858
сообщение Jul 15 2015, 10:15
Сообщение #18


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



извиняюсь за неграмотность, что есть
Цитата
В пределах единицы трансляции.
?
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Jul 15 2015, 10:51
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(k000858 @ Jul 15 2015, 13:15) *
извиняюсь за неграмотность, что есть ?


Когда вы компилируете С-файл, то сначала отрабатывает препроцессор, подставляя все include. То, что в результате получается и подается на вход компилятора, называется единица трансляции. На выходе каждой единице трансляции соответствует свой объектный файл.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 15 2015, 10:52
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Сергей Борщ @ Jul 14 2015, 10:18) *
Это позволяет иметь в каждой единице трансляции копию этой функции, что позволяет оптимизатору видеть тело этой функции в каждой единице трансляции и попытаться вставить все тело в точку вызова.

Все современные компиляторы для ARM имеют режим компиляции, при котором компилятор видит всю программу и имеет возможность вставлять тело любой функции в месте вызова. Уже нет нужды приделывать для этого костыли.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 15 2015, 11:43
Сообщение #21


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(scifi @ Jul 15 2015, 13:52) *
Уже нет нужды приделывать для этого костыли.
Писатели "библиотек" даже такие костыли не умеют. А я давно использую плюсы и inline. К сожалению, всю программу на плюсах целиком gcc до сих пор не умеет, увы. Для ARM7 ему сносит крышу от thumb/arm, а для кортексов добавление -flto на программе чуть сложенее "Здравствуй, мир!" дает кучу ошибок
Код
`имя_функции' referenced in section `.text' of /tmp/ccALW1vd.ltrans2.ltrans.o: defined in discarded section `.text' of ./release/obj/имя_файла.o (symbol from plugin)



--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Мур
сообщение Jul 15 2015, 12:32
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Сергей Борщ @ Jul 15 2015, 14:43) *
Писатели "библиотек" даже такие костыли не умеют. А я давно использую плюсы и inline. К сожалению, всю программу на плюсах целиком gcc до сих пор не умеет, увы. Для ARM7 ему сносит крышу от thumb/arm, а для кортексов добавление -flto на программе чуть сложенее "Здравствуй, мир!" дает кучу ошибок
Код
`имя_функции' referenced in section `.text' of /tmp/ccALW1vd.ltrans2.ltrans.o: defined in discarded section `.text' of ./release/obj/имя_файла.o (symbol from plugin)


Осмелюсь спросить, какую именно среду вы предпочитаете для С++?
uVision ведет себя странно по моим наблюдениям. Имеет смысл копать дальше или выбрать другую среду IAR? GCC/Eclipse? EmBlocks? emIDE?...
Go to the top of the page
 
+Quote Post
Мур
сообщение Jul 16 2015, 04:57
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Оказалось, что что нам по-настоящему нужно,-рядом!

Я в восторге от SW4STM32 (System Workbench). Он и с Сube дружит, ST-Link понимает и С++ легко ....и не большой. Здорово, что на Eclipse...
Go to the top of the page
 
+Quote Post
k000858
сообщение Jul 16 2015, 05:17
Сообщение #24


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(Мур @ Jul 16 2015, 08:57) *
Оказалось, что что нам по-настоящему нужно,-рядом!

Я в восторге от SW4STM32 (System Workbench). Он и с Сube дружит, ST-Link понимает и С++ легко ....и не большой. Здорово, что на Eclipse...

если сравнивать с привычной связкой eclipse + GNU ARM Eclipse Plug-ins, есть бонусы?
Go to the top of the page
 
+Quote Post
Мур
сообщение Jul 16 2015, 07:13
Сообщение #25


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(k000858 @ Jul 16 2015, 08:17) *
если сравнивать с привычной связкой eclipse + GNU ARM Eclipse Plug-ins, есть бонусы?

Мне трудно судить. Я мутирую от IAR->Keil->SW... Думаю разницы серьезной быть не может.

Самое главное,- бесплатно и свободно!
Go to the top of the page
 
+Quote Post
Мур
сообщение Jul 16 2015, 11:19
Сообщение #26


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



https://www.youtube.com/watch?v=PqsgSVbgfBs

Здесь можно глянуть процесс создания проекта под эту интересную среду. Геморрой не автоматизирован, как в IAR или Keil. Впечатлительным не смотреть!
Получается OFFTOP!
Не поленился и наваял себе по этому фильму мурзилку. Может кому пригодится?
Процедура создания проекта в среде SW4STM32

1. CubeMX генерируем проект под эту среду. Причем, установки делаем следущие:
А.Выбор контроллера, установка тактирования и периферии
B.Режим генерации. Имя проекта XXX . SW4STM32 среда.
Copy only the necessary library files
2. Открываем папку назначения после генерации.
3. Запускаем SW4STM32 и открываем новый проект. New-> C++Project->Empty Ptoject(Executable) + Acб STM32 MCU GCC + Project name(…prj)->Next->Next->
Create a new custom board( name+mcu+sel.debug interface (ST-Link SWD))
->OK->Next->Finish

3.5. Открыть …prj
В папке …prj удалить startup – папку и LinkerScript.ld
В среде сделать Refresh ( исчезнет startup)
4. В сгенерированой папке пометить Drivers\Inc\Src и перенести в …prj.
Цитата
5. В сгенерированой папке войти в папку SW4STM32 и файл syscalls.c перенести в …prj.
лишнее в текущей версии
6. В сгенерированой папке войти в папку SW4STM32\...Configuration перенести STM32F….Flash.ld в …prj.
В среде сделать Refresh
7. Переходим в SW4STM32 Properties for …prj
8. C/C++Build -> Settings -> MCU G++ Linker правим строку LinkerScript на STM32F….Flash.ld
9. C/C++General -> Paths and Symbols -> Includes-> Add.. + 3 галочки+Workspace… ->
Drivers->CMSIS->Device->ST-> STM32F1xx-> Include->OK
10. Add.. + 3 галочки+Workspace… ->
Drivers->CMSIS-> Include->OK
11. Add.. + 3 галочки+Workspace… ->
Drivers-> STM32F1xx _HAL_Driver-> Inc->OK
12. Add.. + 3 галочки+Workspace… ->
Drivers-> STM32F1xx _HAL_Driver-> Inc->Legacy->OK

# Symbols->GNU C -> удаляем все, кроме #DEBUG
# Symbols->GNU C -> Add… + 2 галочки -> ввести STM32F103хВ
# Symbols->GNU C -> Add… + 2 галочки -> ввести USE_HAL_DRIVER
Source Location-> Add Folder-> Drivers->OK

В проекте(IDE) …prj -> Index -> Freshen All Files

13. Редактируем main.c
14. Project-> Build All
15. Debug-> Debug As -> Acб STM32 С/C++ Application -> Пауза >>> Confirm Perspective Switch -> Yes
Go to the top of the page
 
+Quote Post
Мур
сообщение Aug 1 2015, 12:37
Сообщение #27


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Хоть бы кто обратил внимание на PIN_ALL!!! Не все так мрачно...

Смешно вспоминать, но теперь я снова в KEIL.. Он нормально дружит с С++.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 06:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01679 секунд с 7
ELECTRONIX ©2004-2016