Version Compilable : Orchestration de tous les éléments faite (TAF -> Tester)
This commit is contained in:
parent
73b655d977
commit
fd12f4c92b
12 changed files with 216 additions and 96 deletions
|
@ -344,7 +344,7 @@
|
|||
<Type>0</Type>
|
||||
<LineNumber>48</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>134218244</Address>
|
||||
<Address>134219720</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
|
@ -550,6 +550,18 @@
|
|||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>9</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Src\string.c</PathWithFileName>
|
||||
<FilenameWithoutPath>string.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
|
@ -560,7 +572,7 @@
|
|||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>9</FileNumber>
|
||||
<FileNumber>10</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -572,7 +584,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>10</FileNumber>
|
||||
<FileNumber>11</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -584,7 +596,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>11</FileNumber>
|
||||
<FileNumber>12</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -596,7 +608,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>12</FileNumber>
|
||||
<FileNumber>13</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -608,7 +620,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>13</FileNumber>
|
||||
<FileNumber>14</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -636,7 +648,7 @@
|
|||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>14</FileNumber>
|
||||
<FileNumber>15</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -656,7 +668,7 @@
|
|||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>15</FileNumber>
|
||||
<FileNumber>16</FileNumber>
|
||||
<FileType>2</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
|
|
@ -427,6 +427,11 @@
|
|||
<FileType>1</FileType>
|
||||
<FilePath>..\Src\Securite.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>string.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Src\string.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
|
@ -908,6 +913,11 @@
|
|||
<FileType>1</FileType>
|
||||
<FilePath>..\Src\Securite.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>string.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Src\string.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
|
|
|
@ -93,6 +93,10 @@ char * AllureToString(int alpha) {
|
|||
}
|
||||
}
|
||||
|
||||
int GirouetteInitialisee(void) {
|
||||
return initialized;
|
||||
}
|
||||
|
||||
void EXTI9_5_IRQHandler(void) {
|
||||
LL_TIM_SetCounter(TIM3, 0);
|
||||
initialized = 1;
|
||||
|
|
|
@ -38,4 +38,6 @@ int RecupAllure(void);
|
|||
*/
|
||||
char * AllureToString(int alpha);
|
||||
|
||||
int GirouetteInitialisee(void);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -99,14 +99,14 @@ int RecupNiveauBatterie(void){
|
|||
* @param un entier representant le niveau de batterie en pourcentage
|
||||
* @retval
|
||||
*/
|
||||
void CalculDangerNiveauBatterie(int niveau){
|
||||
int CalculerDangerNiveauBatterie(int niveau){
|
||||
if ( niveau <= Seuil)
|
||||
{
|
||||
drapeauDangerBatterie = 1;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
drapeauDangerBatterie = 0 ;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -117,15 +117,14 @@ void CalculDangerNiveauBatterie(int niveau){
|
|||
* @param un entier representant l angle de rouli
|
||||
* @retval NONE
|
||||
*/
|
||||
void CalculerDangerChavirement(int gamma){
|
||||
int CalculerDangerChavirement(int gamma){
|
||||
if ( gamma >= SeuilAngle)
|
||||
{
|
||||
drapeauDangerRouli = 1;
|
||||
TendreVoile(90); //On lache les voiles si danger de chavirement
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
drapeauDangerRouli = 0 ;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* @param
|
||||
* @retval
|
||||
*/
|
||||
void CalculerDangerChavirement(int gamma);
|
||||
int CalculerDangerChavirement(int gamma);
|
||||
|
||||
/**
|
||||
* @brief
|
||||
|
@ -40,6 +40,6 @@ void ConfSecurite(void);
|
|||
* @param
|
||||
* @retval
|
||||
*/
|
||||
void CalculDangerNiveauBatterie(int niveau);
|
||||
int CalculerDangerNiveauBatterie(int niveau);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -6,8 +6,38 @@
|
|||
#include "stm32f1xx_ll_system.h" // utile dans la fonction SystemClock_Config
|
||||
#include "Allure.h"
|
||||
#include "Voile.h"
|
||||
#include "string.h"
|
||||
|
||||
int drapeauTransmission = 1;
|
||||
#define TAILLE_MESSAGE_MAX 100
|
||||
|
||||
// Structure pour gérer la transmission du message
|
||||
struct t_transmission {
|
||||
char message[TAILLE_MESSAGE_MAX];// Le message lui même
|
||||
int position;// La position du caractere a envoyer
|
||||
int taille_message; //On peut envoyer des messages de tailles variables, il faut donc spécifier la taille
|
||||
char envoyer;// Booléen utilisé comme flag -> vrai on envoie, faux on fait rien
|
||||
char exceptionnel; //Booléen utilisé comme flag -> vrai on envoie un message excep donc, on ne fait pas l'envoi regulier
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Initialise une structure t_transmission.
|
||||
* @note Structure initialisée : (message -> 00:00:00:, end_of_message -> 0x0D, position -> 0, first_appel -> 1)
|
||||
* @param @ de la structure a initialiser
|
||||
* @retval None
|
||||
*/
|
||||
void init_t_transmission(struct t_transmission * transmission) {
|
||||
int i;
|
||||
for (i=0; i<TAILLE_MESSAGE_MAX; i++) {
|
||||
transmission->message[i] = '0';
|
||||
}
|
||||
transmission->message[TAILLE_MESSAGE_MAX - 1] = '\0';
|
||||
transmission->position = 0;
|
||||
transmission->taille_message = 0;
|
||||
transmission->envoyer = 0;
|
||||
transmission->exceptionnel = 0;
|
||||
}
|
||||
|
||||
static struct t_transmission transmission;
|
||||
|
||||
void ConfTransmission(){
|
||||
|
||||
|
@ -22,11 +52,46 @@ void ConfTransmission(){
|
|||
|
||||
LL_GPIO_SetPinMode(GPIOA,LL_GPIO_PIN_11,LL_GPIO_MODE_OUTPUT);
|
||||
LL_GPIO_SetPinOutputType(GPIOA,LL_GPIO_PIN_11,LL_GPIO_OUTPUT_PUSHPULL);
|
||||
|
||||
init_t_transmission(&transmission);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void EnvoiRegulier(char * Allure, char * tension){
|
||||
|
||||
LL_GPIO_SetOutputPin(GPIOA,LL_GPIO_PIN_11);
|
||||
if (!transmission.exceptionnel) {
|
||||
/* Message de la forme suivante :
|
||||
_____________________________
|
||||
Allure actuelle : xxxxxxxxxxx
|
||||
Tension des voiles : xxxxxxxx
|
||||
_____________________________*/
|
||||
|
||||
static char promptligne1[] = "Allure actuelle : ";
|
||||
static int promptligne1size = sizeof(promptligne1);
|
||||
static char promptligne2[] = "Tension des voiles : ";
|
||||
static int promptligne2size = sizeof(promptligne2);
|
||||
static char rc[] = "\n";
|
||||
static int rcsize = sizeof(rc);
|
||||
|
||||
transmission.message[0] = '\0';
|
||||
int current_size = 1;
|
||||
|
||||
current_size = Concatenate(promptligne1, transmission.message, promptligne1size, current_size, TAILLE_MESSAGE_MAX);
|
||||
current_size = Concatenate(Allure, transmission.message, sizeof(Allure), current_size, TAILLE_MESSAGE_MAX);
|
||||
current_size = Concatenate(rc, transmission.message, rcsize, current_size, TAILLE_MESSAGE_MAX);
|
||||
current_size = Concatenate(promptligne2, transmission.message, promptligne2size, current_size, TAILLE_MESSAGE_MAX);
|
||||
current_size = Concatenate(tension, transmission.message, sizeof(tension), current_size, TAILLE_MESSAGE_MAX);
|
||||
current_size = Concatenate(rc, transmission.message, rcsize, current_size, TAILLE_MESSAGE_MAX);
|
||||
current_size = Concatenate(rc, transmission.message, rcsize, current_size, TAILLE_MESSAGE_MAX);
|
||||
|
||||
transmission.envoyer = 1;
|
||||
transmission.position = 0;
|
||||
transmission.taille_message = current_size;
|
||||
}
|
||||
}
|
||||
|
||||
/*LL_GPIO_SetOutputPin(GPIOA,LL_GPIO_PIN_11);
|
||||
int tailleAllure = sizeof(Allure);
|
||||
int tailleTension = 8; //ATTENTION TAILLE
|
||||
int index = 0;
|
||||
|
@ -44,11 +109,41 @@ void EnvoiRegulier(char * Allure, char * tension){
|
|||
}
|
||||
}
|
||||
LL_GPIO_ResetOutputPin(GPIOA,LL_GPIO_PIN_11);
|
||||
}
|
||||
}*/
|
||||
|
||||
|
||||
|
||||
void EnvoiExceptionnel(char * msgAlarme){
|
||||
|
||||
LL_GPIO_SetOutputPin(GPIOA,LL_GPIO_PIN_11);
|
||||
/* Message de la forme suivante :
|
||||
_____________________________
|
||||
Allure actuelle : xxxxxxxxxxx
|
||||
Tension des voiles : xxxxxxxx
|
||||
_____________________________*/
|
||||
|
||||
static char prompt[] = "WARNING : ";
|
||||
static int promptsize = sizeof(prompt);
|
||||
static char rc[] = "\n";
|
||||
static int rcsize = sizeof(rc);
|
||||
|
||||
transmission.message[0] = '\0';
|
||||
int current_size = 1;
|
||||
|
||||
current_size = Concatenate(rc, transmission.message, rcsize, current_size, TAILLE_MESSAGE_MAX);
|
||||
current_size = Concatenate(rc, transmission.message, rcsize, current_size, TAILLE_MESSAGE_MAX);
|
||||
current_size = Concatenate(prompt, transmission.message, promptsize, current_size, TAILLE_MESSAGE_MAX);
|
||||
current_size = Concatenate(msgAlarme, transmission.message, sizeof(msgAlarme), current_size, TAILLE_MESSAGE_MAX);
|
||||
current_size = Concatenate(rc, transmission.message, rcsize, current_size, TAILLE_MESSAGE_MAX);
|
||||
current_size = Concatenate(rc, transmission.message, rcsize, current_size, TAILLE_MESSAGE_MAX);
|
||||
|
||||
transmission.envoyer = 1;
|
||||
transmission.position = 0;
|
||||
transmission.taille_message = current_size;
|
||||
transmission.exceptionnel = 1;
|
||||
|
||||
}
|
||||
|
||||
/*LL_GPIO_SetOutputPin(GPIOA,LL_GPIO_PIN_11);
|
||||
int tailleMessage = sizeof(msgAlarme);
|
||||
int index = 0;
|
||||
while(index < tailleMessage){
|
||||
|
@ -56,6 +151,20 @@ void EnvoiExceptionnel(char * msgAlarme){
|
|||
LL_USART_TransmitData8(USART1, (uint8_t) msgAlarme[index]); //On envoie le message (8 bits)
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
LL_GPIO_ResetOutputPin(GPIOA,LL_GPIO_PIN_11);
|
||||
}*/
|
||||
|
||||
void EnvoyerCaractere(void) {
|
||||
if (transmission.envoyer) {
|
||||
if (LL_USART_IsActiveFlag_TXE(USART1)) {//On regarde si le flag de transmission terminée est actif
|
||||
if (transmission.position < transmission.taille_message) {
|
||||
LL_USART_TransmitData8(USART1, (uint8_t)(transmission.message[transmission.position]));
|
||||
transmission.position += 1;
|
||||
} else {
|
||||
transmission.envoyer = 0;
|
||||
transmission.exceptionnel = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,8 @@ void EnvoiRegulier(char * Allure, char * tension);
|
|||
|
||||
void EnvoiExceptionnel(char * msgAlarme);
|
||||
|
||||
void EnvoyerCaractere(void);
|
||||
|
||||
void ConfTransmission(void);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
#include "Voile.h"
|
||||
#include "stm32f1xx_ll_gpio.h"
|
||||
#include "stm32f1xx_ll_rcc.h" // utile dans la fonction SystemClock_Config
|
||||
#include "stm32f1xx_ll_utils.h" // utile dans la fonction SystemClock_Config
|
||||
#include "stm32f1xx_ll_system.h" // utile dans la fonction SystemClock_Config
|
||||
#include "stm32f1xx_ll_tim.h"
|
||||
#include "stm32f1xx_ll_bus.h"
|
||||
#include "maths.h" //Remplacer par maths.h quand on va tout faire marcher.
|
||||
|
|
108
Src/Voilier.c
108
Src/Voilier.c
|
@ -11,30 +11,12 @@
|
|||
|
||||
void SystemClock_Config(void);
|
||||
|
||||
extern int drapeauRecupSecurite; // Flag qui est mis à 1 toute les 10 sec pour recuperer niveau batterie/rouli et envoi régulier
|
||||
extern int drapeauDangerBatterie; //Flag qui est mis à 1 toute les 10 sec si batterie faible --> envoie message alarme
|
||||
extern int drapeauDangerRouli; //Flag qui est mis à 1 toute les 10 sec si rouli pas bon --> envoie message alarme
|
||||
extern int drapeauTransmission;
|
||||
|
||||
void ConfSysTick(){
|
||||
NVIC_EnableIRQ(SysTick_IRQn);
|
||||
void ConfSysTick(void){
|
||||
SysTick_Config(7200000);
|
||||
}
|
||||
|
||||
void SysTick_Handler(void) { /* SysTick interrupt Handler. */
|
||||
static int msTicks = 0;
|
||||
|
||||
msTicks++;
|
||||
|
||||
if (msTicks % 30 == 0){
|
||||
drapeauTransmission = 1;
|
||||
}
|
||||
|
||||
if (msTicks % 90 == 0) {
|
||||
drapeauRecupSecurite = 1;
|
||||
msTicks = 0;
|
||||
}
|
||||
|
||||
void SysTickEnableIT(void) {
|
||||
NVIC_EnableIRQ(SysTick_IRQn);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -45,21 +27,16 @@ void SysTick_Handler(void) { /* SysTick interrupt
|
|||
* @retval None
|
||||
*/
|
||||
void Setup(){
|
||||
|
||||
ConfSecurite();
|
||||
ConfAllure();
|
||||
ConfVoile();
|
||||
ConfGouvernail();
|
||||
ConfTransmission();
|
||||
ConfSysTick();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
//on utilise EnvoiRegulier de Transmission
|
||||
//TODO : r<>cuperer les valeurs des params de EnvoiRegulier
|
||||
//Interruption toute les 3s via un Timer qui d<>clenche cette fonction qui permet d'envoyer ce qu'il faut
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* @note
|
||||
|
@ -67,33 +44,45 @@ void Setup(){
|
|||
* @retval
|
||||
*/
|
||||
void Envoi3s(){
|
||||
|
||||
EnvoiRegulier(AllureToString(RecupAllure()), TensionVoileToString(RecupTensionVoile()));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief tache qui va fonctionner en fond qui gere l'orientation
|
||||
des voiles, le gouvernail et aussi le systeme anti-chavirement
|
||||
* @note relacher les voiles <=> tendre les voiles avec un angle <EFBFBD> 90<EFBFBD>
|
||||
* @note Le temps d'exécution de cette tache a été mesuré à environ 3.14ms,
|
||||
on peut donc largement la lancer toutes les 100ms en interruption sans risque de trop mobiliser le CPU
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void Background(){
|
||||
void Task100ms(){
|
||||
//Voiles
|
||||
int allure = RecupAllure(); //on recupere l'allulre via la girouette
|
||||
int tensionVoile = CalculerTension(allure); //grace <20> l'allure on peut calculer la tension <20> appliquer sur la voile
|
||||
TendreVoile(CalculerTension(RecupAllure())); //on tend la voile gr<67>ce <20> la tension obtenue
|
||||
TendreVoile(CalculerTension(RecupAllure())); //on tend la voile grace à la tension obtenue a partir du calcul et de l'allure lue
|
||||
|
||||
//Gouvernail
|
||||
int commande = LireTelecommande(); //on lit la valeur renvoy<6F>e par la t<>l<EFBFBD>commande
|
||||
CommanderMoteur(commande); //On commande le moteur pour aller <20> la vitesse voulue
|
||||
CommanderMoteur(LireTelecommande()); //On commande le moteur pour aller à la vitesse lue a la télécommande
|
||||
|
||||
//Anti-Chavirement
|
||||
/*int rouli = RecupRouli();
|
||||
int danger = CalculerDanger(rouli);//renvoi boolean : int <20> 0 si faux et 1 si vrai
|
||||
if(danger){
|
||||
if(CalculerDangerChavirement(RecupRouli())){//renvoi boolean : int à 0 si faux et 1 si vrai
|
||||
TendreVoile(90); //si il y a danger on relache les voiles (relacher les voiles = les mettre <20> 90)
|
||||
}*/
|
||||
EnvoiExceptionnel("Risque de chavirement, voiles choquées");//Et on prévient l'utilisateur
|
||||
}
|
||||
|
||||
//Anti-Chavirement
|
||||
if(CalculerDangerNiveauBatterie(RecupNiveauBatterie())){//renvoi boolean : int à 0 si faux et 1 si vrai
|
||||
EnvoiExceptionnel("Batterie faible");//Et on prévient l'utilisateur
|
||||
}
|
||||
}
|
||||
|
||||
void SysTick_Handler(void) { /* SysTick interrupt Handler. */
|
||||
static int compteur = 0;
|
||||
compteur++;
|
||||
if (compteur == 30) {
|
||||
Envoi3s();
|
||||
compteur = 0;
|
||||
} else {
|
||||
Task100ms();
|
||||
}
|
||||
}
|
||||
|
||||
int main(){
|
||||
|
@ -101,38 +90,17 @@ int main(){
|
|||
SystemClock_Config();
|
||||
|
||||
Setup();
|
||||
|
||||
|
||||
EnvoiExceptionnel("Veuillez faire tourner la girouette SVP.");
|
||||
|
||||
while(!GirouetteInitialisee()) {
|
||||
EnvoyerCaractere();
|
||||
}
|
||||
|
||||
SysTickEnableIT();
|
||||
|
||||
while(1){
|
||||
int level ;
|
||||
int rouli;
|
||||
/* Envoi message toute les 3 sec sur l'Allure et la tension voile */
|
||||
if (drapeauTransmission){
|
||||
EnvoiRegulier(AllureToString(RecupAllure()), TensionVoileToString(RecupTensionVoile()));
|
||||
drapeauTransmission = 0;
|
||||
}
|
||||
|
||||
/* Recuperation toute les 10 sec niveau batterie et angle chavirement, puis calcul des dangers */
|
||||
if (drapeauRecupSecurite){
|
||||
level = RecupNiveauBatterie();
|
||||
CalculDangerNiveauBatterie( level );
|
||||
rouli = RecupRouli();
|
||||
CalculerDangerChavirement(rouli);
|
||||
drapeauRecupSecurite = 0;
|
||||
}
|
||||
|
||||
/*Si batterie faible après recup (toute les 10 sec), envoi alerte batterie faible */
|
||||
if (drapeauDangerBatterie){
|
||||
char * msgBatterie = "Batterie faible";
|
||||
EnvoiExceptionnel(msgBatterie);
|
||||
drapeauDangerBatterie = 0;
|
||||
}
|
||||
|
||||
/*Si angle chavirement pas bon après recup (toute les 10 sec), envoi alerte chavirement */
|
||||
if (drapeauDangerRouli){
|
||||
char * msgRouli = "Bateau chavire !";
|
||||
EnvoiExceptionnel(msgRouli);
|
||||
drapeauDangerRouli = 0;
|
||||
}
|
||||
EnvoyerCaractere();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
11
Src/string.c
Normal file
11
Src/string.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
int Concatenate(char * chaine1, char * chaine2, int sizechaine1, int sizechaine2, int sizemax) {
|
||||
if ((sizechaine1 + sizechaine2 - 1) <= sizemax) {
|
||||
int j;
|
||||
for (j=0; j < sizechaine1; j++) {
|
||||
chaine2[(sizechaine2 - 1 )+ j] = chaine1[j];
|
||||
}
|
||||
return sizechaine1 + sizechaine2 - 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
6
Src/string.h
Normal file
6
Src/string.h
Normal file
|
@ -0,0 +1,6 @@
|
|||
#ifndef STRING_H
|
||||
#define STRING_H
|
||||
|
||||
int Concatenate(char * chaine1, char * chaine2, int sizechaine1, int sizechaine2, int sizemax);
|
||||
|
||||
#endif
|
Loading…
Reference in a new issue