Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 24.03.2017, 16:00  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Функция из main.c,вызов из подключенного файла

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

main.h
PHP код:
#ifndef MAIN_H
#define MAIN_H

#define RTE_DEVICE_STDPERIPH_GPIO
#define RTE_DEVICE_STDPERIPH_RCC
#define RTE_DEVICE_STDPERIPH_TIM
#define RTE_DEVICE_STDPERIPH_ADC

#include "stm32f10x.h"
#include "stm32f10x_conf.h"
#include "init.h"
#include "adc.h"
#include "1-Wire.h"

#define    DWT_CYCCNT    *(volatile unsigned long *)0xE0001004
#define    DWT_CONTROL   *(volatile unsigned long *)0xE0001000
#define    SCB_DEMCR     *(volatile unsigned long *)0xE000EDFC


#endif 
main.c
PHP код:
#include "main.h"

//
uint32_t delay_tick=0;
uint16_t flag_tick=0;

uint16_t delay_count=0;
uint16_t flag_count=0;
uint16_t temp_pwm=0;
uint16_t flag_delay=0;
uint16_t flag_mig=0;
uint16_t dwt=0;
uint16_t i=0;
uint16_t c=0
uint16_t test=0;
uint16_t temp_delay_us=0;
//-------------------------------------------------------------------------
//
//-------------------------------------------------------------------------
void SysTick_Handler(void)  // 1 us
{
    
    
dwt=DWT_CYCCNT;
    
DWT_CYCCNT 0;
        
// плата
        
delay_tick++;
        if(
delay_tick==500000)
        {
            
delay_tick=0;
            
flag_tick=1;
            
//ADC_SoftwareStartConvCmd(ADC1,ENABLE);
        
}
        
flag_delay=1;
}

