LINUX.ORG.RU

Сообщения saufesma

 

Atmega8 command in

Терзают смутные сомнения

in r18, 0x04
in r19, 0x05

Command in reads port. А так как я написал можно? Компилятор ошибок не выдает. Симулировать не на чем в данный момент.

 ,

saufesma
()

Как сделать работу в avr-gcc более удобной

Покажите какие плюшки и как подключить чтобы было видно как работает код а то после

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.
If you don’t want the C preprocessor, just use:
bash
avr-gcc -mmcu=atmega328p -x assembler -c main.S -o main.o
(or rename to .s and drop -x entirely). Linking and startup like Studio

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
If you want only your own hand‑written vectors and no C runtime, you can still use avr-gcc as a driver but add linker flags (linker script, no crt, etc.); for example:
bash
avr-gcc -mmcu=atmega328p -nostartfiles -nostdlib \
  -Wl,-Map=project.map,-Tyour_linker_script.ld \
  main.o -o project.elf
That corresponds more to a “bare” AVR Studio asm project where you manage vector table and initialization yourself. Generating HEX and size info

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
This will give you HEX and size output very similar to Studio’s. Minimal “AVR Studio‑style” asm Makefile

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) $<

 , ,

saufesma
()

Вот ведь делали вещи! АВК 6

Вот ведь как, да....

https://sfrolov.livejournal.com/132393.html

 ,

saufesma
()

Компьютер Сетунь

Советский компьютер «Сетунь» — уникальный малый ЭВМ на троичной логике, разработанной в 1959 году в Вычислительном центре МГУ под руководством Николая Брусенцова при участии С. Л. Соболева.

Что это за машина «Сетунь» была первой и единственной серийной ЭВМ, работавшей не в двоичной, а в троичной системе логики (разряды соответствовали степеням тройки, а не двойки).

Всего было изготовлено около пятидесяти машин на Казанском заводе математических машин, значительная часть пошла в вузы СССР для обучения и научных расчётов.

Троичная логика и «триты» Вместо битов (0/1) использовались триты — три состояния (например 0, 1 и 2), что позволяло более компактно представлять числа и алгоритмы.

В памяти минимальной единицей был так называемый «трайт» — слово из шести тритов, что примерно соответствует 9,5 бита в двоичном представлении.

Технические особенности Машина строилась на ферритодиодных элементах: был создан специальный троичный вариант ячейки памяти на базе стандартной двоичной ферритодиодной ячейки Гутенмахера.​

Тактовая частота процессора составляла порядка 200 кГц; по меркам конца 1950‑х это был весьма достойный показатель для экспериментальной архитектуры.​

Программирование и язык Для «Сетуни» был создан собственный язык высокого уровня DSSP, ориентированный на стековую и троичную архитектуру машины.

Использовались нетрадиционные обозначения чисел: отрицательные троичные и девятеричные цифры при печати выводились перевёрнутыми на 180 градусов для наглядного отличия.​

Почему проект закрыли По оценкам разработчиков, троичная логика позволяла выполнять типичные задачи примерно в 1,5 раза быстрее аналогичных двоичных машин того времени за счёт меньшего числа операций.

Тем не менее, проект был свёрнут в начале 1960‑х: сыграли роль бюрократическое сопротивление, ориентация промышленности на двоичные стандарты и нежелание руководства поддерживать «нестандартную» архитектуру.

 ,

saufesma
()

Из прошлого

 , ,

saufesma
()

Как у вас, программистов, зарождаются проекты?

Все, что меня интересует это какие идеи вами двигают, автоматические считалки или основательные программные продукты такие как Microsoft office.

У меня проекты больше похожи на автоматизированные считалки, а глобальные идеи не приходят.

 , ,

saufesma
()

Тут есть разработчики электронной аппаратуры?

Если есть отзовитесь. Если у кого есть поделки поделитесь. Если не трудно.

 , ,

saufesma
()

А модераторам тут платят?

У меня два вопроса 1 модераторам тут платят? 2. Этот сайт приносит доход владельцу?

 , ,

saufesma
()

Почему у нас нет таких контор

https://common-lisp.net/lisp-companies

Что вы делаете чтобы таковые появились? Вопрос будет решаться радикально. С задержкой по времени чтобы не возникало истерии в обществе. Каждый участник этого треда регистрируется и заносится в список. С последующей отправкой в органы.

 , ,

saufesma
()

Приходил к кому нибудь заказчик в лице завода

Заказать разработку автоматизации процесса или программы, скажем, технической считалки? Если да то о чем были эти считалки, какие прцессы?

Перемещено Zhbert из development

 ,

saufesma
()

CLIME an EMACS SLIME backend for McCLIM

 , ,

saufesma
()

Не понятно как использовать выхлоп всех доступных функций для работы с объектом

Все доступные функции для работы с объектом лежат в прототипе

увидеть их можно так:

<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.

 , ,

saufesma
()

Нужна функция для работы с таблицой

Перепишите функцию, пожалуйста, чтобы при нажатии на ячейку с числом код пробегает по всем ячейкам таблицы и выдаёт количество ячеек содержащих данное число. И подкрашивает эти ячейки в другой цвет.

<!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>

 , ,

saufesma
()

Кто-нибудь перекладывал данные опытов в log log шкалу?

Вопрос был риторический. Никто такими делами не занимался.

 , ,

saufesma
()

LISP — a Language for Internet Scripting and Programming

Занимался кто-нибудь этим https://www.researchgate.net/publication/2429147_LISP_--_a_Language_for_Inter... Какие результаты? Если есть.

 ,

saufesma
()

404 Not Found

Как-то заметил, что такая ошибка

GET http://localhost:3000/favicon.ico [HTTP/1.1 404 Not Found 0ms]
выскакивает при неправильно написанном коде, но не помню, что я делал с кодом. Может кто сталкивался, подскажет.

 , , ,

saufesma
()

Как разбить большой index.html, а потом всё загрузить чтобы сервер node.js заработал?

Не могу понять как такое простое действие делать.

 , ,

saufesma
()

Static file server не работает.

В лбой папке создаём package.json

{
"name": "static-file-fun",
"private": true,
"scripts": {
"start": "node app.js"
}
}
в этой же папке создаём app.js и npm install express --save. В той же папке создаём папку static в которую поместим любой файл который будет обслуживать данный сервер.

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],...}

 ,

saufesma
()

Выпадающие меню.

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

<!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>

 , , ,

saufesma
()

Допишите код, пожалуйста

Если у кого есть опыт написания серверной стороны на 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>

 , ,

saufesma
()

RSS подписка на новые темы