π
<-
Chat plein-écran
[^]

La NumWorks réinventée avec la N0110 - rentrée 2019

Re: La NumWorks réinventée avec la N0110 - rentrée 2019

Unread postby parisse » 14 Aug 2019, 08:20

Un point sur le projet delta (= epsilon + giac sur Numworks N110)

Etat actuel: le prototype du simulateur est fonctionnel (qualite version alpha). N'ayant pas de N110, je ne peux pas tester sur calculatrice (je ne peux que tester la compilation avec le cross-compiler ARM).
Les commandes Giac/Xcas sont utilisables depuis l'app Calculs. Pour le moment, il faut taper les commandes Xcas en toutes lettres. On peut utiliser les templates de la calculatrice (fraction, integrale, somme, matrices). Pour stocker une valeur dans une variable, utiliser =, par exemple a=2 ou a=ranm(2,2).
Remarque: comme epsilon/poincare n'accepte pas les fonctions utilisateur ayant plus d'un argument, j'ai mis en place un workaround dans giac pour transformer de matrice 1 ligne vers liste des arguments (et aussi autorise les fonctions a plus d'un argument dans le parseur de poincare). Cela apparait dans l'historique des calculs avec des crochets qu'il faut juste ignorer. Le seul cas vraiment genant pour le lycee me semble etre la fonction limit qui meriterait un template.

=================
Compilation giac
=================
Recuperer https://www-fourier.ujf-grenoble.fr/~pa ... stable.tgz
Compilation de giac pour le simulateur:
Code: Select all
export CXXFLAGS='-DNUMWORKS -g'
./configure --prefix=/usr
make
sudo make install


Compilation pour la calculatrice, d'apres
https://zardam.github.io/post/numworks-giac/
Installer libtommath: voir lien ci-dessus
Pour giac: dans le repertoire src:
Code: Select all
cp config.h.numworks config.h
make -f Makefile.numworks

Remarques : on peut gagner de la place en rajoutant -DNO_TEMPLATE_MULTGCD dans les flags de compilation de Makefile.numworks, peut-etre faut-il le rajouter dans first.h
Je rajoute aussi -DNO_RTTI pour diminuer un peu les problemes de linkage.
J'ai du supprimer la commande arm-none-eabi-ranlib par rapport a la version de zardam, sinon libgiac.a est considere comme dans un format inconnu.

==============
Compilation epsilon
==============
Code: Select all
# faire make V=1 pour voir les details

# make PLATFORM=emscripten

# simulateur:
make PLATFORM=simulator clean
make PLATFORM=simulator DEBUG=1
./emu (a linker build/simulator/epsilon.elf)

# calculatrice:
make clean
make
# N100
# make epsilon_flash
# flashage calculatrice N110
make EPSILON_DEVICE_BENCH=0 EPSILON_USB_DFU_XIP=0 EPSILON_ONBOARDING_APP=1 EPSILON_BOOT_PROMPT=update build/device/n0110/epsilon_two_binaries -j
sudo dfu-util -D build/device/n0110/epsilon.internal.bin -s 0x08000000
sudo dfu-util -D build/device/n0110/epsilon.external.bin -s 0x90000000


================
Modifications du source d'epsilon pour linker avec giac:
================
definitions des flags C++ dans scripts/default.mak

1/ scripts/config.mak: ajouter
Code: Select all
# giac
ifeq ($(PLATFORM),device)
SFLAGS += -DGIAC_NUMWORKS
LDFLAGS += -L../giac-1.5.0/src -L../libtommath-0.39 -lgiac -ltommath /usr/lib/arm-none-eabi/newlib/thumb/v7e-m/fpv4-sp/hard/libstdc++_nano.a /usr/lib/arm-none-eabi/newlib/thumb/v7e-m/fpv4-sp/hard/libc_nano.a /usr/lib/gcc/arm-none-eabi/7.3.1/thumb/v7e-m/fpv4-sp/hard/libgcc.a /usr/lib/arm-none-eabi/newlib/thumb/v7e-m/fpv4-sp/hard/libnosys.a
endif

ifeq ($(PLATFORM),emscripten)
SFLAGS += -DGIAC_NUMWORKS
LDFLAGS += -O3 -v -s TOTAL_MEMORY=1GB -s LEGACY_GL_EMULATION=1 -s GL_UNSAFE_OPTS=0 --memory-init-file 0 -s ASSERTIONS=1 -s ERROR_ON_UNDEFINED_SYMBOLS=0 -L/home/parisse/emgiac/giac  -lgiac -lpari -lmpfi -lmpfr -lgmp -lglpk --js-library /home/parisse/emgiac/giac/time.js
endif