//-------------------------------------------------------------------------
int main()
{
    
  
RCC_ClocksTypeDef RCC_clock;
    
RCC_GetClocksFreq(&RCC_clock);  // òàêòèðîâàíèÿ øèí
    
    
init();
    
    
//adc_init();
    
    
    
while(1)
    {
        
//плата
        
if(flag_mig)
        {
            if(
flag_tick)
            {
                
GPIO_SetBits(GPIOC,GPIO_Pin_13);
                
flag_tick=0;
                
flag_mig=0;
            }
        }
        if(!
flag_mig)
        {
            if(
flag_tick)
            {
                
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
                
flag_tick=0;
                
flag_mig=1;
            }
        }
    }
    
}
//-------------------------------------------------------------------------
//
//-------------------------------------------------------------------------
void delay_us(uint32_t nTime)
{
    while(
nTime›=temp_delay_us)
    {
        if(
flag_delay)
        {
            
temp_delay_us++;
            
flag_delay=0;
        }
    }
    
temp_delay_us=0;

1-wire.h

PHP код:
#include "stm32_GPIO.h"

#define Time_Pulse_Delay_Low    10
#define Time_Pulse_Delay_High    60
#define Time_Reset_Low            480
#define Time_After_Reset        350
#define Time_Hold_Down            2

#define One_Wire_Read_ROM        0x33
#define One_Wire_Skip_ROM        0xCC
#define One_Wire_Search_ROM        0xF0
#define One_Wire_Match_ROM        0x55

#define One_Wire_Success        0x00
#define One_Wire_Error_No_Echo    0x01
#define One_Wire_Bus_Low_Error    0x02
#define One_Wire_Device_Busy    0x03
#define One_Wire_CRC_Error        0x04

unsigned int One_Wire_Reset(GPIO_TypeDef GPIOxu16 PINx);
void One_Wire_Write_Byte(unsigned char Byte,GPIO_TypeDef GPIOxu16 PINx);
unsigned char One_Wire_Read_Byte(GPIO_TypeDef GPIOxu16 PINx);
unsigned char One_Wire_Read_Bit (GPIO_TypeDef GPIOxu16 PINx);
void One_Wire_Write_Bit (unsigned char Bit,GPIO_TypeDef GPIOxu16 PINx); 
1-wire.c отсюда вызываю delay_us(void)
PHP код:
#include "1-Wire.h"
#include "stm32_GPIO.h"
#include "main.h"



unsigned int One_Wire_Reset(GPIO_TypeDef GPIOxu16 PINx)                                
{
    
unsigned int tmp;
    
PIN_IN(GPIOxPINx);
    if ((
PIN_SYG(GPIOxPINx))==0)    return One_Wire_Bus_Low_Error;
    
PIN_OUT_PP(GPIOxPINx);
    
PIN_OFF(GPIOxPINx);
    
delay_us(Time_Reset_Low);
    
PIN_ON(GPIOxPINx);
    
PIN_IN(GPIOxPINx);
    
delay_us(Time_Pulse_Delay_High);
    if ((
PIN_SYG(GPIOxPINx))==0tmp=One_Wire_Success;
        else 
tmp=One_Wire_Error_No_Echo;
    
delay_us(Time_After_Reset);
    return 
tmp;
}

void One_Wire_Write_Byte(unsigned char Byte,GPIO_TypeDef GPIOxu16 PINx)
{
    
unsigned char cnt;
    for (
cnt=0;cnt!=8;cnt++) One_Wire_Write_Bit(Byte&(1‹‹cnt),GPIOxPINx);
}

void One_Wire_Write_Bit (unsigned char Bit,GPIO_TypeDef GPIOxu16 PINx)
{
    
PIN_OUT_PP(GPIOxPINx);
    
PIN_OFF(GPIOxPINx);
    if (
Bit==0)
    {
        
delay_us(Time_Pulse_Delay_High);
        
PIN_ON(GPIOxPINx);
        
delay_us(Time_Pulse_Delay_Low);
    }
    else
    {
        
delay_us(Time_Pulse_Delay_Low);
        
PIN_ON(GPIOxPINx);
        
delay_us(Time_Pulse_Delay_High);
    }
    
PIN_IN(GPIOxPINx);


unsigned char One_Wire_Read_Byte(GPIO_TypeDef GPIOxu16 PINx)
{
    
unsigned char tmp=0;
    
unsigned char cnt;
    for (
cnt=0;cnt!=8;cnt++)
        if (
One_Wire_Read_Bit(GPIOxPINx)!=0)    tmp|=(1‹‹cnt);
    
delay_us(Time_Pulse_Delay_High);
    return 
tmp;
}

unsigned char One_Wire_Read_Bit (GPIO_TypeDef GPIOxu16 PINx)
{
        
unsigned char tmp;
         
PIN_OUT_PP(GPIOxPINx);
        
PIN_OFF(GPIOxPINx);
        
delay_us(Time_Hold_Down);
        
PIN_IN(GPIOxPINx);
        
delay_us(Time_Pulse_Delay_Low);
        if ((
PIN_SYG(GPIOxPINx))!=0)    tmp 1;
            else 
tmp 0;
        
delay_us(Time_Pulse_Delay_High);
        return 
tmp;

ругается что некорректно вызов delay_us

PHP код:
UserSource\src\1-Wire.c(14): warning:  #223-D: function "delay_us" declared implicitly
      
delay_us(Time_Reset_Low);
UserSource\src\1-Wire.c(36): warning:  #223-D: function "delay_us" declared implicitly
          
delay_us(Time_Pulse_Delay_High);
UserSource\src\1-Wire.c(42): warning:  #223-D: function "delay_us" declared implicitly
          
delay_us(Time_Pulse_Delay_Low);
UserSource\src\1-Wire.c(55): warning:  #223-D: function "delay_us" declared implicitly
      
delay_us(Time_Pulse_Delay_High);
UserSource\src\1-Wire.c(64): warning:  #223-D: function "delay_us" declared implicitly
          
delay_us(Time_Hold_Down);
UserSource\src\1-Wire.c5 warnings0 errors 
Реклама:
__________________
Глаза боятся,а руки делают.

Последний раз редактировалось CERGEI1982; 24.03.2017 в 16:04.
CERGEI1982 вне форума  
Непрочитано 24.03.2017, 16:06  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Функция из main.c,вызов из подключенного файла

Какой знакомый код))) Не то, чтобы мне прямо на душе потеплело, но улыбка проползла.
Для задержек сделайте отдельный файл. Нечего им в main делать.
Идея такая - функции декларируются в отдельном хеадере, который потом прицепляете туда, где собираетесь их использовать.
Easyrider83 вне форума  
Непрочитано 24.03.2017, 16:10  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: Функция из main.c,вызов из подключенного файла

Сообщение от Easyrider83 Посмотреть сообщение
Какой знакомый код))) Не то, чтобы мне прямо на душе потеплело, но улыбка проползла.
Для задержек сделайте отдельный файл. Нечего им в main делать.
Идея такая - функции декларируются в отдельном хеадере, который потом прицепляете туда, где собираетесь их использовать.
Да да ваш,но я использую таймер Systick из майн.с для задержки. Или пусть будут глобальные переменные и их будет видно и в отдельном файле задержки.
__________________
Глаза боятся,а руки делают.
CERGEI1982 вне форума  
Непрочитано 24.03.2017, 16:13  
shindax
Прописка
 
Регистрация: 04.09.2009
Сообщений: 167
Сказал спасибо: 1
Сказали Спасибо 35 раз(а) в 25 сообщении(ях)
shindax на пути к лучшему
По умолчанию Re: Функция из main.c,вызов из подключенного файла

Сообщение от Easyrider83 Посмотреть сообщение
...функции декларируются в отдельном хеадере, который потом прицепляете...
IMHO, ты забыл добавить, что с-файл с определением функции нужно подключить к проекту.
shindax вне форума  
Непрочитано 24.03.2017, 17:19  
dgrishin
Почётный гражданин KAZUS.RU
 
Регистрация: 12.02.2013
Сообщений: 1,047
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
dgrishin на пути к лучшему
По умолчанию Re: Функция из main.c,вызов из подключенного файла

В main.h надо добавить объявление функции

void delay_us(uint32_t nTime);

Вам же компилятор об этом чёрным по белому говорит.
dgrishin вне форума  
Непрочитано 24.03.2017, 18:03  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: Функция из main.c,вызов из подключенного файла

