Обновление только части строки и сохранение того же - PullRequest
0 голосов
/ 25 октября 2019

У меня есть значение "0x1FF40001", которое я записываю в регистр, подобный этому,

myserial[0].write(0x807, 0x1FF40001);

Но теперь прошивка говорит, что в этом значении есть 4 части, которые я записываю в регистр 807, "1FF4 00 01 "и что второй полубайт (32 бита), который в настоящее время является" F4 "(индекс антенны), может изменяться при вводе пользователем и может иметь значения от 0 до 255 (десятичное число). На данный момент это значение равно 4.

Поэтому я добавляю его в форму выигрыша, чтобы ввести значение для индекса антенны следующим образом:

enter image description here

//In Form1.Designer.cs
this.Antenna_index_box.TextChanged += new System.EventHandler(this.Antenna_index_box_TextChanged);

//In Form1.cs
private void Antenna_index_box_TextChanged(object sender, EventArgs e)
        {
            uint[] ant_index = Antenna_index_box.Text;
            Ant_indx = ant_index;    //Ant_indx is a global variable so that I may pass it
        }

Теперь, как мне изменить только часть этой строки, прежде чем я ее напишу? Пользовательский ввод для Ant_indx теперь находится в глобальной переменной Ant_indx.

myserial[0].write(0x807, Ant_indx);

Я хочу изменить только «F4» в строке 0x1F «F4» 0001 и оставить все остальное таким же.

Если пользователь вводит 4, я должен запрограммировать 807 как 0x1F040001

Если пользователь вводит 25, я должен запрограммировать 807 как 0x1F1D0001

Как изменить только эти биты отдельно?

myserial[0].write(0x807, Ant_indx);   // both arguments have to be uint32

РЕДАКТИРОВАТЬ: Я реализовал это следующим образом:

     UInt32 special_register_value = 0x1FF00001;
     special_register_value |= (Ant_indx << 16);
     serial[0].write(0x807, special_register_value);

1 Ответ

0 голосов
/ 25 октября 2019

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

    int antennaIndex;
    switch (antennaIndex) {

        case 4: ant_index = "1F040001"; break;
        case 25: ant_index = "1F1D0001" break;
    }

    Ant_Index = ant_index;
    myserial.write(0x807, Convert.ToUInt32(Ant_Index, 16));

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

...