Например TDA7294

Форум РадиоКот • Просмотр темы - Вопросы по С/С++ (СИ)
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср янв 07, 2026 10:02:58

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7704 ]     ... , , , , 386
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 21, 2025 16:35:25 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2135
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18451
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Массив хоть структур, хоть элементарных типов, все равно содержит сущности одинаковых размеров. И обращаться к ним можно по индексу.

Но, похоже, речь идет о байтовом буфере, в котором подряд идут записи разных структур, как, например, строки в файле или теги в файле riff-формата. В этом случае, не зная длины записи заранее, кроме как побайтовым перебором, ничего никуда передать не выйдет. А если, предположим, первый байт содержит длину записи, то уже ясно, что надо использовать указатель и эту длину для передачи куда надо и последующего "наращивания" указателя...

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 21, 2025 19:43:28 
Друг Кота
Аватар пользователя

Карма: 52
Рейтинг сообщений: 2114
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 7059
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (2)
у меня в кодевижене работало так (ноута под рукой нет, чтоб точно синтаксис глянуть, но смысл ясен):
#define func(x) func(x, length(x))
и в функцию сразу летит и указатель на начало и размер массива...
но имя массива в этом случае надо указывать явно (переданные по ссылке не прокатят) т.ч. это только сахарок, не более... :dont_know:

ещё делал так: массив с указателями начал подмассивов, а первый элемент подмассива - его длина (про это тут уже написали), также можно и в массив с указателем длину разместить в следующей ячейке, (получается пара адрес-размер) тут уж как удобнее :solder:

_________________
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 02, 2026 13:53:56 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 255
Рейтинг сообщения: 0
Добрый день. Написал программку управления регистром через LPT-порт, и все вроде получилось. Не могу понять почему возник сегфолт, хотя "пять минуть назад все работало", просто строчку в pattern[] поменял. В общем, на ровном месте. Гуголь и дикпи.. дипсик ничего внятного сказать не могут.
Выяснено что сегфолт возникает на вызове sh_out(x).

Код:
#include <stdio.h>
#include <unistd.h>
#include <asm/io.h>

#define base 0xD100
#define time 500000

#define   DS      0
#define ST_CP   1
#define SH_CP   2

int sh_out(unsigned char sh_data) {
      int i = 0;
      unsigned char out;
      out &= ~(1 << ST_CP);
      outb (out, base);
         for(i = 0; i < 8; i++) {
            out &=  ~(1 << SH_CP);
            outb (out, base);
            if (sh_data & 0x80) {
               out |=  (1 << DS);
               outb (out, base);
            } else {
               out &= ~(1 << DS);
               outb (out, base);
            }
            sh_data = sh_data << 1;
            out |= (1 << SH_CP);
            outb (out, base);
            }
      out |= (1 << ST_CP);
      outb (out, base);      
   }

int main() {
    int j = 0;
    unsigned char pattern[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02};
    unsigned char temp = 0;

    if (ioperm(base, 3, 1)) {
        perror("ioperm");
        return 1;
    }
   
    while(1) {
        temp = pattern[j];
        sh_out(temp);
        j++;
        if (j == sizeof(pattern)) j = 0;
        usleep(time);
    }
}


У меня Debian 13 и компилятор GCC14


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт янв 02, 2026 18:08:29 
Сверлит текстолит когтями
Аватар пользователя

Карма: 1
Рейтинг сообщений: 23
Зарегистрирован: Чт авг 21, 2014 11:11:48
Сообщений: 1276
Откуда: краснодарский край
Рейтинг сообщения: 0
ну вы с такими вопросами,в такой день... :facepalm:


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7704 ]     ... , , , , 386

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y