ifeq ($(PLATFORM),simulator)
SFLAGS += -DGIAC_NUMWORKS
LDFLAGS += -lgiac
endif

*** LDFLAGS a modifier pour la compilation calculatrice ***

2/ apps/calculation:
au debut de calculation.cpp (avant namespace ...)
Code: Select all
#ifdef GIAC_NUMWORKS
  extern "C" const char * caseval(const char *);
#endif

plus loin

Code: Select all
void Calculation::setContent(const char * c, Context * context, Expression ansExpression) {
  reset();
#ifdef GIAC_NUMWORKS
  Preferences * preferences = Preferences::sharedPreferences();
  if (preferences->angleUnit() == Preferences::AngleUnit::Radian)
    caseval("angle_radian:=1");
  else
    caseval("angle_radian:=0");
  char buf[1024]="add_autosimplify(";
  strlcpy(&buf[strlen(buf)],c,sizeof(buf)-strlen(buf));
  buf[strlen(buf)+1]=0;
  buf[strlen(buf)]=')';
  const char * out=caseval(buf);
  strlcpy(m_inputText,c,sizeof(m_inputText));
  strlcpy(m_exactOutputText,out,sizeof(m_exactOutputText));
  strlcpy(buf,"evalf(",sizeof(buf));
  strlcpy(&buf[strlen(buf)],out,sizeof(buf)-strlen(buf));
  buf[strlen(out)+7]=0;
  buf[strlen(out)+6]=')';
  out=caseval(buf);
  if (strcmp(out,m_exactOutputText)==0 || (m_exactOutputText[0]=='[' && out[0]!='[')){
    bool undef=false;
    int l=strlen(m_exactOutputText);
    for (int i=0;i<l;++i){
      char ch=m_exactOutputText[i];
      if ( (ch>='a' && ch<='z') || (ch>='A' && ch<='Z')){
   undef=true;
   break;
      }
    }
    strlcpy(m_approximateOutputText,undef?"undef":m_exactOutputText,sizeof(m_approximateOutputText));
  }
  else
    strlcpy(m_approximateOutputText,out,sizeof(m_approximateOutputText));
#else
  {
    Symbol ansSymbol = Symbol::Ans();
    Expression input = Expression::Parse(c).replaceSymbolWithExpression(ansSymbol, ansExpression);
    /* We do not store directly the text enter by the user because we do not want
     * to keep Ans symbol in the calculation store. */
    PoincareHelpers::Serialize(input, m_inputText, sizeof(m_inputText));
  }
  Expression exactOutput;
  Expression approximateOutput;
  PoincareHelpers::ParseAndSimplifyAndApproximate(m_inputText, &exactOutput, &approximateOutput, *context, false);
  PoincareHelpers::Serialize(exactOutput, m_exactOutputText, sizeof(m_exactOutputText));
  PoincareHelpers::Serialize(approximateOutput, m_approximateOutputText, sizeof(m_approximateOutputText));
#endif
}


3/ dans poincare/include/poincare/symbol_abstract.h: constexpr static size_t k_maxNameSize = 8;
a remplacer par 16

4/ dans poincare/src/parsing, parser.cpp, fonction void Parser::parseCustomIdentifier
Code: Select all
  ...
  assert(!parameter.isUninitialized());
#ifdef GIAC_NUMWORKS
  if (parameter.numberOfChildren() == 1)
    parameter = parameter.childAtIndex(0);   
#else
  if (parameter.numberOfChildren() != 1) {
    m_status = Status::Error; // Unexpected number of paramters.
    return;
  }
  parameter = parameter.childAtIndex(0);
#endif
  ...


5/ Pour visualiser qu'on utilise le moteur de calcul de Xcas, on peut par exemple modifier la couleur d'affichage de deg/rad en rouge:
dans apps/title_bar_view.cpp
Code: Select all
TitleBarView::TitleBarView() :
  View(),
  m_titleView(KDFont::SmallFont, I18n::Message::Default, 0.5f, 0.5f, KDColorWhite, Palette::YellowDark), // YellowDark
  m_preferenceView(KDFont::SmallFont, 1.0f, 0.5, KDColorWhite, Palette::Red) // YellowDark
{
  m_examModeIconView.setImage(ImageStore::ExamIcon);
}


6/ pour modifier les menus de la Toolbox, modifier apps/math_toolbox.cpp
les noms doivent etre definis dans apps/shared.universal.i18n ou/et apps/shared.[langue].i18n
par exemple
SimplifyCommandWithArg = "simplify(f)"
SimplifyValue = "simplify expression"
attention, faire clean ou deux fois make sinon les messages sont decales
Last edited by parisse on 16 Aug 2019, 15:20, edited 8 times in total.
User avatar
parisseVIP++
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 65.7%
 
