数码之家

标题: Arduino for C51 正式开源发布(一) 快速启动指南 [打印本页]

作者: huaweiwx    时间: 2019-7-30 09:02
标题: Arduino for C51 正式开源发布(一) 快速启动指南
第一部分:安装及快速启动


    1.已安装arduno IDE,直接至步2,否则在arduino管网上下载最新arduino ide,并安装且能正确运行无误;
    2.在我共享给坛友的百度网盘上下载:read.txt 文件,这是一个包含最新内容的说明文档,如和本文不一致,以该文档为准;阅后下载压缩包:sduino.rar;
    3.打开sduino.rar, 将压缩包中sduino文件夹拖放到 arduino->hardware 文件夹中; 该包含已mcs51 系列 arduino core 和 更新到最新版本的stm8  支持;如有老的stm8 sduino 则先删除旧版本;(按下图操作)
    [attach]320789[/attach]

   4.如已经安装过我EFM32/STM32/LM3S/NUVOTON ARM 版本的坛友可跳过以下 5 部分,直接第6步;否则下载另一个包:tools.rar
   5.tools.rar 包含了stlink/和nulink ice命令行版本,前者用于 stm8,后者用于 n76e003和ML51的上传;由于这些工具是和arm core共享的,因此也需将包中 tools文件夹拖放到 arduino->hardware 文件夹中:
[attach]320791[/attach]

   6.再次运行arduino,应该能看到支持的mcs51系列芯片和stm8芯片的选择菜单;
   7.其它:请关注SDCC 官网:http://sdcc.sourceforge.net/  发布的最新版本,下载后解压,并替换 arduino/hardware/sduino/tools/sdcc 同名全部内容,当前已经是最新版本 build 3.9.0



第二部分:工具菜单选项:


一/二、选择目标板子和芯片:

    1.Board(系列):
[attach]320798[/attach]

    2.Processor(板/处理器) :
[attach]320801[/attach]

      首先选择系列(Board),接着理器(Processor) 中选择对应系列的芯片/板子,如 Nuvoton ML51 系列 / NuMaker_ML51PC 板(芯片)
    当前已支持并加入菜单的芯片系列如下:
          NUVOTON :N76E003
                             ML51PC/D
         STC:             STC8A/F
                                STC12C5A/LE5A
                                STC12C56/54/STC12LE56/54
                                STC15F/L/W
                                STC89CxRC/RD+
          SILICON: C8051Fxxx
          AT     : AT89C51/52
         
      以后还会增加更多的芯片如:
          TI CC1110/2430/2510/2530
          CY7C68XXX
         


三、确定时钟源及频率:

    3.Clock source(时钟源):
    4.OSC  Speed(晶振频率):
    5.CPU Speed(CPU速度)
[attach]320802[/attach]

     必须选择正确的时钟源和CPU速度,这影响到通信速率如 uart/spi/iic和定时器的准确度,也影响PWM的频率;
      时钟源有内部RC振荡器和外部晶振(如有可选用),如果你板子上的的外部晶振和菜单上显示的不一致,可修改boards.txt 文件;
      STC内部RC频率注意,这个频率值一定要和STC_ISP下载时选择的参数一致,并且点上[在程序区的结束处添加重要测试参数];
     不同板子这些菜单选项项目数和内容有所不同。


四、确定代码的内存模式:

    6.Mode(内存模式): 生成的代码可选以下三个模式之一:small/medium/large;
[attach]320809[/attach]

    补充下知识:内存模式决定了未明确指定存储类型的变量放在何处的缺省存储区域,其中small 都放在idata,medium为pdata(1 页),而large则为xdata,因此当在small模式下编译出现超内存错误的情形可以试试large模式,或将比较大的数组指定使用外部存储器__xdata;



五、需要连接的整数运算库:

    7.Link libs:
[attach]320810[/attach]

        SDCC 对于整数运算,分别提供了int/long/long_long三个库,对应的是 16/32/64 位整数运算,菜单提供了两个选项,即:



         全部   int+long+long_long 支持 全部整数运行,long_long模式既耗费时间也耗费内存资源;
         和部分 int+long, 仅支持 8/16/32 整数运算,因为大多数应用不会用到8字节64整数运算,可节约内存;


六、浮点运算:

   8.float lib:
[attach]320820[/attach]

   SDCC51 将浮点运算放在一个单独的库中,因此,我们用到浮点运算,就需要连接该库;浮点运算和64位整数运算一样耗费较多的机时和内存资源,因此提供该选项;
   64 位 long_long int 整数运算库和float 浮点运算库sdcc都是独立的库,这样我们可以决定是否连接,这取决于我们是否用到了这些运算功能,不使用可节约内存。

七、串口选择:

   9.Serial communication: 许多芯片有多个串口及不同的波特率生成方式,可供选择,同时,应用中如同时需用到定时器,则需要注意不要引起资源冲突;
[attach]320823[/attach]

八、 printf 使用:

   10.printf use
[attach]320824[/attach]
     由于SDCC不支持C++,因此SDUINO采用了一组系列函数来代替arduino的 Serial.print() 和 Serial.println(),我不喜欢这样,增加了对标准printf的支持,相信大家都会用,不用去了解这一组函数 :
     Serial_print_xx() 和 Serial.println_xx(), 直接用C标准库函数printf,或 arduino 方式 Serial.printf;但SDCC并未全部支持全部格式输出,提供了不同的库函数来支持,它们分别是:
     printf/printf_fast/printf_fast_f/printf_small/printf_tiny/来兼顾 需要内存开销
     因此我这里也提供这样的选项,来指定 Serial.printf调用那个函数;auto 选项则根据 8 是否连接浮点库来缺省选择printf_fast_f/printf_fast
     该选项不影响库 printf/printf_fast/printf_fast_f/printf_small/printf_tiny/及 Sduino  Serial_print_xx() 和 Serial_println_xx()的使用;

九、供电电压:

   11.VCC volts:51 芯片有不同的供电电压,这对生成代码没有影响,但如果我们在ADC中采用VCC为参考电压,则需要提供该电压值,这里提供了宏定义 POWER_VCC 的毫伏值来供应用程序使用,缺省值是定义在pins_arduino.h中;
     系统中并未用到该定义,


十、上传更新方法:

   12.upload methed: 51 不同系列的芯片采用不同的flash上传方法,如 Nuvoton可以用 ice 或 串口bootload,而 stc 则用 stcisp/stc_isp(IDE),这部分最最复杂的,因为不同的mcu上传方法接口都不同,而且需要使用命令行版本;因此仍然需要不断完善;
[attach]320834[/attach]




十一、当前选项摘要:

上述选项,都会在底部状态行上显示选项的摘要:
[attach]320846[/attach]

编译一个空的 sketch,如能看到这样的编译信息,则恭喜你,安装启动成功!

下一步,我们就可以点灯试试了,  内容较多,只能边写,边完善,敬请谅解和等待!
百度网盘:https://pan.baidu.com/s/1i48rVNJ


next

作者: estel    时间: 2019-7-30 11:00
这真是太好了,一直对STC很有好感,简单,好用,不贵。

如果用STC8A的画,arduino的标准库有哪些支持的?
作者: ynymwtb    时间: 2019-7-30 14:21
支持楼主,赞一个
作者: flishmen    时间: 2019-7-30 14:23
强烈支持楼主的无私奉献。
作者: acbear    时间: 2019-7-30 14:55
感谢楼主的无私奉献!
作者: 2235880905    时间: 2019-7-30 19:09
来了来了,支持一下
作者: qijifountain    时间: 2019-7-30 20:30
哈,一上论坛就看到好东西:lol:
作者: guoditangmd    时间: 2019-7-30 21:08
强烈支持楼主的无私奉献,希望自己将来也能为这个包贡献点力量。
作者: mayuanfu    时间: 2019-7-30 23:10
好贴,强技术.必须顶上去.楼主是arduino软件顶级高手,有机会必须向您学习.

