Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/250: Рейтинг темы: голосов - 250, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 02.03.2013
Сообщений: 163

Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING

29.05.2015, 00:50. Показов 47432. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Начал самостоятельное изучение кейла и MSC51. Но вот разжеванной инфы по A51 очень мало.

Такая проблема, написал файл инициализации init.a51
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//Defyme
 
#define      DATA_LEN   80h
#define    STACK_START   07h
 
//End define
 
ORG 0000h
 
LJMP    RESIT                  // Jump to risit funtion
 
ORG 002Bh                        // First ROM address beyond interrupt vectors
 
RESIT:                           // Cleaning ROM in loop (from end to stort), initiotyze (SP)stack pointer, jump to main loop.
MOV    R0,#(DATA_LEN-1)            // Move tost ROM addres to (IP0)indirect pointer 0
CLR    A                        // Zero to ACC
ROM_CLEANING_LOOP:                  // Cleaning ROM in loop (from end to stort)
MOV      @R0,A                     // Cleaning ROM cell from IP0 address
DJNZ   R0,ROM_CLEANING_LOOP         // Decrement IP0, if NOT zero jump to mark.
MOV      SP,#STACK_START               // SP initiotyzotion
//LJMP   Main                     // Jump to main loop
END
Хочу запихнуть его инклудом в main.a51, там кроме инклуда нет вообще ничего.

Получаю *** WORMYNG L5: CODE SPACE MEMORY OVERLAP 00h to 33h

Если скопировать код в хедер и вставить его, то ворнинга не будет.

Научите пожалуйста директивам A51, что бы можно нормально вставлять и выставлять код из файла в файл.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.05.2015, 00:50
Ответы с готовыми решениями:

Assembler A51
Есть два задания, я в Assemblere не очень силен. 1.Задание: Программа размещения в памяти программного массива из 20 не нулевых байтовых...

Assembler A51
Помогите пожайлуста, размещение в памяти программного массива из 20 не нулевых байтовых констант

