Atmega8 command in
Терзают смутные сомнения
in r18, 0x04
in r19, 0x05
Command in reads port. А так как я написал можно? Компилятор ошибок не выдает. Симулировать не на чем в данный момент.
Терзают смутные сомнения
in r18, 0x04
in r19, 0x05
Command in reads port. А так как я написал можно? Компилятор ошибок не выдает. Симулировать не на чем в данный момент.
Покажите какие плюшки и как подключить чтобы было видно как работает код а то после
avr-gcc -mmcu=atmega8 -nostartfiles -Wl,--undefined=_mmcu blink.s -o blink.elf
vr-objdump -h blink.elf
.equ DDRB = 0x37 ;ОШИБКА
;;; Blinks LED on PB0 (pin 14) using a simple delay loop.
; blink.s — AVR GAS syntax for avr-gcc
; Symbol definitions (note the comma in .equ)
.equ DDRB, 0x37 ; I/O address of DDRB for ATmega8
.equ PORTB, 0x38 ; I/O address of PORTB
.equ PB0, 0 ; bit number 0
.org 0x0000
rjmp reset ; reset vector
reset:
ldi r16, (1 << PB0) ; PB0 is a plain constant
out DDRB, r16 ; set PB0 as output
loop:
ldi r16, (1<<PB0) ; PB0 high
out PORTB, r16
rcall DELAY
ldi r16, (0<<PB0) ; PB0 low
out PORTB, r16
rcall DELAY
rjmp loop
DELAY:
ldi r17, 200
D1: dec r17
brne D1
ldi r18, 255
D2: dec r18
brne D2
ret
/* Define the .mmcu section for simavr */
.section .mmcu,"a",@progbits
/* VCD Trace Header: tells simavr to create 'trace.vcd' */
.byte 0x01 /* tag for AVR_MMCU_TAG_VCD_TRACE */
.byte 24 /* size of this chunk */
.asciz "trace.vcd" /* filename */
/* Trace entry: Monitor PORTB (Address 0x38 for ATmega8) */
.byte 0x02 /* tag for a trace symbol */
.byte 8 /* size */
.byte 0x38 /* address of PORTB in ATmega8 */
.byte 0x01 /* mask (bit 0) */
.asciz "LED_PIN" /* name of the trace in GTKWave */
.byte 0x00 /* End of section */
Вот, что ИИ советует
To make pure-assembler projects behave like they did in AVR Studio, you mainly need to:
Assemble and link via avr-gcc (using the right -mmcu) rather than calling avr-as/avr-ld directly.
Use avr-objcopy and avr-size in the same way as for C, just changing how you pass the source.
Assembling like AVR Studio
Typical command for one .S (or .asm) file:
bash
avr-gcc -mmcu=atmega328p -x assembler-with-cpp -Wa,-gstabs \
-c main.S -o main.o
Notes:
-mmcu=... selects the same device as in AVR Studio’s project settings.
-x assembler-with-cpp lets you use #define, #include, etc., through the C preprocessor (Studio often did that behind the scenes).
-Wa,options passes options to the assembler; -gstabs or -g lets you debug in GDB/simulavr similarly to Studio’s debug info.
bash
avr-gcc -mmcu=atmega328p -x assembler -c main.S -o main.o
If you want a “full” application with reset vector, interrupt vectors, and the C runtime (like a C project in Studio), you typically:
Provide your own entry label (often _start or similar) in assembly.
Link with the standard libraries and startup from avr-libc via avr-gcc:
bash
avr-gcc -mmcu=atmega328p -Wl,-Map=project.map \
main.o other.o -o project.elf
bash
avr-gcc -mmcu=atmega328p -nostartfiles -nostdlib \
-Wl,-Map=project.map,-Tyour_linker_script.ld \
main.o -o project.elf
Same idea as in a C project; just apply to your .elf:
bash
avr-objcopy -O ihex -R .eeprom project.elf project.hex
avr-objcopy -O ihex -j .eeprom --set-section-flags .eeprom=alloc,load \
--change-section-lma .eeprom=0 \
project.elf project_eeprom.hex
avr-size -C --mcu=atmega328p project.elf
For an all‑assembly project:
MCU = atmega328p
CC = avr-gcc
OBJCOPY = avr-objcopy
SIZE = avr-size
ASFLAGS = -mmcu=$(MCU) -x assembler-with-cpp -Wa,-gstabs
LDFLAGS = -mmcu=$(MCU) -Wl,-Map=project.map
all: project.hex
project.elf: main.o
$(CC) $(LDFLAGS) $^ -o $@
%.o: %.S
$(CC) $(ASFLAGS) -c $< -o $@
project.hex: project.elf
$(OBJCOPY) -O ihex -R .eeprom $< $@
$(SIZE) -C --mcu=$(MCU) $<
Вот ведь как, да....
Советский компьютер «Сетунь» — уникальный малый ЭВМ на троичной логике, разработанной в 1959 году в Вычислительном центре МГУ под руководством Николая Брусенцова при участии С. Л. Соболева.
Что это за машина «Сетунь» была первой и единственной серийной ЭВМ, работавшей не в двоичной, а в троичной системе логики (разряды соответствовали степеням тройки, а не двойки).
Всего было изготовлено около пятидесяти машин на Казанском заводе математических машин, значительная часть пошла в вузы СССР для обучения и научных расчётов.
Троичная логика и «триты» Вместо битов (0/1) использовались триты — три состояния (например 0, 1 и 2), что позволяло более компактно представлять числа и алгоритмы.
В памяти минимальной единицей был так называемый «трайт» — слово из шести тритов, что примерно соответствует 9,5 бита в двоичном представлении.
Технические особенности Машина строилась на ферритодиодных элементах: был создан специальный троичный вариант ячейки памяти на базе стандартной двоичной ферритодиодной ячейки Гутенмахера.
Тактовая частота процессора составляла порядка 200 кГц; по меркам конца 1950‑х это был весьма достойный показатель для экспериментальной архитектуры.
Программирование и язык Для «Сетуни» был создан собственный язык высокого уровня DSSP, ориентированный на стековую и троичную архитектуру машины.
Использовались нетрадиционные обозначения чисел: отрицательные троичные и девятеричные цифры при печати выводились перевёрнутыми на 180 градусов для наглядного отличия.
Почему проект закрыли По оценкам разработчиков, троичная логика позволяла выполнять типичные задачи примерно в 1,5 раза быстрее аналогичных двоичных машин того времени за счёт меньшего числа операций.
Тем не менее, проект был свёрнут в начале 1960‑х: сыграли роль бюрократическое сопротивление, ориентация промышленности на двоичные стандарты и нежелание руководства поддерживать «нестандартную» архитектуру.
Все, что меня интересует это какие идеи вами двигают, автоматические считалки или основательные программные продукты такие как Microsoft office.
У меня проекты больше похожи на автоматизированные считалки, а глобальные идеи не приходят.
Если есть отзовитесь. Если у кого есть поделки поделитесь. Если не трудно.
У меня два вопроса 1 модераторам тут платят? 2. Этот сайт приносит доход владельцу?
https://common-lisp.net/lisp-companies
Что вы делаете чтобы таковые появились? Вопрос будет решаться радикально. С задержкой по времени чтобы не возникало истерии в обществе. Каждый участник этого треда регистрируется и заносится в список. С последующей отправкой в органы.
Заказать разработку автоматизации процесса или программы, скажем, технической считалки? Если да то о чем были эти считалки, какие прцессы?
Перемещено Zhbert из development
Прикольный проектик накопал
https://gist.github.com/lukego/0b74b94492066ae2b8c2a12b18e845c7
Все доступные функции для работы с объектом лежат в прототипе
увидеть их можно так:
<select id="list"></select>
<script>console.dir(document.querySelector('#list').__proto__)</script>
Когда вы используете
console.dir(document.querySelector('#list').__proto__), вы получаете доступ к прототипу (или родительскому объекту) элемента <select> с идентификатором list. Это может быть полезно для понимания свойств и методов, доступных для данного элемента. Что можно получить из console.dir(document.querySelector('#list').__proto__)
Свойства и методы элемента:
Вы увидите все свойства и методы, которые доступны для элемента <select>, включая стандартные методы DOM, такие как: add(): Добавляет новый элемент <option> в список. remove(): Удаляет элемент <option> из списка. item(): Возвращает элемент <option> по индексу. selectedIndex: Свойство, которое указывает индекс выбранного элемента. value: Свойство, которое возвращает или устанавливает значение выбранного элемента.
Свойства HTML:
Вы также увидите свойства, специфичные для HTML-элемента <select>, такие как: length: Количество элементов <option> в списке. multiple: Указывает, может ли пользователь выбрать несколько элементов. name: Имя элемента, которое отправляется на сервер при отправке формы.
События:
Прототип включает методы для работы с событиями, такие как addEventListener() и removeEventListener(), которые позволяют добавлять и удалять обработчики событий для элемента.
Наследование:
Вы также увидите, что прототип элемента <select> наследует свойства и методы от других объектов, таких как HTMLElement и Element, что дает доступ к более общим свойствам и методам, доступным для всех HTML-элементов.
Пример использования
Если вы хотите получить информацию о текущем выбранном элементе в списке, вы можете использовать следующее:
javascript
const selectElement = document.querySelector('#list');
const selectedValue = selectElement.value; // Получаем значение выбранного элемента
const selectedIndex = selectElement.selectedIndex; // Получаем индекс выбранного элемента
console.log(`Выбранное значение: ${selectedValue}, Индекс: ${selectedIndex}`);
Заключение
Использование console.dir() с __proto__ позволяет вам исследовать структуру и методы объекта, что может быть полезно для отладки и понимания возможностей элемента <select> и его взаимодействия с JavaScript.
Перепишите функцию, пожалуйста, чтобы при нажатии на ячейку с числом код пробегает по всем ячейкам таблицы и выдаёт количество ячеек содержащих данное число. И подкрашивает эти ячейки в другой цвет.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatable" content="ie=edge">
<title>Document</title>
</head>
<body>
<style>
table, tr, td{
border: 1px solid;
border-collapse: collapse;
}
</style>
<table id="myTable">
<tr>
<td>string</td>
<td>4</td>
</tr>
<tr>
<td>string</td>
<td>4</td>
</tr>
<tr>
<td>string</td>
<td>4</td>
</tr>
<tr>
<td>string</td>
<td>10</td>
</tr>
<tr>
<td>string</td>
<td>12</td>
</tr>
<tr>
<td>string</td>
<td>4</td>
</tr>
<tr>
<td>string</td>
<td>4</td>
</tr>
</table>
<button onclick="myFunction()">Try it</button>
<script>
function myFunction() {
alert(document.getElementById("myTable").rows[2].cells[1].innerHTML);
}
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatable" content="ie=edge">
<title>Document</title>
</head>
<html>
<head>
<style>
table,
td {
border: 1px solid black;
}
</style>
</head>
<body>
<table id="position1">
<tr>
<td onclick="runM(this)">TL</td>
<td onclick="runM(this)">TC</td>
<td onclick="runM(this)">TR</td>
</tr>
</table>
<script>
function runM(txt){
console.log(txt.cellIndex);
}
</script>
</body>
</html>
Вопрос был риторический. Никто такими делами не занимался.
Занимался кто-нибудь этим https://www.researchgate.net/publication/2429147_LISP_--_a_Language_for_Inter... Какие результаты? Если есть.
Как-то заметил, что такая ошибка
GET http://localhost:3000/favicon.ico [HTTP/1.1 404 Not Found 0ms]
Не могу понять как такое простое действие делать.
В лбой папке создаём package.json
{
"name": "static-file-fun",
"private": true,
"scripts": {
"start": "node app.js"
}
}
var express = require("express");
var morgan = require("morgan");
var path = require("path");
var fs = require("fs");
var app = express();
app.use(morgan("short"));
app.use(function(req, res, next) {
console.log("Request IP: " + req.url);
console.log("Request date: " + new Date());
next();
});
app.use(function(req, res, next) {
var filePath = path.join(__dirname, "static");
//Тут https://expressjs.com/en/4x/api.html поисковик на fs.stat ничего не выдаёт. Не знаю как определить err, fileInfo
fs.stat(filePath, function(err, fileInfo) {
if (err) {
//next();
return;
}
if (fileInfo.isFile()) {
res.sendFile(filePath);
} else {
next();
}
});
});
app.use(function(req, res) {
res.status(404);
res.send("File not found!");
});
app.listen(3000, function() {
console.log("App started on port 3000");
});
Вот ещё загадка.
console.log(fs) => {....stat: [Function: stat],...}
Как переписать так чтобы в выпадающем меню выбрать температуру, а затем в другом выпадающем меню выбрать толщину пластины относящейся к выбранной температуре.
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Расчёт параметров.</title>
</head>
<body>
<h1>Расчёт параметров.</h1>
<p align="center">
<label for="temp200">Температура нагрева 200°C.</label>
<select name="temp200" id="temp200">
<option value="">Толщина пластины:</option>
<option value="05">0,5 см</option>
<option value="06">0,6 см</option>
<option value="08">0,8 см</option>
</select>
<label for="temp300">Температура нагрева 300°C.</label>
<select name="temp300" id="temp300">
<option value="">Толщина пластины:</option>
<option value="15">1,5 см</option>
<option value="20">2,0 см</option>
<option value="28">2,8 см</option>
</select>
</p>
<script>
const plate05 = [
{ w1: 0.1, w2: 0.5, Jv1: 6.13, Jv2: 2.75, a: 3.89 },
{ w1: 0.5, w2: 2, Jv1: 2.75, Jv2: 1.36, a: 3.54 },
{ w1: 2, w2: 4, Jv1: 1.36, Jv2: 0.95, a: 3.57 },
{ w1: 4, w2: 9.63, Jv1: 0.95, Jv2: 0.55, a: 3.5 },
{ w1: 9.63, w2: 35, Jv1: 0.55, Jv2: 0.3, a: 3.5 },
{ w1: 35, w2: 78.03, Jv1: 0.3, Jv2: 0, a: 3.5 }
];
const plate06 = [
{ w1: 0.1, w2: 0.5, Jv1: 6.13, Jv2: 2.75, a: 3.89 },
{ w1: 0.5, w2: 2, Jv1: 2.75, Jv2: 1.36, a: 3.54 },
{ w1: 2, w2: 4, Jv1: 1.36, Jv2: 0.95, a: 3.57 },
{ w1: 4, w2: 9.63, Jv1: 0.95, Jv2: 0.55, a: 3.5 },
{ w1: 9.63, w2: 35, Jv1: 0.55, Jv2: 0.3, a: 3.5 },
{ w1: 35, w2: 78.03, Jv1: 0.3, Jv2: 0, a: 3.5 }
];
const plate08 = [
{ w1: 0.1, w2: 0.5, Jv1: 6.13, Jv2: 2.75, a: 3.89 },
{ w1: 0.5, w2: 2, Jv1: 2.75, Jv2: 1.36, a: 3.54 },
{ w1: 2, w2: 4, Jv1: 1.36, Jv2: 0.95, a: 3.57 },
{ w1: 4, w2: 9.63, Jv1: 0.95, Jv2: 0.55, a: 3.5 },
{ w1: 9.63, w2: 35, Jv1: 0.55, Jv2: 0.3, a: 3.5 },
{ w1: 35, w2: 78.03, Jv1: 0.3, Jv2: 0, a: 3.5 }
];
const plate15 = [
{ w1: 0.1, w2: 0.5, Jv1: 6.13, Jv2: 2.75, a: 3.89 },
{ w1: 0.5, w2: 2, Jv1: 2.75, Jv2: 1.36, a: 3.54 },
{ w1: 2, w2: 4, Jv1: 1.36, Jv2: 0.95, a: 3.57 },
{ w1: 4, w2: 9.63, Jv1: 0.95, Jv2: 0.55, a: 3.5 },
{ w1: 9.63, w2: 35, Jv1: 0.55, Jv2: 0.3, a: 3.5 },
{ w1: 35, w2: 78.03, Jv1: 0.3, Jv2: 0, a: 3.5 }
];
const plate20 = [
{ w1: 0.1, w2: 0.5, Jv1: 6.13, Jv2: 2.75, a: 3.89 },
{ w1: 0.5, w2: 2, Jv1: 2.75, Jv2: 1.36, a: 3.54 },
{ w1: 2, w2: 4, Jv1: 1.36, Jv2: 0.95, a: 3.57 },
{ w1: 4, w2: 9.63, Jv1: 0.95, Jv2: 0.55, a: 3.5 },
{ w1: 9.63, w2: 35, Jv1: 0.55, Jv2: 0.3, a: 3.5 },
{ w1: 35, w2: 78.03, Jv1: 0.3, Jv2: 0, a: 3.5 }
];
const plate28 = [
{ w1: 0.1, w2: 0.5, Jv1: 6.13, Jv2: 2.75, a: 3.89 },
{ w1: 0.5, w2: 2, Jv1: 2.75, Jv2: 1.36, a: 3.54 },
{ w1: 2, w2: 4, Jv1: 1.36, Jv2: 0.95, a: 3.57 },
{ w1: 4, w2: 9.63, Jv1: 0.95, Jv2: 0.55, a: 3.5 },
{ w1: 9.63, w2: 35, Jv1: 0.55, Jv2: 0.3, a: 3.5 },
{ w1: 35, w2: 78.03, Jv1: 0.3, Jv2: 0, a: 3.5 }
];
const arrTemp200 = [
{ x: "05", y: plate05 },
{ x: "06", y: plate06 },
{ x: "08", y: plate08 }
];
const arrTemp300 = [
{ x: "15", y: plate15 },
{ x: "20", y: plate20 },
{ x: "28", y: plate28 }
];
const allTemp = [
arrTemp200, arrTemp300
];
function findAndReturn(array, value) {
for (let obj of array) {
if (value === obj.x) {
console.log(obj.y);
// console.log(obj.w0L);
// console.log(obj.w0H);
// document.getElementById("w00").value = value;
// document.getElementById("w0L").value = obj.w0L;
// document.getElementById("w0H").value = obj.w0H;
}
}
};
const selectTemp200 = document.querySelector("#temp200");
selectTemp200.addEventListener("change", () => {
const value1 = (selectTemp200.value);
// console.log(value1)
findAndReturn(arrTemp200, value1);
});
const selectTemp300 = document.querySelector("#temp300");
selectTemp300.addEventListener("change", () => {
const value1 = (selectTemp300.value);
// console.log(value1)
findAndReturn(arrTemp300, value1);
});
</script>
</body>
</html>
Если у кого есть опыт написания серверной стороны на expressjs сделайте так чтобы код внизу заработал. Уже задолбался читать про expressjs, не хватает примера
node myapp.js
<!DOCTYPE html>
<html>
<body>
<input type="number" id="myNumber0">
<input type="number" id="myNumber1">
<input type="number" id="myNumber2">
<button onclick="calc()">Try it</button>
</body>
</html>
и вот сeрвер возвращает
<!DOCTYPE html>
<html>
<body>
<input type="string" id="myNumber3">
<input type="string" id="myNumber4">
<input type="string" id="myNumber5">
function calc() {
const V0 = parseFloat(document.getElementById("myNumber0").value);
const V1 = parseFloat(document.getElementById("myNumber1").value);
const V2 = parseFloat(document.getElementById("myNumber2").value);
for (let i of [V0,V1,V2]){
if (isNaN(i)) {
alert(`Oops, it is ${i}`);
} else {
document.getElementById("myNumber3").value = V0 + V1;
document.getElementById("myNumber4").value = V1 + V2;
document.getElementById("myNumber5").value = V2 + V0;
}
}
};
</body>
</html>
| следующие → |