Перейти к содержанию
    

firstvald

Свой
  • Постов

    1 005
  • Зарегистрирован

  • Посещение

  • Победитель дней

    2

Сообщения, опубликованные firstvald


  1. 5 minutes ago, Леонид К. said:

    Ничего расковыривать не нужно. ТЗ - повторить эту программу.

    завтра днем за эту фразу вам прилетит :dance3:реально ТЗ пишется порой неск месяцев и в нем расписывается функционал и форматы. если его нет ни в каком виде "все и так понятно" работа не будет сделана никогда. при попытке работать в стиле :  а вот тут вот добавить а там у меня вот так было - уйдут даже друзья. если есть острая потребность - нужно тз со всеми сценариями, форматами/ иначе ничего не будет. или тз войдет в работу исполнителя. но написание будет неск месяцев. это может быть неожиданным для вас ,  но никто по другому работать не согласиться.

  2. 47 minutes ago, Леонид К. said:

    Формат записи - обычный текстовый файл. Но это не оптимальный вариант. Выглядит вот так:

    Снимок экрана 2023-12-02 в 23.40.48.png

    Вот ссылка, как происходит ручной ввод плотностей

    https://disk.yandex.ru/i/kh0NbJtQMc5-sQ

     

    Вот как происходит ручной ввод плотностей: https://disk.yandex.ru/i/kh0NbJtQMc5-sQ

    "Войну и мир" восстанавливал "Мосфильм" с имеющегося у него дубль-позитива. Дубль-позитив - это выверенный по цвету фильм, только малоконтрастный, чтобы при тиражировании не увеличивался контраст. Сам негатив фильма "Война и мир" хранится в Госфильмофонде, он шириной 70 мм. Для такой киноплёнки нужен специальный широкоформатный сканер.

    Не понял, при чём тут Прибалтика???

    За правильностью цветопередачи восстановленного фильма "Война и мир" следил кинооператор этого фильма, Анатолий Петрицкий.

    Сейчас А.Петрицкому уже 91 год

    Шахназаров рассказывал что вообще не нашли материалов по Войне и миру. Нашли позитив в хорошем состоянии где- то в Прибалтике, сделанный для СовИнФильм. И на телевидении переписанный на бетту.

     

     В России не было негатива „Войны и мира“! Мы у „Совэкспортфильма“ запросили контратип, сделали реставрацию на цифру в формате SD и напечатали с него пленочную копию 35 мм. Но у нас не было такой техники, как сейчас, да и оригинальная копия 70 мм за эти годы обнаружилась.

     

    немного

  3. ну ++ помогают немного систематизировать. это если отвлечься от наследования. и можно писать на чистом си  исходя из подхода свойства /  методы. монолитным куском проект становится за годы. боюсь оказаться правым - любой проект. он может быть сначала цельным и прозрачным. но, если он развивается несколько лет, его, скорее всего,  надо будет переписать с нуля.

  4. вопросы скорее есть к тому, что снимал Экран. а это спектакли. берет оторопь от дефектов на пленках спектаклей Проснись и пой ,  Безумный день.. похоже снимали на 16 мм и брак был уже в самом начале.

     

    история с восстановлением Война и Мир,  там ,  похоже ,  нашли только позитив где- то в Прибалтике и с ним работали.

  5. глянул. там серьезная работа. нужно работать с файлами архива и параметрами фотоматериалов. примененные форматы нужно аккуратно сохранить, чтобы была совместимость. аккуратно рисовать график. и его тоже надо аккуратно печатать. обмениваться с оборудованием (а формат и протоколы обмена с денситометрами есть?). задача не для молнеиносного написания и в этом секрет проблемы. а вы могли бы досовскую версию выложить в файлообменник, а сюда ссылку?

     

    т е реально описаний форматов и тз не будет. нужно расковыривать. и исходники тех кто пошел по этой дорожке сохранились?

  6. image.png

    в одной картинке все очень вменяемо  нарисовано. С27 я бы не ставил. Без R34 низяяяя.

     

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

  7. так и представляю матч с против с++. хотя это разные инструменты и нужны для разных вещщей.

    видел гибрид (...,  в смысле дописывал проект) в котором программер дефайнами создал такой визуальный код, который внешне походил на плюсы, но был чисто сишным. он был гением, гении уходят ,  тварения остаются . в смысле: после него надо переписывать. и контора попала на время*деньги.

    31 minutes ago, Forger said:

    а ничего не делать, оставить как есть, я серьезно!

    просто ставлю свои простые обертки вокруг чужого и стороннего кода, т.н. wrappers, по сути это некий интерфейс между чужим кодом (порой откровенным го%кодом) и моими проектами, 

    позволяет и "не измазаться" в чужом коде и если что его обновить на более "свежее" г

    дело в том, что код пророс аппаратурой. я тоже сначала думал: код же работал,  работал,  я тогда просто перенесу и все. но процессор сменился и если бы было с десяток файлов ,  я бы глазами отсмотрел ,  что бросилось в глаза поправил бы. откомпилировал бы и разбирался с сотней ошибок. но тут так не пройдет. приходится запускать по функциям. связанное с таймерами,  с обменом с кнопками. и вот даже на кнопках вылезает то, что, скажем, меню, оперирует чуть ли не со всем задекларированными в СИШНИКАХ переменными,  которые подключать нельзя - там все стреляется и не работает. и приходится из сишников вытаскивать вручную все определения переменных,  чтобы хоть что -то запустилось. я не зря это чудовищным стилем называю - это диверсия. это на месяцы работа. 

     

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

     

    был у нас программер. ага. говорил так. если мне надо операцию 5 раз повторить я строчку подряд пять раз копирую.  для банка софт писали.

  8. 8 hours ago, Forger said:

    не использую си, давным давно пишу на плюсах  и нет ни одной глобальной переменной даже в больших проектах, но это к слову ))

    как раз проще всего переносить тем модули, у которых все объекты локальные или с припиской static

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

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

     

    про плюсы от эмбеддеров нижнего уровня слышу .... в смысле не нужен с++. но было бы удобно в некоторых случаях (если проект сложный и его писать долго, плюсы явно дадут облегчение). кстати. ардуина на плюсах. очень удобно.

     

    не очень нравится гнилой стиль дискуссии. такой в стиле футбольных фанатов. правильнее читать внимательно. есть люди со странным воспитанием, считающие что они все видели и все знают. есть глупцы, кидающие пару умных фраз, типа я тут такой гений (Ландау такие). 

    профессиональное сообщество предназначено для обмена шишками и знаниями. и, порой, в редчайших случаях, для нахождения решений, реально решающих проблему. 

     

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

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

  10. вот, ни в коем случае, в сишных не надо. это проходит в том случае,  когда у вас маленький проект (вы помните, что где лежит) и когда вы не думаете о том,  что ваш код будет использоваться повторно в других проектах . и у вас декларация и объявление получаются тогда в разных файлах. попробуйте как попереносить кусок кода без ошибок копированием из файла в файл, когда пишете и у вас открыто с два три десятка закладок. а, когда вы пишите в пределах одного файла ,  вы гораздо меньше подвержены таким ошибкам. и вот точно никаких костылей тут нет. поэтому, когда я вижу код, который написан, как в умных книжках с полувековой историей,  я понимаю, что ждать бяды. и, хуже того, пацанов продолжают учить такому, люди никогда не занимавшиеся разработкой.

  11. вот с объявлением структур ооочень аккуратно надо. и я скакал по этим граблям (получал в разных файлах разные экземпляры структуры под одним и тем же именем). стал делать так, в заголовочнике:

    #ifndef _sensor
    #define _sensor
    
    
    struct sensor_general_type{
                               unsigned  short int meash_interval_sec;
                              
                                };
    
    #ifdef sensor_first_appear
    
    struct sensor_general_type  sensor_general;
    
    #else
    extern  struct sensor_general_type  sensor_general;
    
    
    #endif
    
    
    #endif
     

    в ОДНОМ месте в с или хедере так:

    #define sensor_first_appear
    #include "sensor.h"

    во всех других местах так:

    
    #include "sensor.h"

     

  12. Пробую простенький тестовый проект с CAN. Но я или что то упустил или что то не разрешил. На ножках нет передачи . На прием тоже нет прерывания.  

    Может свежим глазом что- то бросится.

     

    #include "state.h"
    #include "can_my.h"
    #include "stm32f1xx_hal_cortex.h"
    
    CAN_HandleTypeDef hcan;
    
    /* USER CODE BEGIN PV */
    CAN_FilterTypeDef canFilterConfig;/* USER CODE END PV */
    
    /* Private function prototypes -----------------------------------------------*/
    void SystemClock_Config(void);
    static void MX_GPIO_Init(void);
    static void MX_CAN_Init(void);
    
    int main(void)
    {
      
      HAL_Init();
    
     
      SystemClock_Config();
    
    
      MX_GPIO_Init();
      MX_CAN_Init();
      /* USER CODE BEGIN 2 */
      HAL_CAN_Start(&hcan);
    	HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO0_MSG_PENDING);
    
      while (1)
      {
       
         if(flag_1s==1){
    		                 flag_1s=0;
    		 
    			 if (HAL_CAN_GetTxMailboxesFreeLevel(&hcan) != 0)
                                                                 {
    
                                                                     msgTxHeader.StdId = 0x200;
                                                                     msgTxHeader.DLC = 8;
                                                                     msgTxHeader.TransmitGlobalTime = DISABLE;
                                                                     msgTxHeader.RTR = CAN_RTR_DATA;// ïåðåäàåì ñàìè íå çàïðîñ ïàðàìåòðà
                                                                     msgTxHeader.IDE = CAN_ID_STD;
                                                                     uint32_t mailBoxNum = 0;
      
                                                                     for (uint8_t i = 0; i < 8; i++)
                                                                                                     {
                                                                                                      msgTxData[i] = i;
                                                                                        }
                   
                                                                   HAL_CAN_AddTxMessage(&hcan, &msgTxHeader, msgTxData, &mailBoxNum);
                                                                  }
    		 
    		                 }//flag 1 s
       
                      }//while
     
    }//main
                                                                                               
                                                                                               
    static void MX_CAN_Init(void)
    {
    
     
    canFilterConfig.FilterBank = 0;
    canFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
    canFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
    
    canFilterConfig.FilterIdHigh = 0x0000;//ñòàðøàÿ ÷àñòü ID
    canFilterConfig.FilterIdLow = 0x0000;// ìëàäøàÿ ÷àñòü ID
    
    canFilterConfig.FilterMaskIdHigh = 0x0000;//  ñòàðøàÿ ÷àñòü ìàñêè
    canFilterConfig.FilterMaskIdLow = 0x0000;//  ìëàäíàÿ ÷àñòü ìàñêè
    
    canFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;
    canFilterConfig.FilterActivation = ENABLE;
    canFilterConfig.SlaveStartFilterBank = 14;
    HAL_CAN_ConfigFilter(&hcan, &canFilterConfig);
    
      hcan.Instance = CAN1;
      hcan.Init.Prescaler = 16;
      hcan.Init.Mode = CAN_MODE_NORMAL;
      hcan.Init.SyncJumpWidth = CAN_SJW_1TQ;
      hcan.Init.TimeSeg1 = CAN_BS1_13TQ;
      hcan.Init.TimeSeg2 = CAN_BS2_2TQ;
      hcan.Init.TimeTriggeredMode = DISABLE;
      hcan.Init.AutoBusOff = DISABLE;
      hcan.Init.AutoWakeUp = ENABLE ;
      hcan.Init.AutoRetransmission = DISABLE;
      hcan.Init.ReceiveFifoLocked = DISABLE;
      hcan.Init.TransmitFifoPriority = DISABLE;
      if (HAL_CAN_Init(&hcan) != HAL_OK)
      {
        Error_Handler();
      }
     
    
    }      
                                                                                               
    void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan)
    {
      GPIO_InitTypeDef GPIO_InitStruct = {0};
      if(hcan->Instance==CAN1)
      {
     
        __HAL_RCC_CAN1_CLK_ENABLE();
    
        __HAL_RCC_GPIOA_CLK_ENABLE();
        /**CAN GPIO Configuration
        PA11     ------> CAN_RX
        PA12     ------> CAN_TX
        */
        GPIO_InitStruct.Pin = GPIO_PIN_11;
        GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
        GPIO_InitStruct.Pull = GPIO_PULLUP ;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
        GPIO_InitStruct.Pin = GPIO_PIN_12;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
        /* CAN1 interrupt Init */
        HAL_NVIC_SetPriority(USB_HP_CAN1_TX_IRQn, 0, 0);
        HAL_NVIC_EnableIRQ(USB_HP_CAN1_TX_IRQn);
        HAL_NVIC_SetPriority(USB_LP_CAN1_RX0_IRQn, 0, 0);
        HAL_NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn);
      
      }
    
    }
                                                                       
     
                                                                       
    void USB_LP_CAN1_RX0_IRQHandler(void)
    {
     
      HAL_CAN_IRQHandler(&hcan);
     
    }
                                                                                               
        
                                                                       
    void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
    {
    
      
      HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &msgRxHeader, msgRxData);
        
      if (msgRxHeader.IDE == CAN_ID_EXT)
      {
        msgId = msgRxHeader.ExtId;
      }
      else
      {
        msgId = msgRxHeader.StdId;
      } 
    }                                                                   

     

  13. ну, в порядке поиска, что происходит. внимательно посмотрите декларации потоков и объектов. у меня бывало так,  что при копировании я не все подправлял для следующего объекта. и посмотрите - нет ли в какой из функций автоматических параметров - массивов или структур.

  14. ребят. речь вообще идет о разработке станка. по сложности и по трудозатратам - не конструкция выходного дня. и да ,  для начала будет этап исследований. результатом будут цифры и ,  возможно,  гипотезы почему и как . и уж на основании этого этап сделать как ,  который тоже вериятностный. сказать сначала цену и сроки невозможно.

    • Upvote 1
×
×
  • Создать...