Samsung galaxy A51
Когда днем фотографирую,то все нормально,ночью появляются такие вот пиксели,это только у меня такая проблема или у всех самсунгов?(добавьте...

22
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
29.05.2015, 10:08
a51 - двухпроходный оптимизирующий ассемблер для написания сегментированных программ. Если вы хотите разбить программу на логические блоки, каждый блок должен быть оформлен своим сегментом. Первый програмный сегмент будет тот, в котором строка CSEG AT 0, остальные препроцессор разместит сам. Поэтому оператор ORG должен использоваться только для таблицы прерываний. Инклюды в а51 практически не используются, только для таблиц и макросов, код должен быть в своем сегменте (сегментах). Эти файлы просто подключаются в проект. О написании программ под а51 я уже писал в этой ветке.
Для вас примерно так:
InitSection
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
NAME InitSection
 
$TITLE ("Assembtid for AT89C51 controller in Keil uVision 5")
 
//Defyme
 
START_ADR   EQU   0x0000            ; Boot/Simulator debug
DATA_LEN   EQU 0x80
STACK_START   EQU 0x07
 
//End define
 
STACK   SEGMENT   IDATA
RSEG   STACK
DS      STACK_START                 ;
 
INIT   SEGMENT   CODE
CSEG   AT   START_ADR         ;
 
AJMP   Start               ; Jump to risit funtion
 
;;  Iterrupt table  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CSEG    AT   START_ADR+0x03      ; IE0_VECTOR
RETI                     ;
CSEG    AT   START_ADR+0x0B      ; TF0_VECTOR
AJMP      Timer0_Homdler       ;
CSEG    AT   START_ADR+0x13      ; IE1_VECTOR
RETI                     ;
CSEG    AT   START_ADR+0x1B      ; TF1_VECTOR
AJMP      Timer1_Homdler       ;
CSEG    AT   START_ADR+0x23      ; SIO_VECTOR
AJMP      UART_Homdler        ;
 
Timer0_Homdler:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RETI                     ;
 
Timer1_Homdler:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RETI                     ;
 
UART_Homdler:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RETI                     ;
 
RSEG   INIT               ;
USING   0                    ;
 
Start:
;---------------------------------------------------------------------
MOV      SP, #STACK-1           ;
;---------------------------------------------------------------------
MOV    R0,#(DATA_LEN-1)         ; Move tost ROM addres to (IP0)indirect pointer 0
CLR    A                        ; Zero to ACC
ROM_CLEANING_LOOP:              ; Cleaning ROM in loop (from end to stort)
MOV      @R0,A                  ; Cleaning ROM cell from IP0 address
DJNZ   R0,ROM_CLEANING_LOOP     ; Decrement IP0, if NOT zero jump to mark.
 
END
Главный цикл в другом файле:
MainSection
Code
1
2
3
4
5
6
7
8
NAME MainSection
 
MAIN    SEGMENT   CODE
RSEG MAIN               ;
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
END
Но так никто не делает, где уверенность что компилятор не вклинит между InitSection и MainSection например ТаблеSection?
Поэтому и инициализация и главный цикл должны располагаться в одном файле. Другое дело, что главный цикл может состоять только из вызовов подпрограмм, а вот они уже могут располагаться в других файлах (секциях).
Имена секциям даются для быстрого поиска ошибок, компилятор выведет его в строке ошибки.
Среда Keil уже содержит кучу примеров, в том числе и разной инициализации - Init.a51, Init_mx.a51, Init_tny.a51, файлы StartXXX.a51 в папке С51\Lib.
Чтение и разбор исходников - лучший учебник, да и хелп (англоязычный) в Keil отличный.
0
0 / 0 / 0
Регистрация: 02.03.2013
Сообщений: 163
29.05.2015, 15:18
Здравствуйте. Спасибо за ответ.

Но не могу понять:
STACK SEGMENT IDATA
RSEG STACK
DS STACK_START
Объявляется сегмент в ОЗУ, и там выделяется место под переменную размером с адрес начала стека?
MOV SP, #STACK-1 ; тут от сегмента в ОЗУ уже что то отнимают, да еще как от куска кода!
Даже если предположить, что так хитро инициализируется стек, почему -1?

RSEG INIT ;
USING 0 ;
Что вот это такое? Переключение банка, но оно до метки Start, PC туда не попадет никогда.
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
29.05.2015, 15:58
ОЗУ у i51 не является непрерывной областью одинаковой памяти. Оно разбито на сегменты, непосредственно адресуемый DATA, косвенно адресуемый IDATA, внешняя ROM XDATA, хотя часть ее часто находится на чипе и т.д.
Стек всегда размещается в сегменте IDATA, от основной памяти он ничего не отнимает. То что вы назвали STACK_START - это на самом деле его зарезервированный размер. #STACK-1 - потому, что стек у i51 расширяется вверх, при обращении сначала происходит инкремент (переход на следующий адрес), затем запись.
RSEG INIT - это регистрация (место с которого начинается) сегмента данных INIT.
USING 0 - предупреждение компилятору, что пока программа использует только банк 0. Банки 1..3 он может использовать как обычное ОЗУ. На первом проходе компилятор подсчитывает все USING и соответственно распределяет память.

<Изображение удалено>
0
0 / 0 / 0
Регистрация: 02.03.2013
Сообщений: 163
29.05.2015, 16:42
Цитата Сообщение от omokost
ОЗУ у i51 не является непрерывной областью одинаковой памяти. Оно разбито на сегменты, непосредственно адресуемый DATA, косвенно адресуемый IDATA, внешняя ROM XDATA, хотя часть ее часто находится на чипе и т.д.
Стек всегда размещается в сегменте IDATA, от основной памяти он ничего не отнимает. То что вы назвали STACK_START - это на самом деле его зарезервированный размер.
По USING прошу извинить, моя вина не дочитал.

А вот про ОЗУ я совсем запутался. Но ведь DATA(РОН+20-7F) по сути является частью IDATA(РОН+20-7F+РСН)

В РСН находится только SP(указатель стека)
Сам стек должен писаться куда нибудь в память с возможностью прямой адресацией 00-7F

Или я что то не понимаю...
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
29.05.2015, 17:10
Все вы правильно понимаете. Непосредственно адресуемой ROM у предка i51 было всего 128 байт. Тогда там размещался и стек в том числе. Но уже у i52 стало 256 байт ROM. И как их теперь адресовать семью битами? Поэтому вторую страницу в 128 байт с косвенной адресацией обозвали IDATA, и стек теперь всегда там. Но и теперь выпускаются контроллеры с 128 байт ROM. Например AT89C2051. Поэтому указывая IDE конкретный тип контроллера, вы не только подключаете описания регистров, вы и грубо указываете как интерпретировать адреса памяти. Более точно можно задать в настройках проекта.
Прямая адресация для работы со стеком стандартными средствами не предусмотрена архитектурой, только косвенно через SP.
0
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 106
29.05.2015, 17:28
Регистр-указатель стека SP в 805Х -- восьмибитный. Он может адресовать любую область внутренней памяти данных. В отличие от микропроцессора КР580ВМ80, у микро-ЭВМ семейства 805Х стек "растет вверх", т.е. перед выполнением команды PUSH или CALL содержимое SP инкрементируется, после чего производится запись информации в стек. Соответственно при извлечении информации из стека регистр SP декрементируется после извлечения информации. В процессе инициализации микро-ЭВМ после сигнала сброса или при включении питающего напряжения в SP заносится код 07h (8-1)!!!. Это означает, что первый элемент стека будет располагаться в ячейке памяти с адресом 08h... Учите матчасть, а то бьют так больно...
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
29.05.2015, 18:04
Цитата Сообщение от iukimi_i_m
...Это означает, что первый элемент стека будет располагаться в ячейке памяти с адресом 08h...
Поправка, после строк
STACK SEGMENT IDATA
RSEG STACK
DS 0х07
стек будет в ячейке 0х80 и зарезервирован на 8 байт... Конечно если физически эта память доступна для контроллера (описано в подключаемом файле). Кстати, для Keil это не *.ini, а *. xml, и подключается автоматом при выборе опций проекта.
0
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 106
29.05.2015, 18:11
Это был ответ на "почему -1?".

Я давал информацию не о конкретной величине указателя стека, а о методике назначения исходного значения указателя стека...
При данном вами раскладе памяти исходно в указатель стека должна быть занесена величина 80h-1...
0
0 / 0 / 0
Регистрация: 02.03.2013
Сообщений: 163
29.05.2015, 18:13
Цитата Сообщение от iukimi_i_m
перед выполнением команды PUSH или CALL содержимое SP инкрементируется, после чего производится запись информации в стек.
Спасибо. Минус еще вопрос, почему то думал, что там постинкремент.
0
0 / 0 / 0
Регистрация: 02.03.2013
Сообщений: 163
29.05.2015, 18:37
Цитата Сообщение от omokost
Все вы правильно понимаете. Непосредственно адресуемой ROM у предка i51 было всего 128 байт. Тогда там размещался и стек в том числе. Но уже у i52 стало 256 байт ROM. И как их теперь адресовать семью битами? Поэтому вторую страницу в 128 байт с косвенной адресацией обозвали IDATA, и стек теперь всегда там. Но и теперь выпускаются контроллеры с 128 байт ROM. Например AT89C2051. Поэтому указывая IDE конкретный тип контроллера, вы не только подключаете описания регистров, вы и грубо указываете как интерпретировать адреса памяти. Более точно можно задать в настройках проекта.
Прямая адресация для работы со стеком стандартными средствами не предусмотрена архитектурой, только косвенно через SP.
Такс, а я как раз решил для начала взять этот самый C2051 и во всем отталкиваюсь от него.

Те как я понял в контроллерах 8052, 2 параллельных ОЗУ?

1я Стандартная от 8051 128 байт с прямой и косвенной адресацией + 128 РСН.
2я IDATA 128 байт с исключительно косвенной адресацией через SP

IDATA не конфликтует с SFR потому, что физически не начинается с адреса 80h? Или? Все в голове каша.

Все ушел читать даташиты на 8052 =\
0
0 / 0 / 0
Регистрация: 02.03.2013
Сообщений: 163
29.05.2015, 21:33
Такс вычитал http://what-when-how.com/8051-microsont ... m-in-8052/

Значит как я и понял, на 8052 имеем 3 физически разные куска ОЗУ:

1. DATA (РОН + адреса 20-7F) адресуется и прямо и косвенно.
2. SFR (80-FF) обращение к ним происходит только при прямой адресации
3. IDATA (адрес такой же 80-FF) но обращение к ним может происходить только через косвенную адресацию, а именно через R0\R1 и SP

Хорошо, многое стало яснее.

Но зачем нужен и что делает этот код, я стал понимать еще меньше =)
STACK SEGMENT IDATA
RSEG STACK
DS 0х07