Posts: 1661
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Re: La NumWorks réinventée avec la N0110 - rentrée 2019

Unread postby parisse » 15 Aug 2019, 08:43

Post precedent mis a jour.
User avatar
parisseVIP++
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 65.7%
 
Posts: 1661
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Re: La NumWorks réinventée avec la N0110 - rentrée 2019

Unread postby Adriweb » 16 Aug 2019, 05:39

Ce serait bien de forker le repo Epsilon et committer lesdites modifs, afin que l'on puisse [a]voir les changements directement dans un repo utilisable :D
User avatar
AdriwebAdmin.
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 51%
 
Posts: 12502
Images: 1080
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
Class: (ingénieur)
Twitter: adriweb
GitHub: adriweb

Re: La NumWorks réinventée avec la N0110 - rentrée 2019

Unread postby parisse » 16 Aug 2019, 07:13

Peut-etre, mais je ne sais pas gerer ensuite les modifications concurrentes. Je prefere expliquer les changements que je fais, comme ca quelqu'un (par exemple moi) qui relit le post dans quelques semaines ou mois devrait pouvoir arriver a modifier la version courante de epsilon. Je trouve que c'est plus facile de reperer une fonction dans un fichier que des numeros de lignes en vert ou rouge au milieu de nulle part.
C'est peut-etre aussi une question d'habitude d'outils a utiliser: si quelqu'un veut forker avec mes modifs, je n'y vois pas d'inconvenients.
User avatar
parisseVIP++
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 65.7%
 
Posts: 1661
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Re: La NumWorks réinventée avec la N0110 - rentrée 2019

Unread postby Adriweb » 16 Aug 2019, 07:19

Hmm c'est le principe d'un patch. Git(hub) peut exporter en patch tout autant lisible.
Bref, il faudrait que quelqu'un comme Zardam prenne quelques minutes à faire ça, lui qui a l'expérience avec la compile de toutes les dépendances :D

Avec des services du genre Travis, il pourrait y avoir des builds automatiques, et si ça suit les git rebase, et bien ça sera à jour avec les versions de NumWorks.
User avatar
AdriwebAdmin.
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 51%
 
Posts: 12502
Images: 1080
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
Class: (ingénieur)
Twitter: adriweb
GitHub: adriweb

Re: La NumWorks réinventée avec la N0110 - rentrée 2019

Unread postby parisse » 16 Aug 2019, 08:41

Oui, ca a l'avantage d'etre automatique, ca complete mon post qui est explicatif. Je viens d'ailleurs de l'editer, en y ajoutant comment modifier les menus pour y faire apparaitre de nouvelles commandes. Je vais essayer de faire un menu CAS pour le lycee.
Restera a regler les problemes de licence, pour le moment la licence non commerciale de giac est la GPL qui est incompatible avec la licence d'epsilon. Ca ne pose pas de probleme pour faire du prototypage pour quelques developpeurs interesses, mais ca risque de poser des problemes de redistribution. Sauf si on peut considerer que le firmware de base epsilon est une librairie systeme et giac une application GPL. Mais j'ai le sentiment que pour l'application Calculs ca n'est pas possible car l'utilisation se fait dans l'autre sens. Il faudrait donc soit refaire une app de calcul de zero, soit que Numworks accepte de dual-licenser l'app de calcul sous licence GPL. La 1ere option me semble la meilleure a long terme, mais ca prendra du temps et ca n'a d'interet que si ca suit sur le hardware.
Ce serait donc bien si quelqu'un ayant acces a la nouvelle machine et une ame de developpeur pouvait tester que ca marche (je vais de mon cote tester si ca compile correctement sur ARM).
User avatar
parisseVIP++
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 65.7%
 
Posts: 1661
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Re: La NumWorks réinventée avec la N0110 - rentrée 2019

Unread postby parisse » 16 Aug 2019, 09:11

Je viens de tester, modulo une petite correction pour isalpha (faite dans le post ci-dessus), la compilation fonctionne pour arm, mais pas l'etape de link. Il y a plein de symboles non definis, qui correspondent au fait que la libstdc++ n'est pas presente. Il va falloir attendre que zardam nous explique comment il a fait pour linker, ou bien il va falloir que je compile la ustl pour Numworks et que je configure giac pour l'utiliser.
User avatar
parisseVIP++
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 65.7%
 
Posts: 1661
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Re: La NumWorks réinventée avec la N0110 - rentrée 2019

Unread postby parisse » 16 Aug 2019, 15:20

J'ai progresse, en fait la toolchain ARM contient la newlib et permet d'utiliser la libstdc++, mais il faut l'ajouter explicitement dans les flags de link:
Code: Select all
/usr/lib/arm-none-eabi/newlib/thumb/v7e-m/fpv4-sp/hard/libstdc++_nano.a /usr/lib/arm-none-eabi/newlib/thumb/v7e-m/fpv4-sp/hard/libc_nano.a /usr/lib/gcc/arm-none-eabi/7.3.1/thumb/v7e-m/fpv4-sp/hard/libgcc.a /usr/lib/arm-none-eabi/newlib/thumb/v7e-m/fpv4-sp/hard/libnosys.a

Mais il reste encore 3 symboles indefinis, et la je ne sais pas comment faire
Code: Select all
/usr/lib/gcc/arm-none-eabi/7.3.1/../../../arm-none-eabi/bin/ld: /usr/lib/gcc/arm-none-eabi/7.3.1/thumb/v7e-m/fpv4-sp/hard/libgcc.a(unwind-arm.o): in function `get_eit_entry':
/build/gcc-arm-none-eabi-76K7U5/gcc-arm-none-eabi-7-2018-q2/build/arm-none-eabi/thumb/v7e-m/fpv4-sp/hard/libgcc/../../../../../../../libgcc/unwind-arm-common.inc:275: undefined reference to `__exidx_end'
/usr/lib/gcc/arm-none-eabi/7.3.1/../../../arm-none-eabi/bin/ld: /build/gcc-arm-none-eabi-76K7U5/gcc-arm-none-eabi-7-2018-q2/build/arm-none-eabi/thumb/v7e-m/fpv4-sp/hard/libgcc/../../../../../../../libgcc/unwind-arm-common.inc:275: undefined reference to `__exidx_start'
/usr/lib/gcc/arm-none-eabi/7.3.1/../../../arm-none-eabi/bin/ld: /usr/lib/arm-none-eabi/newlib/thumb/v7e-m/fpv4-sp/hard/libnosys.a(sbrk.o): in function `_sbrk':
/build/newlib-hTUQk9/newlib-3.1.0.20181231/build/arm-none-eabi/thumb/v7e-m/fpv4-sp/hard/libgloss/libnosys/../../../../../../../../libgloss/libnosys/sbrk.c:21: undefined reference to `end'
collect2: error: ld returned 1 exit status
User avatar
parisseVIP++
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 65.7%
 
Posts: 1661
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Re: La NumWorks réinventée avec la N0110 - rentrée 2019

Unread postby parisse » 16 Aug 2019, 16:05

J'ai fini par comprendre que ces symboles manquants doivent etre definis dans le fichier ion/src/device/n0110. J'ai singe le fichier correspondant du port de zardam en ajoutant
Code: Select all
  .ARM.exidx : {
    __exidx_start = .;
     *(.ARM.exidx* .gnu.linkonce.armexidx.*)
    __exidx_end = .;
  } >INTERNAL_FLASH

juste avant la section .data, et ajoute end = _heap_start; dans la section _heap_start. Ensuite ca linke et ca cree 2 fichiers, un de 18K pour la flash interne et un de 5M pour la flash externe.
User avatar
parisseVIP++
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 65.7%
 
Posts: 1661
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Re: La NumWorks réinventée avec la N0110 - rentrée 2019

Unread postby gabmiral » 16 Aug 2019, 18:06

Dans la partie 3, le tableau de performances, je m'interroge sur les performances des TI-83 Premium CE. Pour le modèle Edition Python, ce qui a été testé a été codé en Basic z80/assembleur ou en Python ? Il faudrait spécifier. Aussi, ce serait interessant de mettre la vitesse d’exécution du script Python sur une TI-83 Premium CE normale couplée au module TI-Python
User avatar
gabmiral
Niveau 4: MC (Membre Confirmé)
Niveau 4: MC (Membre Confirmé)
Level up: 43.8%
 
Posts: 3
Joined: 08 Jul 2019, 18:35
Location: Région Hauts-de-France
Gender: Male
Calculator(s):
Class: Seconde Générale
Twitter: gabmiral
GitHub: gabmiral

PreviousNext

Return to News NumWorks

Who is online

Users browsing this forum: No registered users and 2 guests

-
Search
-
Featured topics
Offre TI-Planet/Jarrety pour avoir la TI-83 Premium CE avec son chargeur pour 79,79€ port inclus !
Offre TI-Planet/Jarrety pour avoir la TI-Nspire CX CAS à seulement 130€ TTC port inclus!
Jailbreake ta TI-Nspire avec Ndless et profite des meilleurs jeux et applications !
123
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...

Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety 
-
Stats.
344 utilisateurs:
>334 invités
>5 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)