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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

! w$ o6 V$ {7 B4 u0 r8 y4 N: X1 |  W    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256! h- u) v  }4 G3 y

) @7 T. f% G' k# n3 K# Q其他程序段。。。。。# G- \' T2 A' L5 G, {/ Q
. N* o8 [2 }# C4 ?/ h% ^+ t
   free(x_d);1 ]0 @7 w/ @% N# e* ]4 i

4 z3 K& T; F8 b8 f" f" E使用DSP侧单独调试功能,验证动态申请没有问题,
3 s0 ~% r9 O* z9 ]
9 y4 a5 k5 J* u: @( k% k8 V: I但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。: ~8 d" u) |# P9 `+ S

  X! s2 S; U5 y* S7 C
3 z9 l5 z1 N" q6 ]* f; U9 {" U( _

, ~, d9 v1 x+ n" }2 l4 m! l" P! r$ B- M
1 ~- |8 a& S$ K9 L6 v1 w' t

/ C8 _8 W& d9 J% b( |% g
& O9 c4 n. t* \4 k/ C$ N+ c
; n3 s. `8 h3 B7 H- F! a0 _( R# B8 p7 B) |6 m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */* t6 W6 ^  u6 G6 X( i$ B+ _: L
Program.heap = 0;$ ^  r0 B' M/ _) k
Program.argSize = 100;  /* minimum size */
5 F2 |8 `+ s! \1 GProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
1 s9 {: ?! x' Z+ Z/ wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' W! l6 |) Z* {5 |9 n" y; L5 I' A
var heapMemParams = new HeapMem.Params();; f) P0 _$ V' H  Q( \
heapMemParams.size = 0x4000;' z3 i+ `/ k5 \  h: r+ O0 p
+ b1 P% e+ d" u+ F# D, ~: F
var Memory = xdc.useModule('xdc.runtime.Memory');$ }, c* S0 ?; N6 @/ w1 }
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ W. F; r# H. f* U
6 \+ m: y7 r9 I  Y6 ?4 h, w% g我大约calloc  每次共计大小为5K*16bits,6 Z8 l* I+ v+ \) \
而默认配置才0x4000、需要改大。
4 D9 o! c6 L, o; M$ d
) F  y* r: v* W5 z# U1 {# P
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
8 v6 ~3 S5 p4 r# p- \我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下% n2 Q! x* O( T) P5 \6 A/ C
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
4 h, Y. t1 O  v" U+ \; K+ M
) }9 D) G7 [) k( @5 [
是不是需要在DSP.CFG中进行配置
. _7 c8 T+ r0 w% f4 p' |: u( [  e* o我现在的配置为4 R  K$ \8 O2 m$ f- s2 |/ Y

7 j8 n% ]' U4 c% t3 Y/ x/*
+ W- c3 `0 c* k9 R *  ======== Operating System Configuration ========
6 L. d, @6 H8 s! C) [8 K0 @# v4 G+ \ */
: _! \% c" Y0 K! z7 X' b! ?
/ r+ Z$ r2 p9 Q% Z+ V$ a: z7 s/* no rts heap */; g/ z) W4 g$ G' g% a5 {
Program.heap = 0;
- E0 O/ Y0 _9 V) J' bProgram.argSize = 100;  /* minimum size */
4 |# e& D" W- z" F* K! \3 l& \Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# L) D, g  O  y) a9 Y0 C7 Z
: j$ t0 u- n: Y! e  e' x/* create a default heap */
+ s3 i$ b7 U9 ?& r8 z/ P- h3 [var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 H2 @( B' ~) v' {var heapMemParams = new HeapMem.Params();# W8 [2 k8 j# W' e# ?
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# _3 o! }" }) c% ~0 T& ?1 k2 a; o0 Z& Z% J* W
var Memory = xdc.useModule('xdc.runtime.Memory');
+ j; H: c+ t. J9 h7 b0 I1 K2 G4 RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);1 @9 `( t  h( i$ \' G$ `/ z

: i( N% k2 v& r1 _6 \4 Y/* configure System module */( P7 a( E& {. Y1 q9 c: t
var SysMin = xdc.useModule('xdc.runtime.SysMin');+ k; l/ b2 t7 R; `" X9 X( t
SysMin.bufSize = 0x1000;% A$ i: [  a: u# w' E
SysMin.flushAtExit = false;
" L% |* J& |( u% O. v
6 s! u0 H& j0 vvar System = xdc.useModule('xdc.runtime.System');
6 X9 `$ ^5 c8 O2 y) ^8 DSystem.SupportProxy = SysMin;4 y# q. j4 i$ P, q

( v0 h0 ]9 @: z/* configure SysBios to use the lower half of Timer 1 */
4 s3 l9 r7 n8 ]4 @5 Ovar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');0 W& h6 K* A2 _. h' z
var Clock = xdc.useModule('ti.sysbios.knl.Clock');; D) ^( d! v8 p3 H* m" p0 [
Timer.timerSettings[1].master = true;
+ B- g) `& O6 [9 v$ P" iTimer.defaultHalf = Timer.Half_LOWER;- v  e2 j( I& L5 q6 n6 L: H- C
Clock.timerId = 1;
3 ~7 ~, b1 e7 l' b
  r' m" ^8 Z0 l8 P+ L/ Z$ A5 t+ ]* @5 S* K( b1 S6 a4 d. u6 _
/*" a+ |$ g+ w# V- e" J' F
*  ======== Miscellaneous Configuration ========
; d" Q% T1 W, y% N; K3 o1 l- F- \* d */, t3 c; Z* r& @; r" E

/ g+ r' x: p# Y# `6 W/* set default diags mask */
/ N5 g+ b' M2 h. b) t. {, |0 Y; ]var Diags = xdc.useModule('xdc.runtime.Diags');! K3 e( a3 D* _$ K6 A
var Defaults = xdc.useModule('xdc.runtime.Defaults');, `2 E+ P* m" W! y) p

, l, X! I- b5 C. t1 aDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
. r8 s0 B* P  S9 H/ X; U% s" D: RDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
: y  D0 V6 L. o0 r+ c2 s/ y1 dDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; S- o! T3 @! ]- aDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */+ G0 t/ M: C/ u  R5 L3 q: f3 n
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */( @2 r- z  s( J( g( G+ v0 R
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
' W$ d4 h' g5 \: ]Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;2 M" G2 b; @2 M1 l/ o1 T' x
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& Q. H; w# p8 J/ `* V/ q( V, \
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
6 B2 L& F. F) ]+ F  @  HDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
  t0 \! v, h0 F4 |1 O' x' pDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;' M2 ]* U+ j  k* i  K: M6 |8 v1 y
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;' r' b8 X5 U4 \  e  u
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;4 e) {6 N! w/ C8 y
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;; i- W% [( T" d/ C% l
. C6 ?+ [9 L6 H0 ?
/* override diags mask for selected modules */8 i' K- k8 w+ O) X7 S- j- b
xdc.useModule('xdc.runtime.Main');$ ~. f5 f4 d& R6 R$ a
Diags.setMaskMeta(& L4 G! U6 e1 T2 j& u
    "xdc.runtime.Main",) J1 Y  a9 M, ~1 d  T
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
3 R  x, J; M4 Y/ [1 z    Diags.RUNTIME_ON( J! j3 Q1 Z+ ~8 y
);
+ R* k* g/ O1 j' Y+ m$ l
$ B8 L1 s8 ^( c# o3 i( jvar Registry = xdc.useModule('xdc.runtime.Registry');; W( s1 y# l2 Q# m
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;" L4 D% o1 E; X+ C
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. I; l' C- D. r4 n
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 z( _; `: N5 IRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" Z9 P2 l/ m* W/ g& F' }7 u5 F/ N- l# ~1 P4 P9 h- c) o
/* create a logger instance */
! ~4 y5 g# ?! o. r: K! Zvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');4 w! _7 L1 D# r3 S* h
var loggerBufP = new LoggerBuf.Params();
# ~, t/ n1 o( {+ l$ T# rloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 P  ]7 t- q6 u% u2 B. j$ Y( LloggerBufP.bufType = LoggerBuf.BufType_FIXED;
& }+ p1 V1 w+ D" A2 P- l, c/ ]5 ?# q( K# u
var appLogger = LoggerBuf.create(loggerBufP);
/ _! ~5 y1 v& N% B1 A6 }9 \appLogger.instance.name = "AppLog_Core1";7 n& o: T+ e8 `& I  [
Defaults.common$.logger = appLogger;* j% h" `# n" \" D7 x
Memory.defaultHeapSize = 0x8192;   
+ O+ x( b9 o7 K) \7 o" Z3 CIdle.idleFxns[0] = "&LEDStatus";
, p6 O8 f, p* K+ c- nCache.initSize.l2Size = Cache.L2Size_32K;
: [0 l3 p3 P& O* N8 o4 V
7 P0 ]8 p2 i. X# E! u& V  B
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-21 02:43 , Processed in 0.046569 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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