Получается мы резервируем сегмент в ОЗУ с меткой STACK и выделяем 7 байт(почему не 8?) с 80h по 86h абсолютному адресу ОЗУ или с 00h по 06h относительно памяти IDATA.
Но зачем это делать?

SP мы инициализируем после строкой MOV SP, #STACK-1

Вот тут я вообще теряюсь. # — мы загружаем в SP значение сегмента STACK. Но блин, значение сегмента STACK должно быть 00 ибо мы только зарезервировали память, но не фига туда не закидывали, так же значение сегмента STACK имеет размер в 7 байт, целиком его попросту нельзя использовать в инструкции MOV.

ПС в своих размышлениях опираюсь на это:

?label:? DS expression
The DS statement reserves the specified number of bytes in the current memory sposi. label is a symbol that is assykned the current memory address. expression is the number of bytes to reserve.
0
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 106
29.05.2015, 22:01
STACK SEGMENT IDATA -- абсолютный (неперемещаемый)сегмент внутри области памяти IDATA
RSEG STACK -- перемещаемый сегмент принадлежащий сегменту STACK
DS 0х07 -- семь байт расположенные внутри перемещаемого сегмента
Поскольку больше нет перемещаемых сегментов внутри сегмента STACK, перемещаемый сегмент размещается по смещению ноль(0) относительно начала сегмента STACK. Поэтому заносится в SP величина начала сегмента STACK минус один чтобы не пропадал байт, находящийся в начале стека и полностью использовать все байты стека...
0
0 / 0 / 0
Регистрация: 02.03.2013
Сообщений: 163
29.05.2015, 22:45
Цитата Сообщение от iukimi_i_m
STACK SEGMENT IDATA -- абсолютный (неперемещаемый)сегмент внутри области памяти IDATA
RSEG STACK -- перемещаемый сегмент принадлежащий сегменту STACK
DS 0х07 -- семь байт расположенные внутри перемещаемого сегмента
Поскольку больше нет перемещаемых сегментов внутри сегмента STACK, перемещаемый сегмент размещается по смещению ноль(0) относительно начала сегмента STACK. Поэтому заносится в SP величина начала сегмента STACK минус один чтобы не пропадал байт, находящийся в начале стека и полностью использовать все байты стека...
Т.е. я правильно понимаю, что перед стеком, идет 7 байт пустого сегмента RSEG STACK и потом уже начинается стек?