作者: mayuanfu    时间: 2019-7-31 00:21
好贴,强贴,关注楼主arduino相关的贴子好久,必须顶上去.楼主是这个软件的高手.有机会一定向您学习.
作者: liuhaob    时间: 2019-7-31 09:53
arduino达人,顶一个!
作者: 2545889167    时间: 2019-7-31 16:50
支持楼主无私奉献
作者: 温力口    时间: 2019-7-31 20:20
谢谢分享。一直玩51单片机,都是C语言的,换个玩法看看?
作者: 兔族族长    时间: 2019-7-31 20:24
先围观大佬,求带萌新
作者: kkstun    时间: 2019-7-31 20:57
本帖最后由 kkstun 于 2019-7-31 21:03 编辑

这么厉害。我看还支持N76E003。还支持stc8。
作者: kkstun    时间: 2019-7-31 21:04
不知能否放github上 大家共同研究呢
作者: huaweiwx    时间: 2019-7-31 21:15
kkstun 发表于 2019-7-31 21:04
不知能否放github上 大家共同研究呢

现在是测试阶段,基本排除错误后,会上传到 github.
作者: huaweiwx    时间: 2019-7-31 23:57
本帖最后由 huaweiwx 于 2019-8-1 16:50 编辑

第三部分:引脚编号, arduino for 51 采用格式为 Pa_b,其中 a是端口号,b 是bit位号,如 P0_1

arduino 采用对全部引脚按 序数 1,2,3,....这样的方式,优点是封装端口及bit位,让使用者在应用层面和硬件层作了隔离,应用时可以不管端口和位,但缺点是明显的:
1 需要保存一个数字(脚号)和对应实际端口的对照表,这样既要多开销存储空间,也要多开销查表所需的机器时间,而且对我们学习者来说有时想知道是那个端口和bit还需要查相应的文档,最为致命的是不同的板子对同一个脚还编号是不同的。
2 对于arduino官方板子来说,这样的方法还算可行,已经把这个编号标在板子上了,但对非官方板子来说,这简直是多此一举,毫无意义,因为我们板子上根本没有1,2,3,....,到是有着PA0,PC13这样好记又有具体含义的名称,在51中,通常对于一个具体的引脚我们表示为 Pa.b,a为端口号,b为bit位号, 如:
P0.1  表示 P0端口bit1脚;
在 51 构架中,该脚是可位寻址读写的,因此,头文件中通常对该脚通过类型修饰符sbit进行了定义:
sbit  P01 =  P0^1;  // 规则1   Pab
这里 P01 也可以用其他合法的符号,如我们也可以定义为:
sbit P0_1 = P0^1;  //规则2   Pa_b
这里 a 是端口号,51 构架通常用 0,1,2 数字来表示,而 avr stm等 则用 A,B,C 这样的字母来表示;
       b 是位号 0~7 对应 8位端口的最低位至最高位;
大多数芯片厂给出的头文件是以上述规则1来命名,但也有些厂商采用的是规则2 如 silicon的 C8051 头文件,对于这样的不同规则,在我们这个sduino51 系统中必须统一,否则会造成混乱,因此我采用了规则1 来定义位寻址变量,所以对所有C8051头文件均作了这样的替换(C8051老用户要注意);

现在,在arduino for 51 所有gpio sbit 的脚名称 均统一 用 Pab来表示,51 相对 avr 和 stm8/32来说都要简单,读写访问的是同一个地址, 我们仍然能够用这样的语句来设置该脚的电平高低,如程序中可用:

P01 = 1;    // set P0.1
P01 = 0;    //reset P0.1
而读取电平是
v  = P01; //get P0.1  level

因此 Pab 是系统 sbit类型的变量名称,而arduino脚号则是一个数字序数,因此我们仍需要对此定义,为了好记,我们采用这样的表示:
Pa_b;
对应上面P0.1脚,系统有这样的宏定义:
#define  P0_1    0x01  /*端口号对应的hex 数字,是不是很好记*/
对于每个芯片(板子)都有一个定义文件pins_arduino.h ,位置在 variants对应的文件夹中。
我没有像 官方arduino那样从0开始连续编号,而是用个8位整数类 uint8_t,  其高4位表示端口号 低4位表示位号(由于只有8位,实际只用低3位),显然,这样有以下好处:
1 不需要专门设置个对照表来建立 数字 0, 1,2,3,....所对应的物理引脚了,编程时 我们一眼就能判断出端口和bit位;在程序中我们只要通过:
    pin & 0x0f  屏蔽高4位,就知道是那个bit了;而
    pin >> 4;  取高4位,就是端口号;

2 按这个方案 只要未定义 P0_1 (如STC12C54), 程序编译时 用到这个符号就会发出错误信息,因此我们还可简化非法引脚编号的检查,对51资源不足的芯片上,减少了代码开销是有实际意义的;

上面出现三种格式,分别是用P0.1 / P01  /P0_1 这样的格式来表示,对于初学者来说,也许有点混乱,有必要对此做个小结:
第一个 P0.1  因为对C的变量符号来说,符号中含小数点是非法的;因此这通常只有出现在数据表文档或程序注释中;
第二个 P01   是一个 51 专有的预定义sbit类型变量,实际上代表了该位寻址的地址;
第二个 P0_1  才是arduino系统预定义该引脚的arduino编号(可以是C变量或宏定义),是个8位整数类型(uint8_t)常数;
尽管这三个助记符对我们来说都表示了端口 0 的bit1 位,但系统中只出现后两种,并且含义是不同的:具体在对应在宏/函数中用到它,如果是sfr/sbit类型,就用 P01,而如果需要的是一个数表示arduino脚号,则用P0_1;


第四部份   SDUINO 系统简介:
一、 语言和工具链
  现有所有arduino ide 支持的移植版本均采用了支持 C++ 的工具链如 GCC ,对51这个古老的构架,根本不在GCC 开发者的支持计划中,虽然 IAR 集成环境支持 51 C++代码,但也只是有限支持,我试过,IAR 连接时只能选 c库,如选择 连接 c++库会出现找不倒库文件的错误提示,因此支持有限,更主要的问题是
  a.  IAR 不是免费的;
  b.  IAR 是集成环境,不支持命令行操作;
  上述两点导致我们没有现成的C++工具链来支持 arduino ide 环境;
  因此我们退一步,采用有个专门针对小设备 c 的开源工具链  SDCC ,支持 stm8/mcs 51/ pic/z80,通过一些小技巧集成到arduino ide中;正因为如此,sduino和 arduino由于采用编程语言不同,而导致使用上的差异;

二、 sdcc 和 gcc 及 keil c51 的主要差异:
  sdcc 是个优秀的编译器,支持到最新的ISO C17标准,因此,基本兼容于keil C51,c风格也基本兼容于GCC;但针对目标mcu为51的应用和keil C51仍然有些差异,主要是:

  a.指定不同内存区域的修饰词,sdcc 需加双下划线:                     
            keil          idata                    
                          pdata                    
                          xdata                    
                           code                    
                             bit           

        sdcc                 __idata                           
                         __pdata                          
                            __xdata                                 
                                __code                           
                                __bit                          

  b.修饰词位置:sdcc则需要将修饰词前置
          keil              uint8_t  xdata  val;
          sdcc              xdata  uint8_t  val;
  c.sfr寄存器寻址变量/sbit位寻址变量定义格式不同:
          keil              sfr     P0  = 0x80;
                            sbit    P01 = P0^1;

          sdcc           __sfr   __at(0x80)   P0;
                           __sbit  __at(0x80+1) P01;
  d.中断矢量定义格式不同:
          keil             void name(void)  interrupt vector;
                           void name(void)  interrupt vector   using regnum;
          sdcc            void name(void) __interrupt(vector);
                           void name(void) __interrupt(vector) __using (regnum);
          另外,中断处理代码函数必须在main.c 声明,否则不会被连接!

