|
Вопрос к знатокам С. |
|
|
|
Oct 20 2008, 16:04
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Возник тут вопрос. Кусочек программы можно написать двумя способами, но с одним и тем же правильным результатом (компилятор avr-gcc 4.1.2). Вопрос: это можно взять на вооружение? И что стандарт может нам сказать по этому поводу? Спасибо. Код //============================================ unsigned char temp;
temp = *uart->pUDR; // Очищаем буфер 3-его уровня. temp = *uart->pUDR; temp = *uart->pUDR;
//============================================ *uart->pUDR; // Очищаем буфер 3-его уровня. *uart->pUDR; *uart->pUDR;
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
 |
Ответов
|
Nov 11 2008, 20:02
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
гм... я и не говорил, что пустой if - это норма... я как раз придерживаюсь противоположного мнения... а вот присваивание временной переменной с моей точки зрения - вполне нормальная практика, логичная и не нарушающая никакие стандартны-нормы-правила. volatile тут совсем ни при чем - этот модификатор никто не отменял и его значение (и назначение) не оспаривается.
на счет "специально заведенных переменных"... на сколько я понимаю, при определенном напряжении сил можно очень сложные выражения (например, нечто типа БПФ) уместить в единственном операторе, избежав "лишних" переменных (обычно они называются локальными)... и, хотя с точки зрения результата это будет совершенно верное "выражение", назвать его удобочитаемым будет можно вряд ли. скорее всего и по объему результирующего кода результат не будет отличаться от "развернутого" варианта...
практика заведения "лишних" переменных лишь для того, чтобы алгоритм вырисовывался четко и ясно с моей точки зрения вполне разумна и оправдана. а компилятор пускай соптимизирует явную избыточность - на то он и компилятор. кстати, весьма оправдан и подход, когда даже небольшие кусочки алгоритма оформляются отдельными функциями - лишь бы наглядность кода была на должном уровне.
можно сколько угодно рассуждать о том, что компилятор "должен сделать", если встретит просто упоминание переменной, но ведь если записать чуть иначе - пропадет сам предмет спора, ибо поведение компилятора станет очевидно на 100%.
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Dec 25 2008, 00:06
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(ARV @ Nov 11 2008, 22:02)  практика заведения "лишних" переменных лишь для того, чтобы алгоритм вырисовывался четко и ясно с моей точки зрения вполне разумна и оправдана. а компилятор пускай соптимизирует явную избыточность - на то он и компилятор. кстати, весьма оправдан и подход, когда даже небольшие кусочки алгоритма оформляются отдельными функциями - лишь бы наглядность кода была на должном уровне. Для того чтобы алгоритм вырисовывался "четко и ясно", на мой взгляд больше подходит другая практика. Во-первых избегать появления дурного кода - т.е. сводить в минимуму потребность в таких вот "var;" и лишних переменных. С какого бодуна драйвер решил вдруг опустошить содержимое буферов? Ведь можно построить драйвер так, что тупое опустошение не понадобится вовсе! Или почему SPSR надо обязательно читать в никуда? Можно же хотя бы в целях статистики хранить последнее значение SPSR: Код ISR() { ... spiContext.LastSpsrVal = SPSR; } производительности-то оно не сожрет. во-вторых - применять практику самодокументируемого кода - завести однозначно понятные макросы: Код #define access( x ) // обращение к X #define ignore( x ) // игнорировать x ... Встретив в коде Код access( SPSR ); Даже те "кто в танке" сразу поймут, что делается с SPSR. А столкнувшись с "финтом" компилятора - достаточно поменять только тело макроса...
|
|
|
|
|
Dec 25 2008, 08:21
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(defunct @ Dec 25 2008, 03:06)  С какого бодуна драйвер решил вдруг опустошить содержимое буферов? Ведь можно построить драйвер так, что тупое опустошение не понадобится вовсе! Научите  у LPC2000 за тем-же SPI есть FIFO которое - не отключается - нет возможности сбросить его Как сделать запись по SPI так, что-бы когда-нибудь при чтении можно было прочтать SPI, а не содержимое забитого при записи FIFO. Цитата Или почему SPSR надо обязательно читать в никуда? Можно же хотя бы в целях статистики хранить последнее значение SPSR: Потому, что там содержится "ничто" которое отлично отправляется в "никуда". Я бы не отказался и от обратной возможности - записи "ничего", а то бывает приходится писать, например, Код VICVectAddr = i; // Dummy write to signal end of interrupt при этом необходимость комментариев это мелочь, а вот умозрительный подбор расходной регистровой переменной не радует. Цитата spiContext.LastSpsrVal = SPSR; производительности-то оно не сожрет. Да? Вместо, например, команды чтения в первый попавшийся расходный регистр будет производится считывание (для load/store через тот-же промежуточный регистр) в структуру находяшуюся в памяти..... Цитата Даже те "кто в танке" сразу поймут, что делается с SPSR. Угу, приходишь в магазин, а там на бутылке с маслом надпись масло(масло); Начинаешь думать, а чего это вдруг так написали - может смысл какой есть? Смотришь header спрашиваешь и тебе объясняют,что это масло для танкистов....  . В общем-то конечно можно макрос написать, но лишняя сущность.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Dec 25 2008, 13:29
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(zltigo @ Dec 25 2008, 10:21)  Научите  у LPC2000 за тем-же SPI есть FIFO которое - не отключается - нет возможности сбросить его Как сделать запись по SPI так, что-бы когда-нибудь при чтении можно было прочтать SPI, а не содержимое забитого при записи FIFO. Думаю, счетчик отправленных байт должен помочь. Драйвер будет вытаскивать из FIFO ровно то количество байт, которое он запихнул при записи. Цитата Я бы не отказался и от обратной возможности - записи "ничего", а то бывает приходится писать, например, Код VICVectAddr = i; // Dummy write to signal end of interrupt при этом необходимость комментариев это мелочь, а вот умозрительный подбор расходной регистровой переменной не радует. Можно дать константу (опять же если производительности хватает). VICVectAddr = 0; или VICVectAddr = CurrentVector; будет чуть-чуть дольше, зато интуитивно понятно, что делается. Цитата Да? Вместо, например, команды чтения в первый попавшийся расходный регистр будет производится считывание (для load/store через тот-же промежуточный регистр) в структуру находяшуюся в памяти..... Да, тут сознательно добавляем запись в память. Медленнее чем в регистр - да, сильно скажется на производительности всей системы - нет! (всего лишь запись одной ячейки на FIFO циклов SPI). Польза от этой записи - когда свалимся в DABT, можно будет снять дамп и посмотреть состояние железа, в т.ч. и значение SPSR (вдруг именно его значение поможет найти причину аборта). Я говорю не отказаться, а свести к минимуму потребность в пустых чтениях, пустых переменных, и прочем дурном коде, и чтобы не быть пустословным показываю как можно этого добиться. А выбор делать так или нет - как всегда за разработчиком. Цитата(zltigo @ Dec 25 2008, 10:21)  Угу, приходишь в магазин, а там на бутылке с маслом надпись масло(масло);  Ну всяко лучше так, чем взять банку с желтым содержимым без надписи и понять что это совсем не масло, когда содержимое уже плеснули на сковородку.  Цитата В общем-то конечно можно макрос написать, но лишняя сущность. Дело привычки. Например как Вы поступите если есть некий шаблон колбека: Код typedef void (*putmsg_cb)(char *, int, int) и куча функций подпадающих под этот шаблон, но не использующих все параметры? Мне удобно поступать так: Код void xx_putmsg( char *msg, int size, int priority) { ignore( priority ); // <-- избавились от warning'a и сразу видно, что параметр priority нафиг не нужен ... }
|
|
|
|
|
Dec 25 2008, 14:06
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(defunct @ Dec 25 2008, 16:29)  Думаю, счетчик отправленных байт должен помочь. Драйвер будет вытаскивать из FIFO ровно то количество байт, которое он запихнул при записи. Вопрос ведь в том, КУДА ОН ИХ БУДЕТ ДЕВАТЬ после ВЫТАСКИВАНИЯ? Выбрасывать? Вы обещали научить меня писать драйвера Цитата .... так, что тупое опустошение не понадобится вовсе! Если под "умным" опустошением предполагается их, при их априори полной бесполезности тем не менее складывать куда-то дабы "когда свалимся в DABT, можно будет снять дамп и посмотреть", то что тогда назвать безумием Цитата будет чуть-чуть дольше, зато интуитивно понятно, что делается. И дольше и уж абсолютно интуитивно не понятна запись совершенно конкретного нуля, когда на самом деле может быть записано абсолютно произвольное значение  . В общем это,конечно, мелочи... Но лучше владеть языком так, дабы не было и мелких огрехов, а не уповать на то, что "твоя моя и так понимай если твоя моя понимай однако нада будет". Цитата(defunct @ Dec 25 2008, 16:29)  Дело привычки. Например как Вы поступите если есть некий шаблон колбека: Код typedef void (*putmsg_cb)(char *, int, int) и куча функций подпадающих под этот шаблон, но не использующих все параметры? Мне удобно поступать так: Код void xx_putmsg( char *msg, int size, int priority) { ignore( priority ); // <-- избавились от warning'a и сразу видно, что параметр priority нафиг не Будете смеяться, но мне - удобно АБСОЛЮТНО аналогично  . Код #define argsused(foo) (void)(foo) argsused( priority ); Только это совсем разные случаи, ибо в описываемый ранее SPSR; Абсолютно самодостаточен и не совершенно не нуждается, в отличии от priority, ни в каких мусорных обертках ignore( SPSR ); Если хотите сделать понятным для "танкистов", то напишите комментарий - "танкист" чуть-чуть выглянет из люка и узнает немного нового
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Dec 25 2008, 15:32
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(zltigo @ Dec 25 2008, 16:06)  Вопрос ведь в том, КУДА ОН ИХ БУДЕТ ДЕВАТЬ после ВЫТАСКИВАНИЯ? Выбрасывать? Складывать в кольцевой буфер, и "семафорить - данные есть". Если эти данные хоть кому-то нужны, обрабатывающий процесс их заберет, если не нужны драйвер перетрет их нафиг по кольцу. Но взятки - гладки, свою работу - принять, нативно опустошить, просигналить - драйвер сделал. Цитата Вы обещали научить меня писать драйвера Это перебор. Я такого не обещал, к тому же Вы и так умеете их писать. А порассуждать как можно написать драйвер, чтобы избежать пустых чтений - это пожалуйста.  Цитата Если под "умным" опустошением предполагается их, при их априори полной бесполезности тем не менее складывать куда-то дабы "когда свалимся в DABT, можно будет снять дамп и посмотреть", то что тогда назвать безумием  Под "умным" опустошением понимаем - монотонную работу драйвера. Не ему решать что полезно, а что бесполезно. Принимать без разбора драйвер должен абсолютно все, что физически приходит, и отдавать upper layer'у на рассмотрение. Цитата Но лучше владеть языком так, дабы не было и мелких огрехов, а не уповать на то, что "твоя моя и так понимай если твоя моя понимай однако нада будет". Бесспорно. Но, даже при хорошем владении языком, лучше уходить от неоднозначностей там где можно, а там где нет неоднозначностей - подчеркивать логику работы кода: if (a || b && c) или if (a || (b && c) ) вроде одно и то же, но второе ведь наглядней. Цитата Будете смеяться, но мне - удобно АБСОЛЮТНО аналогично  . Смеяться не буду, - хорошо, что мы на одной волне в этом вопросе  Цитата Только это совсем разные случаи, ибо в описываемый ранее SPSR; Абсолютно самодостаточен и не совершенно не нуждается, в отличии от priority Я бы не был так категоричен. Потому что SPSR - это не переменная, а макрос. Что там за ним спрятано - хз. Скажете, а UM на что, а если его нет под рукой у читателя кода? Цитата ни в каких мусорных обертках ignore( SPSR ); Если хотите сделать понятным для "танкистов", то напишите комментарий - "танкист" чуть-чуть выглянет из люка и узнает немного нового  шутку понял Но все же argused() ignore() accessed() и т.п. делают код прозрачнее, и гибче при переносе.
|
|
|
|
|
Dec 25 2008, 16:09
|

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

|
Цитата(defunct @ Dec 25 2008, 17:32)  if (a || b && c) или if (a || (b && c) ) вроде одно и то же, но второе ведь наглядней. Это далеко не одно и то же. Логические операции И и ИЛИ всегда выполняются слева направо. Даже компилятор не имеет права изменить этот порядок. Эквивалентным будет if (( a || b ) && c) и со скобками действительно нагляднее.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Dec 25 2008, 16:24
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Сергей Борщ @ Dec 25 2008, 18:09)  Это далеко не одно и то же. Логические операции И и ИЛИ всегда выполняются слева направо. Даже компилятор не имеет права изменить этот порядок. Эквивалентным будет if (( a || b ) && c) и со скобками действительно нагляднее. А приоритеты операций? Все-таки if (a || b && c) или if (a || (b && c) ) это одно и то же. Если есть время, просимулируйте вот этот тестик: Код void test(void) { int a = 1; int b = 0; int c = 0;
if (a || b && c ) printf("1 || (0 && 0)"); else printf("(1 || 0) && 0"); } У меня результат этого теста - "1 || (0 && 0)". (RVDS 2.2 и 3.1).
|
|
|
|
Сообщений в этой теме
demiurg_spb Вопрос к знатокам С. Oct 20 2008, 16:04 zltigo Цитата(demiurg_spb @ Oct 20 2008, 18:04) ... Oct 20 2008, 16:17 sergeeff Цитата(zltigo @ Oct 20 2008, 20:17) Поско... Oct 21 2008, 15:08 sonycman Цитата(zltigo @ Oct 20 2008, 20:17) Поско... Jan 4 2009, 11:12  zltigo Цитата(sonycman @ Jan 4 2009, 14:12) Как ... Jan 4 2009, 14:31   sonycman Цитата(zltigo @ Jan 4 2009, 18:31) Что-то... Jan 4 2009, 15:42    zltigo Цитата(sonycman @ Jan 4 2009, 18:42) чтоб... Jan 4 2009, 16:05    GetSmart Цитата(sonycman @ Jan 4 2009, 21:42) Попр... Jan 4 2009, 16:22     zltigo Цитата(GetSmart @ Jan 4 2009, 19:22) но т... Jan 4 2009, 16:27      GetSmart Цитата(zltigo @ Jan 4 2009, 22:27) С чего... Jan 4 2009, 17:05       zltigo Цитата(GetSmart @ Jan 4 2009, 20:05) то в... Jan 4 2009, 17:49       Сергей Борщ Цитата(GetSmart @ Jan 4 2009, 19:05) Если... Jan 4 2009, 19:00        sonycman Цитата(Сергей Борщ @ Jan 4 2009, 23:00) Т... Jan 4 2009, 20:18 scifi Спасибо за подсказку.
Я, по незнанию, наверное, вс... Oct 20 2008, 17:27 demiurg_spb Цитата(scifi @ Oct 20 2008, 21:27) Спасиб... Oct 20 2008, 18:05 zltigo Цитата(scifi @ Oct 20 2008, 19:27) ...но ... Oct 20 2008, 18:17  scifi Цитата(zltigo @ Oct 20 2008, 22:17) 1.Упо... Oct 20 2008, 18:35   zltigo Цитата(scifi @ Oct 20 2008, 20:35) Контрп... Oct 20 2008, 19:11    scifi Цитата(zltigo @ Oct 20 2008, 22:17) 1.Упо... Oct 20 2008, 19:34     demiurg_spb Цитата(scifi @ Oct 20 2008, 23:34) Я запу... Oct 20 2008, 19:53 zltigo Цитата(demiurg_spb @ Oct 20 2008, 21:53) ... Oct 21 2008, 15:57 sergeeff Без финтов - это отлично, но!!! - очен... Oct 21 2008, 17:01 aaarrr Цитата(sergeeff @ Oct 21 2008, 21:01) Кол... Oct 21 2008, 17:06 Сергей Борщ Цитата(sergeeff @ Oct 21 2008, 20:01) Чте... Oct 21 2008, 20:38  zltigo Цитата(Сергей Борщ @ Oct 21 2008, 22:38) ... Oct 21 2008, 20:42   Сергей Борщ Цитата(zltigo @ Oct 21 2008, 23:42) Любой... Oct 21 2008, 20:46  zltigo Цитата(Сергей Борщ @ Oct 21 2008, 22:38) ... Oct 21 2008, 20:51   Сергей Борщ Цитата(zltigo @ Oct 21 2008, 23:51) Не ст... Oct 21 2008, 20:59    zltigo Цитата(Сергей Борщ @ Oct 21 2008, 22:59) ... Oct 21 2008, 21:19     demiurg_spb Попробовал на древнем:
Цитата# IAR Atmel AVR C/EC+... Oct 21 2008, 21:34     Сергей Борщ Цитата(zltigo @ Oct 22 2008, 00:19) Это т... Oct 21 2008, 21:38      zltigo Цитата(Сергей Борщ @ Oct 21 2008, 23:38) ... Oct 21 2008, 21:53       Сергей Борщ Цитата(zltigo @ Oct 22 2008, 00:50) Тем н... Oct 21 2008, 21:55        zltigo Цитата(Сергей Борщ @ Oct 21 2008, 23:55) ... Oct 21 2008, 22:02   Непомнящий Евгений Цитата(zltigo @ Oct 22 2008, 00:51) Одноз... Oct 22 2008, 04:41    IgorKossak Цитата(Непомнящий Евгений @ Oct 22 2008, 07... Oct 22 2008, 05:53    zltigo Цитата(Непомнящий Евгений @ Oct 22 2008, 06... Oct 22 2008, 06:40  ReAl Цитата(Сергей Борщ @ Oct 21 2008, 22:38) ... Nov 10 2008, 11:49   IgorKossak Цитата(ReAl @ Nov 10 2008, 13:49) Однако ... Nov 11 2008, 10:09    ReAl Цитата(IgorKossak @ Nov 11 2008, 12:09) Т... Nov 11 2008, 13:17   VladimirYU Код volatile int x;
x ? : x;
IAR AVR 4.12 ... Nov 11 2008, 10:56    aaarrr Цитата(VladimirYU @ Nov 11 2008, 13:56) К... Nov 11 2008, 11:13     VladimirYU Цитата(aaarrr @ Nov 11 2008, 15:13) Можно... Nov 11 2008, 11:42      aaarrr Цитата(VladimirYU @ Nov 11 2008, 14:42) В... Nov 11 2008, 11:43       VladimirYU Цитата(aaarrr @ Nov 11 2008, 15:43) Значи... Nov 11 2008, 11:57        aaarrr Цитата(VladimirYU @ Nov 11 2008, 14:57) к... Nov 11 2008, 12:02         VladimirYU Цитата(aaarrr @ Nov 11 2008, 16:02) Листи... Nov 11 2008, 12:17        aaarrr Цитата(VladimirYU @ Nov 11 2008, 14:57) S... Nov 11 2008, 13:31         VladimirYU Цитата(aaarrr @ Nov 11 2008, 16:31) Они т... Nov 11 2008, 13:43          aaarrr Цитата(VladimirYU @ Nov 11 2008, 16:43) Р... Nov 11 2008, 13:51         ReAl Цитата(aaarrr @ Nov 11 2008, 15:31) Они т... Nov 11 2008, 13:46          VladimirYU Цитата(ReAl @ Nov 11 2008, 16:46) Может г... Nov 11 2008, 13:59           Сергей Борщ Цитата(VladimirYU @ Nov 11 2008, 16:59) Т... Nov 11 2008, 14:05            aaarrr Цитата(Сергей Борщ @ Nov 11 2008, 17:05) ... Nov 11 2008, 14:10            VladimirYU Цитата(Сергей Борщ @ Nov 11 2008, 17:05) ... Nov 11 2008, 14:24         VladimirYU Цитата(aaarrr @ Nov 11 2008, 16:31) Они т... Nov 11 2008, 13:46      ReAl Цитата(VladimirYU @ Nov 11 2008, 13:42) В... Nov 11 2008, 13:42    Непомнящий Евгений Цитата(VladimirYU @ Nov 11 2008, 14:56) К... Nov 11 2008, 11:23     zltigo Цитата(Непомнящий Евгений @ Nov 11 2008, 14... Nov 11 2008, 12:19      aaarrr Цитата(zltigo @ Nov 11 2008, 15:19) Это в... Nov 11 2008, 12:22       zltigo Цитата(aaarrr @ Nov 11 2008, 15:22) Тогда... Nov 11 2008, 12:27      VladimirYU Цитата(zltigo @ Nov 11 2008, 16:19) Это в... Nov 11 2008, 12:26 scifi Итак, итоги:
1) Согласно стандарту языка для чтени... Oct 21 2008, 17:42 zltigo Цитата(scifi @ Oct 21 2008, 19:42) Другим... Oct 21 2008, 17:52 ARV а, простите, разве писать читаемый всеми код - это... Nov 11 2008, 11:13 aaarrr Цитата(ARV @ Nov 11 2008, 14:13) Кодuchar... Nov 11 2008, 11:15  ARV Цитата(aaarrr @ Nov 11 2008, 14:15) Ворни... Nov 11 2008, 17:32   aaarrr Цитата(ARV @ Nov 11 2008, 20:18) возможно... Nov 11 2008, 17:39   ReAl Цитата(ARV @ Nov 11 2008, 19:32) возможно... Nov 11 2008, 18:53 aaarrr RVCT на пропуск операнда ругается. Nov 11 2008, 12:33   HARMHARM Цитата(zltigo @ Dec 25 2008, 10:21) Я бы ... Dec 25 2008, 11:19    zltigo Цитата(HARMHARM @ Dec 25 2008, 14:19) Код... Dec 25 2008, 11:42        Сергей Борщ Цитата(defunct @ Dec 25 2008, 18:24) А пр... Dec 25 2008, 17:09         defunct Цитата(Сергей Борщ @ Dec 25 2008, 19:09) ... Dec 25 2008, 17:21          ARV Цитата(defunct @ Dec 25 2008, 20:21) Да в... Dec 27 2008, 13:45 ReAl Если Вам приятно в таком духе - продолжайте, утрир... Nov 11 2008, 22:04 gormih Обсуждение напоминает обсуждение кода типа
Кодuns... Nov 14 2008, 11:31 ARV хочу для универсализма сделать версию функции prin... Nov 17 2008, 15:59 Сергей Борщ Кодvoid printf_7led(char *format, ... ){
... Nov 17 2008, 16:24 ARV большое спасибо! я вокруг чего-то похожего бро... Nov 17 2008, 17:25 ReAl Цитата(ARV @ Nov 17 2008, 19:25) мне каже... Dec 11 2008, 08:56  ARV Цитата(ReAl @ Dec 11 2008, 11:56) Ну избы... Dec 12 2008, 07:09   zltigo Цитата(ARV @ Dec 12 2008, 10:09) ...сдела... Dec 12 2008, 07:15    ARV Цитата(zltigo @ Dec 12 2008, 10:15) http:... Dec 13 2008, 11:46 sonycman В оригинальной библиотеке для STM32 квалификатор v... Jan 4 2009, 18:30 zltigo Цитата(sonycman @ Jan 4 2009, 21:30) Но, ... Jan 4 2009, 18:34 sergeeff Я пробовал такое в MS VS2008 для ARM. Данные читаю... Jan 4 2009, 20:36
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|