Спасибо. Как работает понял. Но все еще не понял зачем?

Почему просто не забить в SP начало (00h)IDATA или просто константу с нужным отступом?
И почему стек начнется с 7 байта адреса, а не с 8го, что логично? (00h+(07h-1d))=06h и при преинкременте байт будет записан в 07h, не кратный 8.

Не злитесь, я действительно не могу понять этого.
0
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 106
29.05.2015, 23:42
Над тобой довлеет парадигма того, что указатель стека должен начинаться с наибольшего адреса выделенной под стек памяти... Здесь же, все устроено наоборот: начальный указатель стека размещается по наименьшему адресу выделенной под стек памяти. Конкретно в этом случае RSEG и STACK начинаются с адреса 80h и имеют длину 7 байт. Указатель стека устанавливается на начало вышеозначенных сегментов минус единица т.е. на 7fh ...
0
0 / 0 / 0
Регистрация: 02.03.2013
Сообщений: 163
29.05.2015, 23:50
Цитата Сообщение от iukimi_i_m
Над тобой довлеет парадигма того, что указатель стека должен начинаться с наибольшего адреса выделенной под стек памяти... Здесь же, все устроено наоборот: начальный указатель стека размещается по наименьшему адресу выделенной под стек памяти. Конкретно в этом случае RSEG и STACK начинаются с адреса 80h и имеют длину 7 байт. Указатель стека устанавливается на начало вышеозначенных сегментов минус единица т.е. на 7fh ...
Не совсем так, я понял откуда и куда здесь растет стек.
Я не совсем понимаю, зачем под него делать сегмент. Если мы наверняка не знаем, будет он занимать 7 байт или 70. Вернее ограничить мы его не можем, зачем 7 байт тогда? Почему просто адрес начала не занести?