三、 sdcc 和 arduino 官方采用的gcc差异,这两个编译器针对的目标不同,功能也相差太大不是一个数量级的,因此放在一起比较是不合适的,但如果仅从C角度来看,差异并不大,但gcc支持C++代码,而arduino 核心部分就是用C++写成的,因此这部分在sduino中无法实现或是只能有限部分实现,核心(core)部分主要是:
   1 String 类:    这是通用arduino 字符串支持C++类,sduino不支持,替代方案是用c方法来处理字符串,如用c vprintf 来格式化字符串,用printf来格式化并输出字符串;
   2 Stream/Print:  输入输出IO流控制,不支持,好在对51来说,人机接口和文件处理不是主要的,
   3 HardwareSerial/Serial: 这是串口输出,也是玩单片机最重要的部分,用来观察运行结果或输入指令数据控制单片机运行,但arduino该模块是C++写成的类结构,并且继承了Stream/Print基础类,因此是移植的难点,现在采用部分兼容和替代方案;C++支持同一函数的不同类型和数量的参数,但在C是不合法的;因此原来arduino:
     Serial.print(x,x) 及Serial.println(x,x) 使用了一组函数替代,它们是:
                Serial_print_s
                Serial_print_sn
                Serial_print_i
                Serial_print_u
                Serial_print_ib
                Serial_print_ub
                Serial_print_fd
                和
                Serial_println_s
                Serial_println_sn
                Serial_println_i
                Serial_println_u
                Serial_println_ib
                Serial_println_ub
                Serial_println_fd

        另外干脆直接用c标准输出输入库(stdio)的 printf含数;
        为了便于移植及和其他核心的arduino 应用代码兼容,对Serial 增加了一个运行代码的指针结构,从而使其具有arduino的风格(style),为了不至于耗费过多的资源,仅包含:
        Serial.avalible();
        Serial.read();
        Serial.write(unsigned char);
        Serial.printf(fmt,...);
        其中 Serial.printf(fmt,...)等价于直接调用printf(fmt,...);用来替代arduino Serial.print() 和 Serial.println();
               
    4 arduino 库:
   和内核一样,由于大部分arduino库都是由C++写成,因此基本不能直接使用,但只要不是反复建立在C++类基础上的库,还是可以很方便地移植到sduino,其中libraries有多个这方面的例子;以后我会祥述,并移植一些;

    5 实际上用C语言为SDUINO写成的库,只要不要硬件依赖的,都可以在ARDUINO/gcc下运行,反之则不行!












作者: jdq116    时间: 2019-8-1 15:30
这个必须要支持一下,现在常见的esp系列,STM系列,都可以用arduino,太方便了
作者: zxy882266    时间: 2019-8-1 18:19
楼主超级强大,51用上ARDUINO将会如虎添翼,加大51的用量,对我们软件小白是大大的好事
作者: zxy882266    时间: 2019-8-1 18:59
我的文件已有TOOLS,你提供的文件应该合并吧?如果覆盖了原来的AVR有关的ARDUINO将不能运行吧
作者: huaweiwx    时间: 2019-8-1 20:13
本帖最后由 huaweiwx 于 2019-8-1 20:53 编辑
zxy882266 发表于 2019-8-1 18:59
我的文件已有TOOLS,你提供的文件应该合并吧?如果覆盖了原来的AVR有关的ARDUINO将不能运行吧 ...

只要不覆盖 avr文件夹就不会影响原来的;
这个包tools中 只有一个win文件夹;
没有冲突;

另外,你安装的 arduino版本为 1.6.5 低了点,建议安装 1.8.5 或 以上版本;
作者: autopccopy    时间: 2019-8-1 22:46
支持lZ的“Arduino for 51”! 希望尽快能看到正式版。。。 :)
作者: panqi    时间: 2019-8-2 15:32
厉害了,我滴哥
作者: mayuanfu    时间: 2019-8-2 19:04
请问大侠,我选STM8F003测试时出现bash.exe: warning: could not find /tmp, please create!请问TMP要建在哪个位置?
作者: huaweiwx    时间: 2019-8-2 21:05
mayuanfu 发表于 2019-8-2 19:04
请问大侠,我选STM8F003测试时出现bash.exe: warning: could not find /tmp, please create!请问TMP要建在哪 ...

这是 windows 模拟 linux环境 的 msys系统,bash.exe 会显示这个警告信息,我在百度查过,没找到屏蔽办法或解决方案。但不影响使用。可以忽略这个警告信息。
作者: mayuanfu    时间: 2019-8-3 00:22
感谢您的回复.初学arduino软件.谢谢.
作者: mayuanfu    时间: 2019-8-3 17:55
我用Arduino 1.8.9按楼主的方法测试,新唐的51和STM8系列的编译都通不过,不知是何原因,请帮忙看看.下面是截图
作者: huaweiwx    时间: 2019-8-3 20:42
mayuanfu 发表于 2019-8-3 17:55
我用Arduino 1.8.9按楼主的方法测试,新唐的51和STM8系列的编译都通不过,不知是何原因,请帮忙看看.下面是截 ...

1 用个空文件,选avr mega板子能通过;确认系统无误。
2 看看 51/stm8 能否通过;
3 如系统安装过sduino,请删除,并重新下载我百度共享的最新版本试试;
4 仍有问题,贴上完整的出错页面,最好通过【复制到剪贴板】把编译过程信息全部粘贴到帖子里,我看看能否发现问题。
作者: mayuanfu    时间: 2019-8-3 23:23
感谢大侠的回复,可能是我的基础太差,我把你在老站的帖子全部看了一遍,有些收获.现在用STM32测试是可以用的,可以上传代码到片上.就是8位的还没有搞好.我先学习学习,实在不行图片贴到上在来.麻烦您看看.谢谢.
作者: breezy    时间: 2019-8-4 17:24

支持楼主,赞一个
作者: kindzhon    时间: 2019-8-9 15:43
这个编译出错,好像是不认识目录里的空格。[attach]336114[/attach]

Arduino:1.8.4 (Windows 10), 开发板:"STC15F/L/W, STC15F2K60S2, RC24M, small, default, int+long, none, UART1, auto, stcisp"

bash.exe: warning: could not find /tmp, please create!
G:\Program Files (x86)\Arduino\hardware\sduino/tools/sdcc/bin/sdcc sketch\Blink.ino.cpp preproc\ctags_target_for_gcc_minus_e.cpp re12 -MMD -c -Ddouble=float -D__PROG_TYPES_COMPAT__ --model-small -E -MC -mmcs51 -DSTC15F2K -DF_CPU=24000000L -DHRC=1 -DARDUINO=10804 -DARDUINO_STC15F2K60S2 -DARDUINO_ARCH_MCS51 -DMENU_SERIAL=1 -DPRINT=3 -IG:\Program Files (x86)\Arduino\hardware\sduino\mcs51\cores\STC15 -IG:\Program Files (x86)\Arduino\hardware\sduino\mcs51\variants\STC15 -IC:\Users\xxxxxx\AppData\Local\Temp\arduino_build_852624/sketch -IG:\Program Files (x86)\Arduino\hardware\sduino\mcs51\system/STC15 -IG:\Program Files (x86)\Arduino\hardware\sduino/tools/sdcc/inc -IG:\Program Files (x86)\Arduino\hardware\sduino/tools/sdcc/include/msc51
Mark re12:G:\Program Files (x86)\Arduino\hardware\sduino/tools/sdcc/bin/sdcc -MMD -c -Ddouble=float -D__PROG_TYPES_COMPAT__ --model-small -E -MC -mmcs51 -DSTC15F2K -DF_CPU=24000000L -DHRC=1 -DARDUINO=10804 -DARDUINO_STC15F2K60S2 -DARDUINO_ARCH_MCS51 -DMENU_SERIAL=1 -DPRINT=3 -IG:\Program Files (x86)\Arduino\hardware\sduino\mcs51\cores\STC15 -IG:\Program Files (x86)\Arduino\hardware\sduino\mcs51\variants\STC15 -IC:\Users\xxxxxx\AppData\Local\Temp\arduino_build_852624/sketch -IG:\Program Files (x86)\Arduino\hardware\sduino\mcs51\system/STC15 -IG:\Program Files (x86)\Arduino\hardware\sduino/tools/sdcc/inc -IG:\Program Files (x86)\Arduino\hardware\sduino/tools/sdcc/include/msc51 sketch\Blink.ino.cpp -o preproc\ctags_target_for_gcc_minus_e.cpp
cpp gefunden
'G:\Program' 不是内部或外部命令,也不是可运行的程序

或批处理文件。

exit status 1
为开发板 STC15F/L/W 编译时出错。


作者: huaweiwx    时间: 2019-8-9 16:15
本帖最后由 huaweiwx 于 2019-8-9 16:17 编辑
kindzhon 发表于 2019-8-9 15:43
这个编译出错,好像是不认识目录里的空格。

Arduino:1.8.4 (Windows 10), 开发板:"STC15F/L/W, STC15F2K6 ...

你的ARDUINO安装在 G:\Program Files,  路径带空格,Msys 不支持;

因为我用的系统是win7/笔记本是xp,所以 msys 版本较低(试过高版本Msys xp 不支持),选了这个版本msys,没试过Win7 以上版本;

现在有两个解决方案:
1  将 原来G:\Program Files(x86)\Arduino  整个 文件夹拖放到 你 G:\ , 放在根目录,就没有这样旧版系统的空格非法路径了;
2 不知最新版本Msys 是否支持,可以试试,但除非熟悉系统,否则不建议;
我是安装在根目录的:如图:
[attach]336164[/attach]



作者: kindzhon    时间: 2019-8-9 17:54
整体移动不知道原来的arduino会不会出问题。
作者: huaweiwx    时间: 2019-8-9 18:57
kindzhon 发表于 2019-8-9 17:54
整体移动不知道原来的arduino会不会出问题。

没问题的,不放心的话,可以copy到根目录。
作者: aspirine520    时间: 2019-8-12 08:39
楼主你好 请问无法编译怎么解决
作者: huaweiwx    时间: 2019-8-12 18:00
我估计你的情况和33楼相似,如仍未解决,请贴上出错截图;
作者: 桃源客    时间: 2019-8-15 15:49
51也可以这样玩了?

作者: kindzhon    时间: 2019-8-15 17:27
huaweiwx 发表于 2019-8-9 18:57
没问题的,不放心的话,可以copy到根目录。

移到根目录了,可以运行,但还是出错。这个/tmp应该建在哪儿?G和C盘根目录都建了。
bash.exe: warning: could not find /tmp, please create!
G:\Arduino\hardware\sduino/tools/sdcc/bin/sdar core\core.a core\weak\weak_initVariant.c.o re4 rcs
Mark re4:G:\Arduino\hardware\sduino/tools/sdcc/bin/sdar rcs core\core.a core\weak\weak_initVariant.c.rel
Archiving built core (caching) in: C:\Users\xxxxxx\AppData\Local\Temp\arduino_cache_709742\core\core_sduino_mcs51_stc15_cpu_f2k60s2,osc_speed_f24r,mode_small,vcc_mv_default,intlib_long,floatlib_none,serial_UART1,printf_default,upload_method_stcisp_88aa0ccb6935782b16aabc080cc1b63f.a
bash.exe: warning: could not find /tmp, please create!
--nostdlib -LC:\Users\xxxxxx\AppData\Local\Temp\arduino_build_464371 -LG:\Arduino\hardware\sduino/tools/sdcc/lib/small --code-size 61440 --iram-size 256 --xram-size 2048 --model-small -mmcs51 -DSTC15F2K sketch\Blink.ino.cpp.o core\variant.c.o C:\Users\xxxxxx\AppData\Local\Temp\arduino_build_464371/core\core.a C:\Users\xxxxxx\AppData\Local\Temp\arduino_build_464371/core/main.c.rel -lmcs51 -llibsdcc -llibint -lliblong --out-fmt-ihx -o C:\Users\xxxxxx\AppData\Local\Temp\arduino_build_464371/Blink.ino.hex
bash.exe: warning: could not find /tmp, please create!
   Name             Start    End      Size     Max     
   ---------------- -------- -------- -------- --------
   PAGED EXT. RAM                         0      256   
   EXTERNAL RAM     0x0001   0x0043      67     2048   
   ROM/EPROM/FLASH  0x0000   0x0c67    3176    61440   
项目使用了 0 字节,占用了 (0%) 程序存储空间。最大为 61440 字节。
全局变量使用了0字节的动态内存。
作者: kindzhon    时间: 2019-8-15 17:28
kindzhon 发表于 2019-8-15 17:27
移到根目录了,可以运行,但还是出错。这个/tmp应该建在哪儿?G和C盘根目录都建了。
bash.exe: warning:  ...

这个算是生成了Hex了?我看有8K大,就一个blink。:mad:
作者: huaweiwx    时间: 2019-8-15 21:40
本帖最后由 huaweiwx 于 2019-8-15 21:57 编辑
kindzhon 发表于 2019-8-15 17:28
这个算是生成了Hex了?我看有8K大,就一个blink。

我看了你的编译信息最后几行 :

bash.exe: warning: could not find /tmp, please create!
   Name             Start    End      Size     Max     
   ---------------- -------- -------- -------- --------
   PAGED EXT. RAM                         0      256   
   EXTERNAL RAM     0x0001   0x0043      67     2048   
   ROM/EPROM/FLASH  0x0000   0x0c67    3176    61440   
项目使用了 0 字节,占用了 (0%) 程序存储空间。最大为 61440 字节。
全局变量使用了0字节的动态内存。

我要说明一下:
bash.exe: warning: could not find /tmp, please create!   这是windows下解释执行 linux脚本的批处理脚本的执行文件,会出现这个警告提示,百度上有人问过这个问题,没看到解决方案,可以忽略这个警告信息。
最后两行显示程序空间使用 0 ,ram使用 0 这是arduino集成环境最后处理 xxx.elf 文件取得内存使用情况并统计输出的结果,但我们在51上不支持这样的文件格式,我也不知如果将内存使用情况传给arduino ide,因此最后两行信息也要忽略;
显然不显示内存使用情况是不方便的,因此我生成hex后直接将编译内存使用情况统计文件xxx.mem 摘要显示,这就是中间 5行;显示 4列 开始地址/结束地址/实际使用长度/可使用最大长度
其中   PAGED EXT. RAM      这就是 pdata的使用情况
          EXTERNAL RAM       这就是 xdata的使用情况
          ROM/EPROM/FLASH 这就是code  代码段flash的使用情况
由上述信息可见  使用了 67个字节ram      可用 2k
                                   3176字节的flash 可用  60k
至于执行文件 hex格式是包含地址信息的,文件长度不等于代码长度;    没有直接对应关系。


作者: huaweiwx    时间: 2019-8-15 21:54
kindzhon 发表于 2019-8-15 17:27
移到根目录了,可以运行,但还是出错。这个/tmp应该建在哪儿?G和C盘根目录都建了。
bash.exe: warning:  ...

不能看hex文件的大小;只有3k大小代码(包含了初始化、全部中断矢量);
要看编译的统计信息,显示信息最后第三行 ROM/EPROM/FLASH  使用了从0到0x0c67 共 3176个字节(正好3k)

作者: kindzhon    时间: 2019-8-16 14:17
huaweiwx 发表于 2019-8-15 21:54
不能看hex文件的大小;只有3k大小代码(包含了初始化、全部中断矢量);
要看编译的统计信息,显示信息最 ...

哦,你是说刷进mcu里的大小 也不是hex大小 ?
作者: huaweiwx    时间: 2019-8-16 16:31
kindzhon 发表于 2019-8-16 14:17
哦,你是说刷进mcu里的大小 也不是hex大小 ?

hex 文件(顾名思义16进制文件),包含一段一段的地址信息和代码,都是是用asc 16进制字符(0~F)表示的,因此文件长度和写到内存中的长度是没有对应关系的,取决于分段的数量;
我们知道内存中的一个字节,用16进制asc表示就要两个字,加上地址信息,检查和,结束标志等,至少是hex文件长度是实际内存中的两倍以上;
还有一种格式就是bin格式(顾名思义二进制文件),对大多数单片机来说,代码开始位置也是固定的,因可只分一个段,就直接使用二进制存储格式,这个长度一般情况下就是等于写到内存中的长度;

对于stc 你可以用stc-isp-15xx-v6 打开上述arduino编译的代码文件看看就知道了;
这是我装入一个长度约20k的hex文件例子,执行代码长度是 0x1FB1,8k不到一点:
[attach]346755[/attach]


作者: jpdd521    时间: 2019-8-17 14:30
期待老哥早日出CC2530的:biggrin:
作者: mayuanfu    时间: 2019-8-18 23:24
大侠,记得把STM8的STLINK工具加上.这样就方便多了.


作者: huaweiwx    时间: 2019-8-19 09:03
mayuanfu 发表于 2019-8-18 23:24
大侠,记得把STM8的STLINK工具加上.这样就方便多了.

stm8 就是用的 stlink swin,唯一选项,只是没在菜单显示罢了,你图中显示信息就是stlink上传成功的信息啊!
作者: netbeetle    时间: 2019-8-19 09:29
Arduino 是降低单片机运行效率的最佳利器,能不用就不用吧。
作者: mayuanfu    时间: 2019-8-19 23:49
感谢楼主的回复,我上传成功的图片是用STM32上传时抓的图,STM32菜单上是有STLINK的选项,STM8就没有,软件编译后要用ST VP烧录,对于初学者来说就是不太方便,arduino编译后的文件存在哪个地方都不清楚.如果你有空有兴趣就帮忙在STM8菜单上加STLINK选项.谢谢.

作者: netbeetle    时间: 2019-8-20 11:33
C51已经够垃圾了,再加上Arduino,就等于垃圾的平方。
作者: ynymwtb    时间: 2019-8-20 12:15
netbeetle 发表于 2019-8-20 11:33
C51已经够垃圾了,再加上Arduino,就等于垃圾的平方。

不知你要用在什么地方,应该足够用了
作者: zxq9781    时间: 2019-8-20 20:39

这个必须要支持一下
作者: luxs    时间: 2019-8-21 12:59
感谢大神的分享
作者: huaweiwx    时间: 2019-8-22 11:55
本帖最后由 huaweiwx 于 2019-8-22 11:57 编辑
mayuanfu 发表于 2019-8-19 23:49
感谢楼主的回复,我上传成功的图片是用STM32上传时抓的图,STM32菜单上是有STLINK的选项,STM8就没有,软件编译 ...

确实我疏忽了漏了这部份的安装包。我在github上stm8共享中有安装说明,stm8 下载工具原需要先安装官方包,这样会自动安装在系统 AppData/Local/arduino15/中,现我已经将其移动到hardware\sduino\tools\win\STM8Tools,这样copy 安装就不会出现未找到工具文件的错误,下载工具也由原来的stm8flash 修改为官方的 stvp下载的命令行版本 STVP_CmdLine.exe,相应修改了boards.txt和platform.txt;百度下载我最新版本;

附 2019.8.22  sduino20190822.rar 修订记录:
     1  更正一些错误;
     2  液晶库 LiquidCrystal 1602/2004 现支持全部芯片,可选择 4位/8位并口(parallel),8位端口直接输出(port),i2c/hc595 等多种接口,并统一了接口的协议;(见demo)
     3  stm8 下载工具原需要先安装官方包,并会自动安装在系统 AppData/Local/arduino15/中,现以将其移动到hardware\sduino\tools\win\STM8Tools,这样copy 安装就不会出现 未找到工具文件的错误,下载工具又原来的stm8flash 修改为官方的 stvp下载的命令行版本 STVP_CmdLine.exe,相应修改了boards.txt和platform.txt;
     4 安装时,如有老版本存在,需要先备份和删除sduino整个文件夹;
作者: kindzhon    时间: 2019-8-22 15:02
huaweiwx 发表于 2019-8-16 16:31
hex 文件(顾名思义16进制文件),包含一段一段的地址信息和代码,都是是用asc 16进制字符(0~F)表示的 ...

嗯, 我是和keil这些编译出来的体积比的。51的容量都比较小,如果编译出来的长度太大,那就只能用来学习,而不是实用了。象一个blink,51的正常的代码也就几十字节,就算是现在8K的hex的一半4k,也还是太大了。
作者: mayuanfu    时间: 2019-8-22 22:59
下载了百度盘的更新,安装后没有发现工具栏有更新,是不是哪里操作不对,更新后发现编译出错.

作者: huaweiwx    时间: 2019-8-23 08:56
本帖最后由 huaweiwx 于 2019-8-23 09:00 编辑
mayuanfu 发表于 2019-8-22 22:59
下载了百度盘的更新,安装后没有发现工具栏有更新,是不是哪里操作不对,更新后发现编译出错.
...

谢谢指正!
stm8/system/common/callbackfunc.h 是51包中的,新加入stm8,为了以后两个系统库文件通用;
行167错误,可手动修改删除该行中的关键词 __code ,  __code 是 51 专用,在stm8会出错,也可去我百度共享下载该补丁patch20190823.rar, 解压后覆盖 stm8/system/common/callbackfunc.h 文件即可;
另外菜单没变,因为stm8唯一选用了 stlink作为上传工具,只要stlink 通过 swin 和目标板子连接好,直接点上传(UPload)即可。

作者: firseve    时间: 2019-8-23 10:27
:biggrin: 感谢大神分享,等待分享到github,如果有时间是不是可以考虑稍微写点如何制作开发板扩展的介绍,毕竟人多力量大,还有很多板子能给arduino用,就像不到10块钱的那种收钱用蓝牙音箱改造
作者: fogota    时间: 2019-8-23 11:21
支持大佬,我回去删掉Keil
作者: fogota    时间: 2019-8-23 11:51
kindzhon 发表于 2019-8-22 15:02
嗯, 我是和keil这些编译出来的体积比的。51的容量都比较小,如果编译出来的长度太大,那就只能用来学习 ...

51的容量有几十K,写个几十字节的程序,同样是浪费。只要保证实时运行就足够了。重要的一点是编程在方便,才能写出更多功能的程序,更好的维护。精确的程序,例如用字节码的周期来校准时钟的代码,还是留给写汇编的人。
作者: mayuanfu    时间: 2019-8-23 23:00
感谢楼主的分享,最近对SMT8和N76E003两个芯片感兴趣,但不会写软件.现更新sduino20190822后编译可以通过,但还是上传出错.请有空时帮忙看看是何原因.另新唐的NU-LINK试过是可以用的.
作者: hui223    时间: 2019-8-24 01:08
:smile: 太好了
作者: hui223    时间: 2019-8-24 15:23
嘗試放入Mixly0.999中,結果arduino-1.8.9的IDE可以,但是Mixly不能啓動,能讓Mixly調用Arduino for 51 嗎
作者: eagler8    时间: 2019-8-25 11:34
感谢楼主的无私奉献!
作者: huaweiwx    时间: 2019-8-26 00:12
本帖最后由 huaweiwx 于 2019-8-26 00:31 编辑
mayuanfu 发表于 2019-8-23 23:00
感谢楼主的分享,最近对SMT8和N76E003两个芯片感兴趣,但不会写软件.现更新sduino20190822后编译可以通过,但 ...

谢谢!确是个bug,部分板子没有修改到位,主要是stvp 参数中设备名称需要大写,stm8/boards.txt 已在最新补丁中,请下载。

作者: huaweiwx    时间: 2019-8-26 01:11
hui223 发表于 2019-8-24 15:23
嘗試放入Mixly0.999中,結果arduino-1.8.9的IDE可以,但是Mixly不能啓動,能讓Mixly調用Arduino for 51 嗎 ...

Mixly 图形化界面这个没有试过。
我觉得官方板子可以用这个Mixly 图形化界面,但 51 支持目前没有官方的板子,因此脚号定义也没有按官方的规则来做(如缺省 led 总是定义为 LED_BUITIN 脚号 13);
至于整合到 mixly, 要等以后51 arduino基本完善后抽空我来试试;
作者: mayuanfu    时间: 2019-8-26 23:17
huaweiwx 发表于 2019-8-26 00:12
谢谢!确是个bug,部分板子没有修改到位,主要是stvp 参数中设备名称需要大写,stm8/boards.txt 已在最新 ...

大侠客气了,我们得感谢你的无私奉献的精神,感谢您在凌晨回复太感谢了.不知您是否对G-SENSOR记步这方面有没有研究过.手上有个类似的案子.如果感兴趣我发资料给您.
作者: kkstun    时间: 2019-9-3 22:33
期待大神放到github上
作者: tigerzq    时间: 2019-9-13 09:18
这个硬件是什么?
作者: wt666xh    时间: 2019-9-26 11:44
大佬,我在这个里使用Arduino提供的库会报错,请问怎么解决
作者: hui223    时间: 2019-10-1 13:48
出個編程說明吧,管腳配置,編程注意事項等等。
現在有些摸不到頭呀

作者: hui223    时间: 2019-10-2 23:04
n76e003 延時器定時出錯,實際時間延長12倍
樓主早點看到修正呀

[attach]414597[/attach]
手機秒錶12秒:sweat:
[attach]414598[/attach]
同樣代碼stc上正常
[attach]414599[/attach]
買的 Nu-Link
[attach]414600[/attach]

說明:爲防止是硬件問題,又用keil編程測試,結果是正常的。
爲防止偶然,重新配置了 Arduino for 51  結果還是延時錯誤12倍。




作者: huaweiwx    时间: 2019-10-15 09:45
本帖最后由 huaweiwx 于 2019-10-15 09:47 编辑

谢谢测试并反馈给我这个信息!
n76e003 延时部分我在内部做了两个可选的实现方法,编译时可通过选项
定义个宏变量 USE_SYSTICK 来控制:
1 简单循环延时 / 2 通过定时器timer0精确延时;

考虑到大部分应用都是简单控制,时间要求不高,因此系统缺省是通过简单的循环来实现delay, 这方法优点是代码短,不占用timer0;而对于时间精度要求高的应用需要使用定时器,可以直接使用n76e003 BSP中的定时器延时函数:Timer0/1/2/3_DelayXXus/ms 函数;

一 如果希望仅对某个工程使用定时器来实现延时函数,可在该工程中增加个配置文件:
HAL_config.h ,并在其中加上定义:
#define  USE_SYSTICK   1
(说明,系统会自动装入 HAL_config.h ,因为工程所在路径在全部搜索路径的开头,会优先装入)

二 如要改缺省使用定时器的延时函数,则需要在文件: mcs51/cores/N76E003/wiring.c  中,加入:

#ifndef  USE_SYSTICK
#define  USE_SYSTICK   1
#endif

来定义缺省使用定时器延时的delay,当然这也实现了:
millis()
micros()
delay()
delayMicroseconds()
在缺省定时器的延时函数的情形下,某个特定的应用仍可以临时改为简单循环延时,这是在HAL_config.h ,并在其中加上定义:
#define  USE_SYSTICK   0
(HAL_config.h 中的配置的宏变量,总是最优先的,这和我在其他 如stm32/efm32/nuvoton arm arduino中的用法是一致的)

三  简单延时函数我是定义了一个 LOOP_US ,位置在 system/N76E003/mcu.h 中,可以修改NOP() 个数来标定时间;


作者: 979940927    时间: 2019-10-16 09:56
老姚出来乐一乐,51都支持了
作者: 百科探密    时间: 2019-10-31 20:48
楼主相当强悍。支持。
作者: w511577    时间: 2019-11-1 01:57

大神帮忙看下这个是什么问题

[attach]458348[/attach]


bash.exe: warning: could not find /tmp, please create!
D:\Arduino\hardware\sduino\tools\sdcc\non-free/bin/sdcc sketch\sketch_nov01a.ino.cpp preproc\ctags_target_for_gcc_minus_e.cpp re12 -c -Ddouble=float -D__PROG_TYPES_COMPAT__ --model-large -E -MC -mmcs51 -DSTC89C52 -DF_CPU=11059200L -DHXT -DARDUINO=10810 -DARDUINO_STC89C52RC -DARDUINO_ARCH_MCS51 -DMENU_SERIAL=1 -DUSE_PRINTF=3 -ID:\Arduino\hardware\sduino\mcs51\cores\STC89 -ID:\Arduino\hardware\sduino\mcs51\variants\STC89 -IC:\Users\1\AppData\Local\Temp\arduino_build_580843/sketch -ID:\Arduino\hardware\sduino\mcs51\system/STC89 -ID:\Arduino\hardware\sduino\mcs51\system/common -ID:\Arduino\hardware\sduino\tools\sdcc\non-free/inc -ID:\Arduino\hardware\sduino\tools\sdcc\non-free/include/msc51
Mark re12:D:\Arduino\hardware\sduino\tools\sdcc\non-free/bin/sdcc -c -Ddouble=float -D__PROG_TYPES_COMPAT__ --model-large -E -MC -mmcs51 -DSTC89C52 -DF_CPU=11059200L -DHXT -DARDUINO=10810 -DARDUINO_STC89C52RC -DARDUINO_ARCH_MCS51 -DMENU_SERIAL=1 -DUSE_PRINTF=3 -ID:\Arduino\hardware\sduino\mcs51\cores\STC89 -ID:\Arduino\hardware\sduino\mcs51\variants\STC89 -IC:\Users\1\AppData\Local\Temp\arduino_build_580843/sketch -ID:\Arduino\hardware\sduino\mcs51\system/STC89 -ID:\Arduino\hardware\sduino\mcs51\system/common -ID:\Arduino\hardware\sduino\tools\sdcc\non-free/inc -ID:\Arduino\hardware\sduino\tools\sdcc\non-free/include/msc51 sketch\sketch_nov01a.ino.cpp -o preproc\ctags_target_for_gcc_minus_e.cpp
cpp gefunden
D:\Arduino\hardware\sduino/tools/msys/wrapper/sdcc.sh: line 91: D:\Arduino\hardware\sduino\tools\sdcc\non-free/bin/sdcc: No such file or directory
exit status 127
为开发板 STC89CxRC/RD+ 编译时出错。




