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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构/ u& I/ H8 J8 K2 y; x" k. ^! n1 W
. M8 k7 @/ z' U6 V$ f' c3 w
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  y8 Q" U/ m7 x* N5 V
9 T# o6 C4 j) @, A1 p, _; U: c4 Q9 E
其他程序段。。。。。) @- W! y& c  J1 b$ [
* @5 o: G& _  ^( \: u4 I& b
   free(x_d);1 v, i) R# D, F" A3 Z% v
: f+ @/ r" H7 I  F5 p! V7 g/ ^
使用DSP侧单独调试功能,验证动态申请没有问题,) t9 f5 M' w5 H/ e" x

' ]9 I2 p2 h$ [但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 `. |2 K; @; Z6 x* ]

1 C4 D  J- T; Y' K: d7 q/ o* Z- w! S5 n. i

/ H9 M% N: i  A, `2 G' ~- u$ q/ g
+ ^4 C1 g1 G& Q/ Y/ l* ]1 ~( L5 N
* Y2 ?# g: m5 O) G2 {. i
* d" x; z2 E4 W' \/ A5 A7 \  z. G1 W# t0 B  m0 O
# u8 k6 y# o. c5 f2 }, o
0 U. E7 d) P& N) O4 M4 Z# i
3 a7 L4 b$ V4 R6 D
分享到:  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 */
: V; ~, p) s9 I& |  m' _Program.heap = 0;
- a, B+ D  T1 ~Program.argSize = 100;  /* minimum size */! G* I) H+ C% G3 F: v
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
: x- T9 u3 Y3 }5 A; ]) l, evar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 W* A* H; R% H2 _' X0 `var heapMemParams = new HeapMem.Params();1 f! V0 {2 a) T3 Z/ i% O: W8 W# g
heapMemParams.size = 0x4000;
& A: e: w% |$ ~0 x  Z' Q
* U* I  X' L- o; L# i/ ^var Memory = xdc.useModule('xdc.runtime.Memory');
0 U( C7 N2 ?9 R/ c7 _( t1 u# SMemory.defaultHeapInstance = HeapMem.create(heapMemParams);8 N" p; {: ~" h5 n9 }

+ M. j3 G3 ?0 n我大约calloc  每次共计大小为5K*16bits,
$ ^2 z# e- y# Y& O8 a; a: |而默认配置才0x4000、需要改大。# _$ H2 f' d. |: {7 Z

3 e# z! M' ], [7 L' W: B1 D+ q
回复 支持 反对

使用道具 举报

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 n, J  h+ R1 B8 ?* C- p, [) }. _& V
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下5 M; |& C) k, T; I
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)7 C3 K1 d/ U3 Y0 h" I

  L% s2 G4 E' N+ G; Y是不是需要在DSP.CFG中进行配置# m( u8 |! a. }5 J8 J5 m+ D5 v
我现在的配置为
$ b0 [9 }- @6 q& T  Y6 N7 W8 C7 w& V( Q
! ]3 i( z3 r  S) _! ]9 ?/*3 \# `0 x. N% b+ M, K
*  ======== Operating System Configuration ========
9 E3 Z7 R6 d5 V+ Y */' I# _0 N5 p1 E7 |0 Q# a( B$ _/ v5 r

. h" H' u8 V1 L' X# A( U/* no rts heap */0 u' x' r9 N# T& ?0 Y
Program.heap = 0;# y9 g) c# m6 ^1 w* C( E, q) R
Program.argSize = 100;  /* minimum size */
& n! j, W2 q# XProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大) o+ U# \6 }7 v% u( A; V# m
* _6 M: w9 A: H" r1 g- @
/* create a default heap */7 a9 _6 Z7 R! z( a" \
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ J0 z9 r4 G9 s( F" ^) `1 cvar heapMemParams = new HeapMem.Params();
; h$ l. Z2 @8 z* X1 S. {heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
! S; `. \6 y; x+ Q: \, ^9 p6 @/ [3 |; p9 i% j4 g
var Memory = xdc.useModule('xdc.runtime.Memory');+ B. S. |" V3 n: V
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);; ~. z' N; ~- Z5 g$ V; _

, B' w( N0 U. r! a# @( ^( V/* configure System module */% z% \" m0 q) a. t
var SysMin = xdc.useModule('xdc.runtime.SysMin');' D& s2 T8 T' c, Y% e
SysMin.bufSize = 0x1000;
8 e/ I: @8 J& g( ?SysMin.flushAtExit = false;1 p9 e0 p4 V2 I) O+ N: N, c# p
# K  H+ M' X/ f7 Q5 S
var System = xdc.useModule('xdc.runtime.System');
3 ~4 `$ j3 o4 L6 x! aSystem.SupportProxy = SysMin;, \: i: r, x) n" h0 Q

% n- U9 i% ~7 s- E# K- V/* configure SysBios to use the lower half of Timer 1 */" r/ |( m+ }$ P9 c% Y3 J  r/ [8 V7 r
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
4 q7 A0 ?) N' hvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
  l: J7 I, z9 u( h! uTimer.timerSettings[1].master = true;
$ O; I. V/ D( k! s$ `Timer.defaultHalf = Timer.Half_LOWER;0 I: _4 P  N7 g% X. n- K4 y
Clock.timerId = 1;
1 ~5 E" t- f- Z0 }5 c& g8 n+ J! |: W3 H4 m$ P; b, A. n

" \9 |: m9 ^. {3 ]' q6 T8 |% i) k  ]/*
5 C' k5 @: W: j" f5 j3 Q *  ======== Miscellaneous Configuration ========. J) @& R; e8 K7 c" T
*/
7 c2 ?5 [8 u9 U$ _
! e. O; {  }% [) r0 |! q* c/* set default diags mask */; W- B" _( E  D: d  h
var Diags = xdc.useModule('xdc.runtime.Diags');
" W7 \/ d* K' V: ?8 h% Nvar Defaults = xdc.useModule('xdc.runtime.Defaults');
4 e, G! }- e; ^( s5 g' }* |0 d8 G$ O6 m+ }
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* m# q7 v1 d7 {/ dDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
7 o( r# q5 i2 \  O0 M# SDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 S* u: T, s: e
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */! D. U0 t) ?, E* e
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
0 v1 ^9 h# b5 @& ]9 }Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 Q5 m- s5 S; p
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
1 p0 U1 g9 R' G  F, D1 YDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
' t  R: A. z/ m5 G/ [2 TDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
' P5 C$ T8 m3 F8 T8 W% ODefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% G$ ?1 I8 o- V
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;4 r. p2 i; R0 c: g
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;4 e4 t. f+ [% O5 N0 F. t( `0 s
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ v- ]7 |* S6 w( tDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;" m3 x$ n0 J: S% M: n

: W: f: ]) }% q* B) S/* override diags mask for selected modules */
9 K) T* g% k2 A% xxdc.useModule('xdc.runtime.Main');
8 f  B6 g! @6 i, _/ p5 }$ YDiags.setMaskMeta(
$ b! m/ X& f! _/ H5 j    "xdc.runtime.Main",
! o+ m! ^/ \" p: k  \  X    Diags.ENTRY | Diags.EXIT | Diags.INFO,# `! ~( e  A/ x( h, J" K1 y: V3 o
    Diags.RUNTIME_ON
/ ]' I- H' ~- L. M) Y2 d);
5 _+ F6 g5 |: c& I$ M0 L+ M: `* r, ?" o
var Registry = xdc.useModule('xdc.runtime.Registry');$ f. x6 P) p' U! {, c# v
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;, Z! `6 R: o  U9 k
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
# K: ?7 R* D/ `/ p1 DRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;  E& k+ F9 S+ k+ t3 s/ ?9 d/ L
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
: A7 ]# \7 l. }6 u: \0 n! V4 ?* A. t8 \! V) o/ M! l
/* create a logger instance */+ l& K3 Y1 a3 V9 n
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');) _1 d' Q0 f5 B( J7 ~2 t
var loggerBufP = new LoggerBuf.Params();
" ?% ]5 G  ?" lloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */3 Y+ o  x& n$ u4 E5 x- a
loggerBufP.bufType = LoggerBuf.BufType_FIXED;  T$ r3 K' ~  R

9 D% W) _8 S) Y& b0 M' fvar appLogger = LoggerBuf.create(loggerBufP);
2 U" v- G, }: L+ kappLogger.instance.name = "AppLog_Core1";5 c6 S* y7 h2 M5 P5 d! x
Defaults.common$.logger = appLogger;
; {% K8 t$ z5 t5 r& }5 {3 rMemory.defaultHeapSize = 0x8192;    $ ~; r- D5 n" `0 a, I
Idle.idleFxns[0] = "&LEDStatus";
6 y' U* o% _0 T7 A! WCache.initSize.l2Size = Cache.L2Size_32K;: ?5 \/ \2 O9 q
2 h9 L, G7 m3 `2 o  O5 a' w
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-12 23:47 , Processed in 0.042905 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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