Еще одна тайна стала явью, MOV SP, #STACK-1 , #STACK подставляет не размер, а адрес начала.

Осталось понять нафига 7 байт выделяется.
0
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 106
30.05.2015, 00:33
Ну здесь заложена такая идея: эта величина заложена под потребности данного модуля. Примерно вызов 1-2х уровней подпрограмм и заброс на стек и снятие пары байт на стек и со стека. Но программы пишутся многомодульные и в каждом модуле может находиться такая запись об использовании стека данным модулем:

RSEG STACK
DS ххх
Где ххх -- количество байтов стека используемых данным модулем.
После линковки программы длины всех таких сегментов суммируются и без особенного напряжения создается глубина стека реально используемого всей программой.
НЕ ВОЗБРАНЯЕТСЯ написать одномодульную программу, абсолютную, без каких либо сегментов и ручками все повыставлять под личную ответсвенность программиста...
0
0 / 0 / 0
Регистрация: 02.03.2013
Сообщений: 163
30.05.2015, 04:25
Цитата Сообщение от iukimi_i_m
Ну здесь заложена такая идея: эта величина заложена под потребности данного модуля. Примерно вызов 1-2х уровней подпрограмм и заброс на стек и снятие пары байт на стек и со стека. Но программы пишутся многомодульные и в каждом модуле может находиться такая запись об использовании стека данным модулем:

RSEG STACK
DS ххх
Где ххх -- количество байтов стека используемых данным модулем.
После линковки программы длины всех таких сегментов суммируются и без особенного напряжения создается глубина стека реально используемого всей программой.
НЕ ВОЗБРАНЯЕТСЯ написать одномодульную программу, абсолютную, без каких либо сегментов и ручками все повыставлять под личную ответсвенность программиста...
Такс, вроде бы понял.

Те по факту это такая рекомендация, что бы при окончательной сборки можно было проверить, хватит ли стека в пике на все? Но само по себе оно ничего не делает, SP просто закидывается на стартовый адрес и в случае необходимости будет расти до 7Fh?

Из всей этой темы, в итоге я понял, что, чтобы заинклудить какой либо отдельный модуль, мне этот самый модуль сначала необходимо привести к ввиду:

NAME имя_модуля - обозвать модуль

Стек_модуля SEGMENT IDATA - объявить права модуля на место в IDATA
RSEG Стек_модуля - уточнить, что этот кусок свободно перемещаемый
DS число - сообщить расчетный размер выделяемого куска.