Может так?
Ладно связи из майн подключаем другие файлы понимаю,но подключать майн в другой файл как то некорректно мне кажется. Или я запутался уже немного
Миниатюры:
Нажмите на изображение для увеличения
Название: 2017-03-24_22-03-16.png
Просмотров: 0
Размер:	50.7 Кб
ID:	112204  
__________________
Глаза боятся,а руки делают.
CERGEI1982 вне форума  
Непрочитано 24.03.2017, 18:12  
dgrishin
Почётный гражданин KAZUS.RU
 
Регистрация: 12.02.2013
Сообщений: 1,047
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
dgrishin на пути к лучшему
По умолчанию Re: Функция из main.c,вызов из подключенного файла

Переменная вызова функции улучшает читабельность - её имя может быть любым допустимым.
Можно обойтись и без #include main.h в других файлах. Сделайте в них объявление см. ниже.

extern void delay_us(uint32_t nTime);

Последний раз редактировалось dgrishin; 24.03.2017 в 18:17.
dgrishin вне форума  
Непрочитано 24.03.2017, 18:23  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: Функция из main.c,вызов из подключенного файла

Ага спасибо,вспомнил про extern .
Шпаргалка же у меня есть.
Вложения:
Тип файла: pdf c_modules.pdf (112.5 Кб, 0 просмотров)
__________________
Глаза боятся,а руки делают.
CERGEI1982 вне форума  
Сказали "Спасибо" CERGEI1982
majorka65 (24.03.2017)
Непрочитано 25.03.2017, 12:09  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Функция из main.c,вызов из подключенного файла

Сообщение от CERGEI1982 Посмотреть сообщение
В майн определяю функцию delay_us(void),которая работает от прерываний таймера в майн файле и пытаюсь вызывать в подключенном файле.
Всем привет.
CERGEI, у меня, конечно, опыта мало и я любитель а не программист, но намой взгляд, у Вас в коде есть много лишнего, а кое-чего и не хватает. Сразу насчет лишнего. Не надо включать в каждый файл .с какие либо файлы кроме main.h. В соответствующие хидеры файлов .с не надо включать ничего, только макроопределения и прототипы тех функций, которые находятся в файле .с данного хидера, а в хидере main.h должны быть включены вначале все стандартные хидеры а потом все Ваши хидеры. Причем, если один хидер использует функции другого, то он должен быть расположен ниже другого. При такой структуре проекта я даже не использую #ifndef - #endif. Для добавления нового модуля достаточно включить в файл .с Вашего модуля main.h, а в main.h хидер Вашего модуля и все.
А теперь насчет вызова вашего delay. Ваша функция определена после главной программы, поэтому надо определить прототип в вашем хидере main.h, а так она у вас пытается вызваться предварительно необъявленной. Вернее объявлена неявно, о чем говорится в Вашем вонинге.

PS. И еще непонятка. В вопросе Вы пишете, что определяете функцию delay_us(void), но насамом деле она у Вас принимает параметр.
Кстати, обычно в больших проектах я не определяю ни каких функций в main.c а вместо main.c я делаю хидер mn.h и включаю его во все файлы .с в том числе и в main.c

Последний раз редактировалось МВА; 25.03.2017 в 13:41.
МВА вне форума  
Непрочитано 25.03.2017, 15:22  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: Функция из main.c,вызов из подключенного файла

Сообщение от Easyrider83 Посмотреть сообщение
Какой знакомый код))) Не то, чтобы мне прямо на душе потеплело, но улыбка проползла.
Для задержек сделайте отдельный файл. Нечего им в main делать.
Идея такая - функции декларируются в отдельном хеадере, который потом прицепляете туда, где собираетесь их использовать.
Интересно,а как вы задержку делали. Если делать через Systick в 1 us,то при частоте тактирования 72 Мгц (13 нС) почти живем в прерывании Systick. Сделал Systick 10 us.

Сообщение от МВА Посмотреть сообщение
Всем привет.
CERGEI, у меня, конечно, опыта мало и я любитель а не программист, но намой взгляд, у Вас в коде есть много лишнего, а кое-чего и не хватает. Сразу насчет лишнего. Не надо включать в каждый файл .с какие либо файлы кроме main.h.
Прочитайте шпаргалку которую выложил выше.Но каждый пишет так как ему удобно.
__________________
Глаза боятся,а руки делают.

Последний раз редактировалось CERGEI1982; 25.03.2017 в 15:40.
CERGEI1982 вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ускорить компьютер 7Fantomas7 Ремонт оргтехники 111 08.08.2018 05:27
Книги dosikus Делимся опытом 11242 29.12.2015 23:45
FatFS - изменить размер файла? whoim Embedd С 20 28.01.2013 14:35
scmRTOS функция Sleep() alberio Микроконтроллеры, АЦП, память и т.д 2 04.07.2011 12:15
Объясните формат HEX файла PIC saphyr Микроконтроллеры, АЦП, память и т.д 5 15.02.2009 08:47


Часовой пояс GMT +4, время: 23:04.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot