Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Клуб профессиональных программистов :: Выпуск #126


Клуб профессиональных программистов «Весельчак У»
Информационная рассылка сайта и форума.  Выпуск 126.  26 ноября 2011 г.

Здравствуйте, уважаемые читатели!

Сегодня предлагаем вам фрагмент пятой части статьи «Hello World! в embedded-исполнении». Данная статья уже полностью написана и со временем будет опубликована на нашем сайте и в нашей рассылке. Если она вас заинтересовала, рекомендуем присоединиться к обсуждению темы для следующей статьи. Цитирую главные условия обсуждения:


Основные требования к задаче:
  • Устройство должно иметь хорошо различимые аудиовизуальные эффекты (световые индикаторы, зуммеры-пищалки и пр.), позволяющие легко убедиться в действительной параллельности нескольких задач бес специального оборудования (JTAG-отладчиков, осциллографов, логических анализаторов и т.д.). Короче говоря, чтобы по итогам можно было снять небольшой видеоролик, на котором видно, что девайс работает.
  • Аппаратура должна иметь разумную сложность. Сейчас у меня на плате прототипа установлен контроллер с 16К флеш-памяти программ, 1К ОЗУ и 512 байтами энергонезависимой памяти. Без проблем могу прицепить к нему несколько светодиодов разного цвета, кнопок, пьезопищалку. В принципе могу еще добавить текстовый ЖК дисплей (2 строки по 16 литер) и клавиатурную матрицу вроде телефонной (0-9, *, #). Переход на более мощный контроллер нежелателен, но в принципе возможен, если задача будет того стоить.
  • Программная реализация функций устройства также должна быть по возможности несложной. Основной фокус будущей статьи направлен не на реализацию сложных функций, а на организацию вычислительного процесса.

Также традиционно предлагаем подборку свежих тем нашего форума.


Пополнение в Книжной полке разработчика систем со встроенными микропроцессорами: Эрик Фримен, Элизабет Фримен. Паттерны проектирования. СПб.: Питер, 2012. ISBN 978-5-459-00435-9.




Приятного чтения!




Оглавление



Генеральная уборка


Как отличить настоящего мастера от неумехи, который лишь старается выглядеть мастером? По инструментам? Нет, среди моих знакомых есть несколько, которые питают страсть к коллекционированию дорогих и действительно хороших инструментов, но ни разу не пустили их в дело, наслаждаясь самим фактом обладания красивой игрушкой. По словам и амбициям? Тем более не вариант. По конечному результату? В принципе верно, но откровенная халтура может быть прекрасно оформлена внешне, и чтобы понять это, потребуется некоторое время.

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


Лирическое отступление

Давным-давно, когда двигатели внутреннего сгорания были еще карбюраторными, мне посчастливилось видеть работу одного карбюраторщика, настоящего артиста своего дела. Меня просто поразила стерильная чистота его рабочего места, хотя карбюратор видавшего виды авто — отнюдь не самая чистая штука. А уж обилию и состоянию его инструментов мог бы позавидовать, пожалуй, иной нейрохирург (равно как и умению с ними обращаться). Стоит ли говорить, что автомобиль преображался после посещения мастера, его невозможно было узнать — он просто радовался дороге, как застоявшийся в стойле конь.

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


Пришла пора и нам навести порядок в нашем проекте перед тем, как перейти к следующему этапу. Мне внушает нешуточные опасения состояние нашего make-файла для модуля Application: он не столь велик, но очень плохо читается и, главное, изобилует повторениями. А повторения — это зло, поскольку они препятствуют модификациям и вынуждают оставлять все как есть в опасении, что после редактирования станет только хуже.


Исходное состояние


Итак, посмотрим, что же мы имеем на данный момент:


Код: ("Makefile")
# Подставьте здесь команду для вызова вашего компилятора C
CC=mingw32-gcc

CPPFLAGS=-I include -I ..\Led\include -I ..\Timer\include

.DEFAULT : obj\PC\Application.o
obj\PC\Application.o : src\Application.c include\Application.h ..\Led\include\Led.h
$(COMPILE.c) -o obj\PC\Application.o src\Application.c

.PHONY : clean
clean :
del /q obj\PC\*.o

.PHONY : test
test : TestApplication_Runner.exe

TestApplication_Runner.exe : obj\PC\TestApplication_Runner.o obj\PC\TestApplication.o \
obj\PC\Application.o ..\Blinker\obj\PC\unity.o ..\Blinker\obj\PC\cmock.o ..\Led\obj\PC\MockLed.o \
..\Timer\obj\PC\MockTimer.o
$(LINK.c) -o TestApplication_Runner.exe obj\PC\TestApplication_Runner.o obj\PC\TestApplication.o \
obj\PC\Application.o ..\Blinker\obj\PC\unity.o ..\Blinker\obj\PC\cmock.o ..\Led\obj\PC\MockLed.o \
..\Timer\obj\PC\MockTimer.o

obj\PC\TestApplication_Runner.o : test\TestApplication_Runner.c
$(COMPILE.c) -o obj\PC\TestApplication_Runner.o -I ..\vendor\unity\src -I ..\vendor\cmock\src \
-I ..\Led\mocks -I ..\Timer\mocks test\TestApplication_Runner.c

obj\PC\TestApplication.o : test\TestApplication.c
$(COMPILE.c) -o obj\PC\TestApplication.o -I ..\vendor\unity\src -I ..\Led\mocks \
-I ..\Timer\mocks test\TestApplication.c

..\Blinker\obj\PC\unity.o : ..\vendor\unity\src\unity.c
$(COMPILE.c) -o ..\Blinker\obj\PC\unity.o -I ..\vendor\unity\src ..\vendor\unity\src\unity.c

..\Blinker\obj\PC\cmock.o : ..\vendor\cmock\src\cmock.c
$(COMPILE.c) -o ..\Blinker\obj\PC\cmock.o -I ..\vendor\cmock\src -I ..\vendor\unity\src \
..\vendor\cmock\src\cmock.c

..\Led\obj\PC\MockLed.o : ..\Led\mocks\MockLed.c
$(COMPILE.c) -o ..\Led\obj\PC\MockLed.o -I ..\vendor\unity\src -I ..\vendor\cmock\src -I \
..\Led\include ..\Led\mocks\MockLed.c

..\Timer\obj\PC\MockTimer.o : ..\Timer\mocks\MockTimer.c
$(COMPILE.c) -o ..\Timer\obj\PC\MockTimer.o -I ..\vendor\unity\src -I ..\vendor\cmock\src \
-I ..\Timer\include ..\Timer\mocks\MockTimer.c

test\TestApplication_Runner.c : test\TestApplication.c
ruby ..\vendor\unity\auto\generate_test_runner.rb test/TestApplication.c

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


Совершенствуем очистку проекта


Итак, приступим:


...



Полностью прочитать статью можно на нашем сайте, в разделе «Инструменты и технологии проектирования ПО».

  • Программирование :: C/C++
  • есть ли какие-нибудь стандартные функции (mfc) поворота изображения на форме?
  • захотелось вот совместить свойства enum с объяснением компилятору информации о типе этих констант

    А это вообще возможно ? Только штатно, без наворотов и дополнительных классов.

    Компилятор прожевал такую конструкцию

    Код:
    typedef WORD td_mytype;

    enum my_enums : td_mytype
    {
    my_enum_0 = 0,
    my_enum_1 = 2,
    my_enum_2 = 3,
    };

    но я не нашёл описания такой фичи/бага , а также пока не вижу, чем мне это поможет ))
  • Передаю в поток указатель на структуру в поток :

    Код:
    struct Structure
    {
       char* pointer;
       int size;
       .....
    }
    .....

    while(event)
    {
       Structure.pointer = &something_pointer;
       Structure.size      = &something_size;
       .......
       HANDLE hThread = (HANDLE)_beginthread(0, 0, ThreadProcedure, &Structure, 0, 0);
    }
    Как потокобезопастно передать структуру в поток,если имеется цикл в котором заполняются структуры и создаются потоки?Ведь в момент пока поток N обратиться к Structure,она может быть уже изменена....
  • Программирование :: C/C++ :: WinAPI & Visual C++
  • Добрый день, Знатоки!
    Пишу на Borland C++ 6, Win XP.
    Работаю с COM RS485 портом.
    Код программы:

    Код: (C)
    Com1Port=CreateFile("COM5",GENERIC_READ|GENERIC_WRITE,
                         0,// устройство связи должно быть открыто для монопольного доступа
                         NULL,// нет атрибутов защиты
                         OPEN_EXISTING, // cустройства связи должен использовать OPEN_EXISTING
                         0, // нет перекрытый с I/O
                         NULL); // для коммуникационных устройств параметр hTemplate должен быть NULL

     if(Com1Port==INVALID_HANDLE_VALUE)  ShowMessage("Порт COM5 занят ");
     
    // Установвить размер буфера:
        SetupComm( Com1Port, 1024, 1024 );

    // Очистить буфер
        PurgeComm( Com1Port, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR );

     // Задать установки таймаута

        ct.ReadIntervalTimeout=2;
        ct.ReadTotalTimeoutMultiplier=1;
        ct.ReadTotalTimeoutConstant=MAXDWORD;
        ct.WriteTotalTimeoutMultiplier=1;
        ct.WriteTotalTimeoutConstant=1000 ; //MAXDWORD;

        fSuccess =  SetCommTimeouts(Com1Port,&ct);   // timeout
        if (!fSuccess) ShowMessage ("( Error SetCommTimeouts)");

     // Получить текущую конфигурацию.
        fSuccess = GetCommState(Com1Port, &dcb);


      dcb.BaudRate = CBR_38400;      // устанавливаем скорость
      dcb.ByteSize  = 8;                     // размер данных xmit, и rcv
      dcb.Parity      = NOPARITY;         // нет бита четности
      dcb.StopBits = ONESTOPBIT;     // один стоп-бит
      dcb.EofChar  = '}';

        // setup hardware flow control
      dcb.fDtrControl = DTR_CONTROL_ENABLE;
      dcb.fRtsControl = RTS_CONTROL_ENABLE;
      dcb.fOutxDsrFlow = 0;
      dcb.fOutxCtsFlow = 0;

    // Установить текущую конфигурацию.
      fSuccess=SetCommState( Com1Port, &dcb );
      if (!fSuccess)  ShowMessage ("(Set_CommState)");

    // Послать запрос в файл
      fSuccess = WriteFile(Com1Port, Buffer, Size, &dw,NULL);
      if (!fSuccess)  ShowMessage (" Error WriteFile ");

      for (i=0; i<100; i++)          // ждем ответ
      {
      ClearCommError(Com1Port, & Errors, & Stat);
      if (Stat.cbInQue > 0 ) break;  // буфер порта
      Sleep(10);  // ждать
      }
      // гарантированно пришел ответ
      dw = 0;
      fSuccess=ReadFile(Com1Port, Buffer, 100 , &dw, NULL);

      if (dw > 0)
     после принятия данных из порта  в Buffer, уходим на обработку данных. И вроде все хорошо...

    Каждые 5 секунд я запускаю таймер, который считывает данные из порта. Все работает.
    Закрываю порт я по завершению работы программы по событию OnClose.

    Но со мной в группе работает еще один парень, который тоже пишет программы для работы с этим же портом COM5.

     После того как отработает программа этого парня, "перестает" работать моя программа, а именно:

    Код:
     ClearCommError(Com1Port, & Errors, & Stat);
      if (Stat.cbInQue > 0 ) break;  // буфер порта

    Stat.cbInQue всегда равен нулю.

    И помогает мне только  перезагрузка компа. Только после полной перезагрузки компа моя программа опять работает нормально.
    Так вот вопрос: какую команду (или набор команд) мне нужно подать в порт, чтобы не перезагружать компьютер всякий раз, когда мне нужно поработать?



  • Всем добрый вечер, у меня есть функция для посылки в устройство некоего кода, которая выглядит так:
    Код: (c++)
    int W_F(LPVOID lpBuffer, DWORD nNumberOfBytesToWrite, int)
     {
     _COMSTAT comstat; //структура текущего состояния порта, в данной программе используется для определения количества принятых в порт байтов
     DWORD btr, temp = CE_RXPARITY, mask, signal;
    ClearCommError(hCom, &temp, &comstat); //нужно заполнить структуру COMSTAT
    btr = comstat.cbInQue;
    btr=btr + nNumberOfBytesToWrite;
    if(btr>87)                        
    PurgeComm(hCom,PURGE_TXCLEAR);

    WriteFile(hCom, lpBuffer, nNumberOfBytesToWrite, &btr, 0);     //записать байты
                counter+=btr;   //увеличиваем счётчик байтов
    return 12;
     }
    хотелось бы у вас узнать как правильно вызвать эту функцию(что использовать в качестве параметра lpBuffer)
    PS: вообще этот параметр должен содержать определенный код, например 20h(в 16-й форме) который заставляет устройство начать работать, а вот в какой форме это записать в буфер я не пойму
    буду признателен за вашу помощь
  • Программирование :: C/C++ :: Borland C/C++
  • 1)настройка boost под С++ Builder
    Скачал Boost 1.32 вроде сделал необходимые шаги по настройке ее и проекта
    т.е.
    а)запустил утилиту make make –fbcb6.mak clean
    б)в настройках include проекта установил ссылку на каталог boost
    D:\Mathem_Libraries\boost_1_32_0
    в) запустил пару тестовых программ
    Код:
    #include <boost/numeric/ublas/matrix.hpp>
    #include <boost/numeric/ublas/io.hpp>
     using namespace boost::numeric::ublas;
     
    int main () {
     
        matrix<double> m (3, 3);
        for (unsigned i = 0; i < m.size1 (); ++ i)
            for (unsigned j = 0; j < m.size2 (); ++ j)
                m (i, j) = 3 * i + j;
        std::cout << m << std::endl;
    }
    Проблема у них одна: компилятор выбрасывает сообщение что не может найти соответствие для
    std::abs, std::sqrt и других функций

    открывая при этом в проекте файл traits,hpp
    насколько понимаю это не имеет отношения к
    using namespace std

    2)Собственно вопрос конечно не столько в boost сколько вообще в какой-нибудь библиотеке линейной алгебры под C++ работающей с матрицами, собств значениями
    насколько понимаю их 3 - это boost, IMSL CML и alglib
    c 1-ми двумя у меня сейчас или в свое время остались проблемы установки, 3-я благополучно работает
    единственные небольшие недостатки alglib - надо бросать несколько h- и cpp-файлов в каждый проект
    и включать их в проект и кроме того нет проги решения собственных частот в виде 2-х матриц (входные параметры)  т.е A=P*B  где A,B -симметричные матрицы

    Собственно знаю таже что boost 1.42 включена в CodeGear (С++ Builder v.9) но также не мог его установить из-за отсутствия серийника
  • Программирование :: Delphi
  • В гриде много колонок. Перешли вправо на некоторое их количество и решили расширить одну из колонок, оттянув мышью границу, как показано на рисунке:
    (http://s017.radikal.ru/i410/1111/9d/944ca96d7720.png)

    Колонка "Время регистрации" - она примерно 4 по счету в гриде. Так вот, когда вы отпустите мышь грид горизонтально прокрутится влево и у вас перед глазами будут первые колонки. Что за феномен?

    Delphi XE
  • Я визуально прикинул, что меня бы устроила метка длиной 200 пикселей, потому код будет такой:

    Код: (delphi)
      lbLong.Top := 200;
      lbLong.Width := 200;
      lbLong.AutoSize := true;
      lbLong.WordWrap := true;
      lbLong.Caption := 'Длинный текст метки 01234567890123456789';

    Как это в результате:

    (http://s017.radikal.ru/i409/1111/a7/f3acc5b9ee3b.jpg)

    Стрелка - это место где примерно те самые 200 пикселей по существу б должны заканчиваться. Что он тогда так рано принялся переносить на следующую строку текст?
  • Код: (delphi)
        IdSMTP1.Host := Host_Server_SMTP;
        IdSMTP1.Port := Port_Server_SMTP;
        IdSMTP1.Username := SenderUserName;
        IdSMTP1.Password := SenderPassword;
        IdMessage1.From.Address := SenderAddress;
        IdMessage1.From.Name := 'Отчет за неделю';
        IdMessage1.Subject := ExtractFileName(FileNameAttach);
        IdMessage1.Body.Text := 'Здравствуйте. ';
        IdMessage1.ContentType := 'text/plain; charset=UTF-16';

        IdMessage1.Recipients.Add;
        IdMessage1.Recipients.Items[0].Text := RecipientAddress;
        TIdAttachmentFile.Create(IdMessage1.MessageParts, FileNameAttach);

    Строчкой
    IdMessage1.ContentType := 'text/plain; charset=UTF-16';
    не отделаться.
    С ней слова
    Отчет за неделю
    превращаются в иероглифы. А цель - чтоб IdMessage1.Body.Text выглядело кириллицей.

    Как сделать, чтоб тело письма по-русски?

    Цитата
    CharSet is a String property that indicates the character set expected in message contents. CharSet can contains one of the official names for character sets as identified in IdCharsetNames.
    Character set information may also be supplied as an argument in the content type for individual items in the MessageParts collection. The value in CharSet will be updated using
    the content type argument value when message properties are read in ProcessHeaders.

    Declaration
    property MessageParts: TIdMessageParts;
    Summary
    List of message parts for the message.
    Description
    MessageParts is a TIdMessagePartsList used to store the TIdMessagePart components that make up the message. MessageParts can contain two TIdMessagePart descendants:
    TIdText and TIdAttachment.
    MessageParts is used when IsEncoded is set to True (on sending), or NoDecode is set to false for receiving.

    Delphi XE
  • Код: (delphi)
    procedure TForm2.FillGridHistory();
    var
      SQLText : String;
    begin
      try
        with DataManagerModule.ADOQueryHistory do
        begin

          SQL.Clear;
          SQLText :=  'SELECT * FROM history';
          SQL.Add(SQLText);
          Active := true;
          //ShowMessage(IntToStr(RecordCount));
        end;
      except
         on e:Exception do
      end;

    end;

    // Другая процедура
    ...............
      res := CheckConnection();
      if (not res) then
      begin
        DisableControls();
        Exit;
      end;

      FillGridHistory();

      DataManagerModule.ADOConnectionManager.Connected := false;

    Если закомментить строку
    DataManagerModule.ADOConnectionManager.Connected := false;

    то в гриде заполнение, все нормально. А если раскомментить, то пустота:
    (http://s017.radikal.ru/i401/1111/d2/6de12bf824d3.png)

    Что сделать чтоб данные попали в грид?
  • ExcelApp := CreateOleObject('Excel.Application'); 

    Какой нужно параметр указать для этого?
  • Программирование :: Ассемблер
  • Добрый вечер.
    Ситуация такова: У меня есть поле для ввода строки (editbox1). Значения, которые я туда ввожу, сохраняются в dBuffer. При нажатии на кнопку, мне нужно вывести в другое поле (editbox3) ту же строку, что я ввёл в первое, посимвольно, с помощью команды loop (это обязартельно, такова суть задания). Процедуру нажатия на кнопку организовал, так что остаётся разобраться с выводом в editbox3.
    Кусок кода:
    val1 dd ?
    len dd ?
    rez db 'вы ввели символы: '

    Код:
    invoke lstrcpy, ADDR Buffer, ADDR rez  ; копируем в Buffer (не в dBuffer) строку 'вы ввели символы: '
        invoke lstrlen, ADDR dBuffer      ; узнаём длину введённой в editbox1 строки     
                mov len,eax      ; сохраняем её                       
                mov ecx,len      ; заносим длину в регистр ecx                       
                mov esi,offset dBuffer    ;загружаем в регистр esi адрес dBuffer'а (буффера, в котором введённая строка)     
        metka:                                     
                mov edx,[esi]     ;заносим в регистр edx первый символ, находящийся в esi (по идее первый символ, который был введён в editbox)                     
                invoke lstrcat, ADDR Buffer, edx   ; прибавляем к строке, содержащейся в буффере, тот символ, который сейчас в edx.   
                inc esi         ; увеличиваем esi на 1 (по-идее переходим к следующему символу)                           
                loop metka   ;на метку, если ecx = 0                         
                                                       
                invoke GetDlgItem,hWin,ID_EDIT3   ; получаем дискриптор другого editbox'a, в который нужно всё это записать
                invoke SetWindowText,eax,ADDR Buffer  ; Записываем в editbox всё, что "накопилось" в Buffer'е
      При запуске программы, ввода строки в editbox1 и нажатии на кнопку вылетает ошибка windows: "программа работает неправильно" и программа закрывается.
    Пожалуйста, подскажите, в чём дело ?
  • Программирование :: Программирование 1С :: 1С 7.x
  • 1С7.7
    В табличной части справочника есть реквизиты Материал и Норма. В самой форме в таблицу добавил поле Стоимость.
    Пытаюсь чтоб при открытии справочника (ПриОткрытии) он пересчитывал сам себя и формировал поле Стоимость (Надо только для просмотра).
    В модуле справочника пробовал ВыбратьСтроки() и ВыбратьЭлементы(). Не работает ни одно ни другое.
    Неужели справочник не может сам себя пересчитать?
    Спасибо всем принявшим участие.
  • Направления программирования :: Drivers
  • Необходимо отключить генерацию прерываний платой. OC WinXP, плата на Xilinx Vertex 6.
    Делаю через Command-регистр. Все стандартно:

    получение интерфейса

    Код: (c)
    status = WdfFdoQueryForInterface(DevExt->Device,
    &GUID_BUS_INTERFACE_STANDARD,
    (PINTERFACE) &DevExt->BusInterface,
    sizeof(BUS_INTERFACE_STANDARD), 1, NULL);

    if (!NT_SUCCESS(status)){
            return status;
        }

    далее

    Код: (c)
    DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) UCHAR buffer[sizeof(PCI_COMMON_CONFIG)];
    PPCI_COMMON_CONFIG pPciConfig = (PPCI_COMMON_CONFIG) buffer;

    bytesRead = DevExt->BusInterface.GetBusData(DevExt->BusInterface.Context,     
    PCI_WHICHSPACE_CONFIG,
    buffer,
    FIELD_OFFSET(PCI_COMMON_CONFIG, VendorID),
    sizeof(PCI_COMMON_CONFIG));

    TraceEvents(TRACE_LEVEL_INFORMATION, DBG_INIT, "Command = 0x%X, Status = 0x%X", pPciConfig->Command, pPciConfig->Status); //DBG1

    pPciConfig->Command = pPciConfig->Command | PCI_DISABLE_LEVEL_INTERRUPT;
           
    bytesWritten = DevExt->BusInterface.SetBusData(DevExt->BusInterface.Context,
    PCI_WHICHSPACE_CONFIG,
    buffer,
    FIELD_OFFSET(PCI_COMMON_CONFIG, VendorID),
    sizeof(PCI_COMMON_CONFIG));

    bytesRead = DevExt->BusInterface.GetBusData(DevExt->BusInterface.Context,     
    PCI_WHICHSPACE_CONFIG,
    buffer,
    FIELD_OFFSET(PCI_COMMON_CONFIG, VendorID),
    sizeof(PCI_COMMON_CONFIG));

    TraceEvents(TRACE_LEVEL_INFORMATION, DBG_INIT, "Command = 0x%X, Status = 0x%X", pPciConfig->Command, pPciConfig->Status); //DBG2

    Проверка результата вызова функций есть, здесь не приведена, запись \ чтение без ошибок.

    В точке DBG1 command-регистр = 0x100, в точке DBG2 command-регистр = 0x500 те бит устанавливается,
    НО если посмотреть состояние этого регистра через сторонние утилиты (я смотрю PciTree),
    то он все время равен 0х107 (похоже на правду вообще говоря, сравниваю с результатами из ChipScop'а). При этом все остальные
    регистры (DevId, VenId, Status) совпадают. Есть идеи, в чем может быть проблема?
  • Практические разделы :: Базы данных
  • Запускал MySQLInstanceConfig:
     
    "%ProgramFiles%\MySQL\MySQL Server 5.5\bin\MySQLInstanceConfig.exe" -i -q "-lC:\mysql_install_log.txt" "-nMySQL Server 5.5" "-p%ProgramFiles%\MySQL\MySQL Server 5.5" -v5.5.17 "-t%ProgramFiles%\MySQL\MySQL Server 5.5\my-template.ini" "-c%ProgramFiles%\MySQL\MySQL Server 5.5\my.ini" RootPassword=123 AddBinToPath=yes ConnectionCount=300 Charset=utf8

    Почему max_connections равен оказался 341 ?

    Цитата
    # The maximum amount of concurrent sessions the MySQL server will
    # allow. One of these connections will be reserved for a user with
    # SUPER privileges to allow the administrator to login even if the
    # connection limit has been reached.
    max_connections=341

    А на другом компе, при той же команде конфирурирования:
    max_connections=170

    Он что рэндомом их назначает ?
  • При переустановке MySQL 5.5 таблица разрешений не очищается?
  • Как сделать, чтобы datadir вел не через "C:/Program Files", а, скажем, в  %AllUsers%\%AppData% ?

    Цитата: my.ini
    #Path to the database root
    datadir="C:/Program Files/MySQL/MySQL Server 5.5/Data/"
  • Практические разделы :: Железо
  • Всем добрый вечер. Подскажите плиз как можно получить серийный номер винчестера Сервера

А теперь прощаемся с Вами до следующего выпуска.


С уважением, команда Клуба.


В избранное