Код_модуля SEGMENT CODE - объявить права на место в ROM
CSEG AT начальный_адрес - сказать что код должен начинаться по следующему абсолютному адресу или с помощью RSEG сказать, что код можно пихать куда хочется.
END - сказать что модуль закончен.

Правильно?

Теперь этот файл можно сохранить и использовать инклудом куда хочешь?
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
30.05.2015, 11:09
Про SEGMENT IDATA могу сказать что у меня он всегда один и обьявлен в основном модуле. Никогда не пробовал делать несколько сегментов стека, да и зачем?

Применение CSEG AT - делает модуль неперемещаемым, и применяется только для сегмента инициализации с таблицей прерываний.
RSEG Имя_сегмента - регистрирует сегмент и обозначает его начало.
Кроме этого что-то маловато видов памяти вы нашли у i51. Давайте считать:
Code
1
2
3
STACK   SEGMENT   IDATA            ; Стековый сегмент
RSEG   STACK
DS      0x10           ; 16 байт
Code
1
2
3
4
5
6
7
VARS   SEGMENT   DATA            ; Переменные
RSEG   VARS
DyspReg:   DS   1            ; Регистр
DyspCnt:   DS   1            ; Регистр
Dividend:   DS   8            ; 8 регистров
Divider:   DS   8            ; 8 регистров
Quotient:   DS   8            ; 8 регистров
Code
1
2
EXTVAR   SEGMENT   XDATA            ; Переменные во внешней памяти
RSEG   EXTVAR
Code
1
2
3
4
5
6
FLAGS   SEGMENT BIT            ; Битовый сегмент 128 бит
RSEG   FLAGS
ClrMem:   DBIT   1            ; Битовый флаг
ModeA:   DBIT   1            ; Битовый флаг
ModeM:   DBIT   1            ; Битовый флаг
OVF_F:   DBIT   2            ; Битовые флаги
Code
1
2
3
4
5
PROGROM   SEGMENT   CODE            ; Программа
CSEG   AT   START_ADR      ;
AJMP   Start            ;
RSEG   PROGROM            ;
USING   0              ;
Наложение символьных имен на внешние выводы
Код:KEY0 BIT P1.0 ; Битовое имя внешнего вывода
KEY1 BIT P1.3 ; Битовое имя внешнего вывода
KEY2 BIT P1.2 ; Битовое имя внешнего вывода

Если же вместо а51 воспользоваться более навороченным Ах51 там видов памяти еще больше.
P.S. Сам никогда им не пользовался, хватало а51.

0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
30.05.2015, 14:19
Не совсем по теме, скорее по отладке ассемблерных проектов в Keil. По умолчанию в настройках проекта генерируется только листинг (*.lst). Для ассемблера этот файл никакой полезной смысловой нагрузки не несет, вы увидите только свой ассемблерный листинг с разбивкой на страницы и нумерацией.
Очень полезно для знания что и куда ассемблер положил в прошивку генерировать карту памяти (*.m51). По умолчанию она отключена, ее генерацию надо включить.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.05.2015, 14:19
Помогаю со студенческими работами здесь

Нет сети на Samsung a51
Приветствую. Взял с рук телефон Samsung a51, все проверил, вроде работает. Но в ходе эксплуатации выявил проблему: когда слабый сигнал...

Чёрный экран Samsung A51
Все началось с того, что телефон затупил, он перестал как-либо реагировать, все что я смогла с ним сделать - выключить. На мою попытку...

Программа тестирования для МК A51
Подскажите, есть учебное задание. В котором говорится, что есть некий тест, который должен выводит юзеру на экран. И вот собственно...

Assembler A51. Среднее арифметическое
Есть задание - посчитать среднее арифметическое 20 элементов массива. Загвоздка в том, что в МК51 АЛУ 1-байтное, а результат сложения -...

Подходят ли airpods pro на Samsung A51?
Здравствуйте, Подходят ли airpods pro на Samsung A51? Хочется услышать отзыв человека, который в этом понимает! Знаю, что некоторые функции...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru