关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8230|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构6 g8 o8 q7 f( {( x

  L+ Y5 n8 }  E    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2566 Y& ^2 i$ x/ `- _! p
/ \5 Q: O; ~: a3 u
其他程序段。。。。。
* B. i) \+ S  ?8 l4 q3 R$ _1 b   W9 P; c8 r5 L) Z% W4 W5 j
   free(x_d);
# a+ ~  ?) |% K. `3 t6 t2 ]0 q% u2 U& {$ u4 B$ r4 _* z
使用DSP侧单独调试功能,验证动态申请没有问题,
4 m3 @  P, c" i$ I. i0 n2 R* \! ^) ~, e; r7 k
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
2 H2 Z. R6 ^6 k, o$ a4 C2 Y
& x3 k! V" |/ J) b8 M
$ i% a( A5 d) C& X% W

" c3 h9 ^" o- w7 ^; ?9 V
/ {* t! u) U  B
. X" H; @! l# u: n+ H) U8 {) G; y* Y
5 V% e' [: {: \- Y, Y) B
: d; T- i6 e1 J
, u4 S) Z3 u3 W9 {% Q; f

! o5 J: M" H; c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
4 @3 \% V- e+ w& G1 U+ k: G% S" e我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下1 O& M6 G! [0 V1 n# |( S# G. ]
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
3 \" N& z9 L  k4 \

5 ]! V$ X' f4 M是不是需要在DSP.CFG中进行配置$ z# W0 J4 t& J$ B, @& u) }" A% V$ ?
我现在的配置为! J. S4 i3 b* h
/ }2 c7 V' s7 ~) t. Y0 D: z! J5 x
/*( r: }. d6 {1 `+ X$ ]
*  ======== Operating System Configuration ========% J0 i7 N1 g% h! U  \
*/
+ D( X3 m; S9 P0 p  c8 ]: S
' H; @5 X( ?, Y/ D7 J/* no rts heap */: E# q4 d+ m' C: Z7 p; O
Program.heap = 0;
' _6 R, p+ [4 q# nProgram.argSize = 100;  /* minimum size */) [* o& W* f- `/ g7 g3 b5 E- K4 e
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
* Z" `" A' X* v3 w/ S2 j$ I2 G6 u  x0 D4 \
/* create a default heap */! y) c8 u: t( ^
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ x! |5 ]5 k1 \
var heapMemParams = new HeapMem.Params();
% B& j2 I6 J) D" c" ?+ \7 _heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大/ `! u/ D0 F7 S0 K4 g  h

; ~8 L1 h' s* o- C/ |" @
var Memory = xdc.useModule('xdc.runtime.Memory');9 ^6 J: N, d/ B% N6 A( l' m
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ O1 ?# Z1 n9 a8 o, d9 m0 _

0 y- q( n0 S5 J: _; e' _( g4 S3 R/* configure System module */" O% _5 j8 i. \0 x- Q- g4 U' d  a
var SysMin = xdc.useModule('xdc.runtime.SysMin');3 x) c" u8 M9 D2 l3 A( y: M
SysMin.bufSize = 0x1000;
. J0 Y4 a# K6 zSysMin.flushAtExit = false;
( G4 B- a) K9 {1 Q' Y
9 A7 v9 v" f( u$ M. c! Ivar System = xdc.useModule('xdc.runtime.System');3 m% N/ q; T+ ~* y% j! k
System.SupportProxy = SysMin;
" o$ T, \0 K" F. u1 }
" R9 `5 u0 A) N0 O$ o% D# Q/* configure SysBios to use the lower half of Timer 1 */2 H: C. z- S2 b' z2 @) V1 X
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( ]2 Z' u% Z# F3 Y1 `+ ?: a
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
% L! Q$ }* B8 V# L3 eTimer.timerSettings[1].master = true;+ v+ c5 O# I: Z0 S$ J+ v) X
Timer.defaultHalf = Timer.Half_LOWER;
0 n0 ~$ \/ K  v$ N7 JClock.timerId = 1;
0 s3 Z. _& u7 D0 z& y. I
: P) d3 l5 S1 I  z0 F5 [1 i" p5 ^
8 N& [- E$ Z& p/*
$ o9 R- ~2 f. G. o *  ======== Miscellaneous Configuration ========, A& I) u& b/ T8 b9 E
*/
- o: d$ [+ a8 l+ T$ y/ a
; `( k% J' w2 T% U  B! v- l/* set default diags mask */
" y7 p% e* c( [4 mvar Diags = xdc.useModule('xdc.runtime.Diags');
# m2 {7 A1 m# p- V) k6 N( k  W  [var Defaults = xdc.useModule('xdc.runtime.Defaults');9 |6 a" Q! ^1 [3 t, Y7 Z" p& s5 I
+ w+ Y' X( {7 e" u9 C7 O
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
6 V, q  g8 n4 N* b3 X  @Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 Y+ S. m" m% o7 m0 zDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
$ R5 b) N$ Q" g1 W1 N8 R! o& P$ DDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */& y) \9 f( n0 a6 `3 ]
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
0 \0 [# ]7 B; C. c4 }Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;# S- m% r1 L+ z/ C) c: H5 U
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;' a5 a! R8 P7 d. i+ a
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;" m  j3 H' B2 {& {! I7 i0 W- ^0 ]
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
: g  {7 k) U7 K9 Q% E# X( i; RDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" }- q* e8 T5 K3 I( V# uDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 W  ~: P' g  l9 b0 P" K. a
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;* E' e4 z9 F# P) ?( g1 O
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;) a$ s) ]6 X+ D' c/ _& j
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;3 H+ d- o4 p: F9 R8 _2 t
' b4 B* C3 J$ _. f
/* override diags mask for selected modules */- j( J# z# l5 f; I- ?
xdc.useModule('xdc.runtime.Main');
; G8 c. I, u2 a$ }8 dDiags.setMaskMeta(8 s8 R; R1 I. j
    "xdc.runtime.Main",  }# y9 f8 ]# _9 A& e: {% W
    Diags.ENTRY | Diags.EXIT | Diags.INFO,- {7 H' q; n8 S$ q# @( v2 X" q
    Diags.RUNTIME_ON
0 ?6 N/ @/ x3 P  O4 b; x);$ R7 W; ^2 i  i& L( `; u0 v
! |4 |1 U- G+ n& [, {7 b
var Registry = xdc.useModule('xdc.runtime.Registry');2 t$ J3 v* P4 |
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  i- X/ [0 p3 d; Q* }: P/ gRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
' S) O5 M; o4 t/ w, w. xRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;" W" F& v* g# B) ^: k
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;- u' ]% m3 U- a' Q8 V5 u
7 O" k; _; a# E" |" h5 p; ?
/* create a logger instance */* u  s6 }1 I: o1 H7 k! x" P$ C
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');8 U  n/ n9 U6 p! l6 U
var loggerBufP = new LoggerBuf.Params();
$ p/ [6 p3 P# T1 t' dloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- X7 c& ~% t$ {5 rloggerBufP.bufType = LoggerBuf.BufType_FIXED;- [9 O8 B* L: e$ U; V5 O& J
/ k+ n- t+ X% z. s3 _; g+ T
var appLogger = LoggerBuf.create(loggerBufP);
' F. f- T+ P- K8 P; h( F0 jappLogger.instance.name = "AppLog_Core1";
1 {% y# P3 A- g1 @Defaults.common$.logger = appLogger;
! z3 U  G" K& p2 m. {. ^: }Memory.defaultHeapSize = 0x8192;    ; `. n) y; |8 |
Idle.idleFxns[0] = "&LEDStatus";' X/ c: r' }) a8 V& J" u
Cache.initSize.l2Size = Cache.L2Size_32K;2 \! M- _0 N9 {5 M8 X4 g% F

9 Z: `& b; L4 D
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
9 t4 o- b4 q% q. o  O% Gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' O7 |) }9 H( a. g3 Y  Gvar heapMemParams = new HeapMem.Params();
  ~5 y: z; Z, I) ?3 z5 dheapMemParams.size = 0x4000;
0 S; p7 L6 u3 L# Y3 c) A0 n1 `7 W, v9 P' j6 u( V9 I
var Memory = xdc.useModule('xdc.runtime.Memory');! h& k5 c7 V# c; B( p; `6 M
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 H3 t8 x; z. W* O: k
3 G$ |: I! [" l! ]$ _( V1 m我大约calloc  每次共计大小为5K*16bits," s1 }. O1 x8 X
而默认配置才0x4000、需要改大。
  g3 b* z+ h  b, ~& j! M& T8 ~( N3 l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */: B- G+ k; `% x( x! o, F  _
Program.heap = 0;
3 j  m- S( T% Q5 P; qProgram.argSize = 100;  /* minimum size */, k, q# c: Z* U3 x$ q  ?
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-4-8 11:07 , Processed in 0.041271 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表