作者: huaweiwx    时间: 2019-11-1 11:07
本帖最后由 huaweiwx 于 2019-11-1 11:10 编辑
w511577 发表于 2019-11-1 01:57
大神帮忙看下这个是什么问题

Arduino IDE 版本1.8.10  的预处理 有bug 就是指定的工具路径并不会正确处理,而是指向了该路径的下一个文件夹位置! 其他官方支持没有问题,但我们这个是借用了它的IDE环境,就有问题了,我也更新到这一版本后也发现了这个问题,但没找到解决方案,就暂时只能退回到上一个发行版本 1.8.9,等下一版出来后再更新试试;
重要的事情说三遍:
Arduino 1.8.10 不支持! 请暂用 1.8.9 版;
Arduino 1.8.10 不支持! 请暂用 1.8.9 版;

Arduino 1.8.10 不支持! 请暂用 1.8.9 版;



作者: w511577    时间: 2019-11-1 13:13
w511577 发表于 2019-11-1 01:57
大神帮忙看下这个是什么问题

多谢大神指点
作者: huaweiwx    时间: 2019-11-1 20:55
mayuanfu 发表于 2019-8-2 19:04
请问大侠,我选STM8F003测试时出现bash.exe: warning: could not find /tmp, please create!请问TMP要建在哪 ...



消除  bash.exe: warning: could not find /tmp, please create! 方法:

在 arduino/hardware/sduino/tools 下,建立一个空的文件夹,可以消除这个build 警告,见下图:

[attach]459699[/attach]


作者: ynymwtb    时间: 2019-11-2 10:25
上次用arduino做了一个usb充电测量仪,增加了充电量,但延时函数不太准,可能是我程序问题
作者: laodayu    时间: 2019-11-6 22:33
有空试了一下,stm8s003可以运行,但是有些语句会出现乱七八糟的输出,特别是PWM,还有stm8s串口波特率怎么设置,例程没找到!
作者: laodayu    时间: 2019-11-6 22:36
我是用stm8s003 测试,有些奇怪的现象,代码改多几次就报错,哪怕删除到最简化也出错,关闭重启电脑,同样的代码又可以通过了,修改几次又出现这个现象,又删除到最简化,还是不行,重启电脑,又可以通过,有点郁闷!
作者: huaweiwx    时间: 2019-11-7 10:07
laodayu 发表于 2019-11-6 22:36
我是用stm8s003 测试,有些奇怪的现象,代码改多几次就报错,哪怕删除到最简化也出错,关闭重启电脑,同样 ...

关闭 cache 试试:
[attach]468201[/attach]


作者: laodayu    时间: 2019-11-7 11:24
stm8串口波特率怎么设置,原来的语句不能用了
作者: huaweiwx    时间: 2019-11-7 11:28
laodayu 发表于 2019-11-7 11:24
stm8串口波特率怎么设置,原来的语句不能用了

看 库中的examples  有例子:
Serial_begin(115200) ; //115200 bps

Serial_begin(9600); // 9600 bps


就是将原来Serial.begin(9600) 改为 Serial_begin(9600); 因为 sduino 是c实现,不支持 c++

作者: laodayu    时间: 2019-11-7 21:53
[attach]469487[/attach]
本想参考一下示例,无奈示例也未能幸免!

作者: laodayu    时间: 2019-11-7 22:03
[attach]469523[/attach]
看了是人品问题了,右边的框是示例,复制粘贴到左边框里,死活通不过:dizzy:

作者: huaweiwx    时间: 2019-11-7 22:35
laodayu 发表于 2019-11-7 22:03
看了是人品问题了,右边的框是示例,复制粘贴到左边框里,死活通不过
...

我看你的标题栏,arduino 版本是1.8.5,这个版本老了点,需要更新到 1.8.9!

但又不能用最新版本1.8.10,因为这个版本的预处理部分,对路径处理有点错误;你这个早期版本估计也有同样的问题。

作者: 小金guoqing    时间: 2019-11-12 20:37
楼主,能否增加支持Mac osx 的教程。stc 系列一直没法在osx 上快捷折腾,挺纠结的
作者: 斩夺者    时间: 2019-11-15 11:19
楼主Servo库不兼容啊51和STM8
作者: huaweiwx    时间: 2019-11-15 15:57
51 还没调试,stm8 部分将库中文件 Servo.c 中:
#include <irqtable.h> 这语句注释掉:
//#include <irqtable.h>
就可以了。

作者: zhaohanit    时间: 2019-11-19 22:02
楼主,您好,ARDUINO有事请教,可以QQ吗
作者: jn天涯    时间: 2019-11-20 13:27
Arduino:1.8.9 (Windows 7), 开发板:"STC8A/F, STC8A4K32S2(32k/4k), OC22.1184M, large, +3.3V, int+long, none, UART1, auto, stcisp"

bash.exe: warning: could not find /tmp, please create!
D:\Arduino\hardware\sduino/tools/sdcc/bin/sdcc sketch\LED_STC8.ino.cpp preproc\ctags_target_for_gcc_minus_e.cpp re12 -c -Ddouble=float -D__PROG_TYPES_COMPAT__ --model-large -E -MC -mmcs51 -DSTC8A4K -DF_CPU=22118400UL -DHXT -DARDUINO=10809 -DARDUINO_STC8A4K32S2 -DARDUINO_ARCH_MCS51 -DMENU_SERIAL=1 -DUSE_PRINTF=3 -ID:\Arduino\hardware\sduino\mcs51\cores\STC8 -ID:\Arduino\hardware\sduino\mcs51\variants\STC8 -IC:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_701373/sketch -ID:\Arduino\hardware\sduino\mcs51\system/STC8 -ID:\Arduino\hardware\sduino\mcs51\system/common -ID:\Arduino\hardware\sduino/tools/sdcc/inc -ID:\Arduino\hardware\sduino/tools/sdcc/include/msc51
Mark re12:D:\Arduino\hardware\sduino/tools/sdcc/bin/sdcc -c -Ddouble=float -D__PROG_TYPES_COMPAT__ --model-large -E -MC -mmcs51 -DSTC8A4K -DF_CPU=22118400UL -DHXT -DARDUINO=10809 -DARDUINO_STC8A4K32S2 -DARDUINO_ARCH_MCS51 -DMENU_SERIAL=1 -DUSE_PRINTF=3 -ID:\Arduino\hardware\sduino\mcs51\cores\STC8 -ID:\Arduino\hardware\sduino\mcs51\variants\STC8 -IC:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_701373/sketch -ID:\Arduino\hardware\sduino\mcs51\system/STC8 -ID:\Arduino\hardware\sduino\mcs51\system/common -ID:\Arduino\hardware\sduino/tools/sdcc/inc -ID:\Arduino\hardware\sduino/tools/sdcc/include/msc51 sketch\LED_STC8.ino.cpp -o preproc\ctags_target_for_gcc_minus_e.cpp
cpp gefunden
bash.exe: warning: could not find /tmp, please create!
D:\Arduino\hardware\sduino/tools/sdcc/bin/sdcc sketch\LED_STC8.ino.cpp sketch\LED_STC8.ino.cpp.o re2 -MMD -c -Ddouble=float -D__PROG_TYPES_COMPAT__ --model-large -mmcs51 -DSTC8A4K -DF_CPU=22118400UL -DHXT -DARDUINO=10809 -DARDUINO_STC8A4K32S2 -DARDUINO_ARCH_MCS51 -DMENU_SERIAL=1 -DUSE_PRINTF=3 -DMENU_VCC=3300 -IC:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_701373/sketch -ID:\Arduino\hardware\sduino\mcs51\system/STC8 -ID:\Arduino\hardware\sduino\mcs51\system/common -ID:\Arduino\hardware\sduino/tools/sdcc/inc -ID:\Arduino\hardware\sduino/tools/sdcc/include/msc51 -ID:\Arduino\hardware\sduino\mcs51\cores\STC8 -ID:\Arduino\hardware\sduino\mcs51\variants\STC8
Mark re2:D:\Arduino\hardware\sduino/tools/sdcc/bin/sdcc -MMD -c -Ddouble=float -D__PROG_TYPES_COMPAT__ --model-large -mmcs51 -DSTC8A4K -DF_CPU=22118400UL -DHXT -DARDUINO=10809 -DARDUINO_STC8A4K32S2 -DARDUINO_ARCH_MCS51 -DMENU_SERIAL=1 -DUSE_PRINTF=3 -DMENU_VCC=3300 -IC:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_701373/sketch -ID:\Arduino\hardware\sduino\mcs51\system/STC8 -ID:\Arduino\hardware\sduino\mcs51\system/common -ID:\Arduino\hardware\sduino/tools/sdcc/inc -ID:\Arduino\hardware\sduino/tools/sdcc/include/msc51 -ID:\Arduino\hardware\sduino\mcs51\cores\STC8 -ID:\Arduino\hardware\sduino\mcs51\variants\STC8 sketch\LED_STC8.ino.cpp -o sketch\LED_STC8.ino.cpp.o
cpp gefunden
bash.exe: warning: could not find /tmp, please create!
D:\Arduino\hardware\sduino/tools/sdcc/bin/sdcc D:\Arduino\hardware\sduino\mcs51\variants\STC8\variant.c core\variant.c.o re1 -MMD -c -Ddouble=float -D__PROG_TYPES_COMPAT__ --model-large -mmcs51 -DSTC8A4K -DF_CPU=22118400UL -DHXT -DARDUINO=10809 -DARDUINO_STC8A4K32S2 -DARDUINO_ARCH_MCS51 -DMENU_SERIAL=1 -DUSE_PRINTF=3 -DMENU_VCC=3300 -IC:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_701373/sketch -ID:\Arduino\hardware\sduino\mcs51\system/STC8 -ID:\Arduino\hardware\sduino\mcs51\system/common -ID:\Arduino\hardware\sduino/tools/sdcc/inc -ID:\Arduino\hardware\sduino/tools/sdcc/include/msc51 -ID:\Arduino\hardware\sduino\mcs51\cores\STC8 -ID:\Arduino\hardware\sduino\mcs51\variants\STC8
Mark re1:D:\Arduino\hardware\sduino/tools/sdcc/bin/sdcc -MMD -c -Ddouble=float -D__PROG_TYPES_COMPAT__ --model-large -mmcs51 -DSTC8A4K -DF_CPU=22118400UL -DHXT -DARDUINO=10809 -DARDUINO_STC8A4K32S2 -DARDUINO_ARCH_MCS51 -DMENU_SERIAL=1 -DUSE_PRINTF=3 -DMENU_VCC=3300 -IC:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_701373/sketch -ID:\Arduino\hardware\sduino\mcs51\system/STC8 -ID:\Arduino\hardware\sduino\mcs51\system/common -ID:\Arduino\hardware\sduino/tools/sdcc/inc -ID:\Arduino\hardware\sduino/tools/sdcc/include/msc51 -ID:\Arduino\hardware\sduino\mcs51\cores\STC8 -ID:\Arduino\hardware\sduino\mcs51\variants\STC8 D:\Arduino\hardware\sduino\mcs51\variants\STC8\variant.c -o core\variant.c.o
D:\Arduino\hardware\sduino\mcs51\variants\STC8\variant.c:9: error 20: Undefined identifier 'CKDIV'

exit status 1
为开发板 STC8A/F 编译时出错。

在文件 -> 首选项开启
“编译过程中显示详细输出”选项
这份报告会包含更多信息。
这是什么原因呢,
作者: huaweiwx    时间: 2019-11-20 19:02
本帖最后由 huaweiwx 于 2019-11-20 19:12 编辑
jn天涯 发表于 2019-11-20 13:27
Arduino:1.8.9 (Windows 7), 开发板:"STC8A/F, STC8A4K32S2(32k/4k), OC22.1184M, large, +3.3V, int+long ...

arduino\hardware\sduino\mcs51\variants\STC8\variant.c   第9行出错: CKDIV 应该是CLKDV, 只要将该行:
    CKDIV = 0x00;                               //时钟不分频
改为:
    CLKDIV = 0x00;                               //时钟不分频

我将原来启动文中的该SFR16 寄存器命名写到了头文件中,并且采用了和stc官方一致的名称 ,但在这个variant.c文件却忘了改了。

谢谢测试发现这个问题并反馈给我。

另外,我看你信息中 有 :
bash.exe: warning: could not find /tmp, please create
请按  81# 楼 方法建立 tmp 文件夹,就没有警告信息了。


作者: wxws    时间: 2019-11-24 15:19
好久没上这,又发现楼主大作,
现在M0芯片也是很多呀,价格也便宜
NAVOTA系列
华大HC32F005 只要2还含税
这些能不能搞arduino
作者: wxws    时间: 2019-11-24 15:23
另外 ti 的cc 下面这家都支持

https://energia.nu/
16-bit MSP430
16-bit C2000
32-bit CC13xx
32-bit CC3200
32-bit CC3220
32-bit MSP432


作者: huaweiwx    时间: 2019-11-27 21:54
wxws 发表于 2019-11-24 15:19
好久没上这,又发现楼主大作,
现在M0芯片也是很多呀,价格也便宜
NAVOTA系列

所有arm系列,更广泛一点,gcc 支持或其他c++支持 的,都可以移植集成到arduino ide中;
我将内置了64Mddrrom,带有2d图形加速器 的  nuc970 都搬到 arduino中裸奔了。
作者: kkstun    时间: 2019-11-27 22:09
huaweiwx 发表于 2019-11-27 21:54
所有arm系列,更广泛一点,gcc 支持或其他c++支持 的,都可以移植集成到arduino ide中;
我将内置了64Mddr ...

期待楼主放github上
作者: 斩夺者    时间: 2019-11-28 12:48
huaweiwx 发表于 2019-11-15 15:57
51 还没调试,stm8 部分将库中文件 Servo.c 中:
#include  这语句注释掉:
//#include

感谢楼主
作者: azi1974    时间: 2019-12-2 00:36
楼主太强大了,为我们小白铺平了道路




欢迎光临 数码之家 (https://www.mydigit.cn/) Powered by Discuz! X3.4