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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; u. o' ~3 \* J! m. n4 r: ]: s
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256* B5 o% E3 x; G3 g) I
7 @* B+ R) t0 c  n6 B4 B
其他程序段。。。。。% k" E4 K' T4 R9 l! M1 X2 n* w4 z
% a. l, k9 k2 W6 ?+ f
   free(x_d);
/ U  n- z& M3 r- y& S
2 Y3 C* C& F( G  C使用DSP侧单独调试功能,验证动态申请没有问题,
. b, P! o+ o, z3 `  [5 i' _) x2 O0 m8 A' J: @/ ?
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
3 {/ c* }  L2 F- S! s0 J' O2 H
/ k6 w# Y& c* [" S3 w6 M9 \

% ^4 x. i" b& g& A' a# T# e1 s* f; I/ s1 p6 x, Q$ t$ j

( c' a, L; ^7 W0 R% k$ C
  q( ?) [7 X: y: A/ h
1 ~+ S# y  u- f1 k' P" j+ U( {3 H) y) o* O- y& m; X7 I
, C. j% F- G# G7 }

+ V+ @2 ]4 P+ I5 ~  \$ A+ X( m% I- o7 W7 r; c5 G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
4 C7 \: N0 K: y" O5 n2 |我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
  T5 _" \6 Y8 O& _0 N(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 {" p: G& c8 i; v- M5 P& I
. x: s3 f( P4 r+ T/ r* M
是不是需要在DSP.CFG中进行配置) C( I( o2 n$ N" s
我现在的配置为
5 e2 M) A9 S* \" z
( F1 U6 }2 o# X4 X2 ?0 l/*
( T6 x6 e( {  u; ]/ i5 y. c *  ======== Operating System Configuration ========1 ]4 p: d; P/ l- l  t  Z
*/3 E9 }2 g1 z$ x8 t" q  L1 U

5 ?# W8 Z) G) S4 Y/* no rts heap */
+ D, L" C4 i: v! M3 p/ MProgram.heap = 0;
9 S* `: J4 F5 D" _; n' `Program.argSize = 100;  /* minimum size */; F8 J$ C' R$ w# y  u
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
0 T# _3 V! @- R( M+ Q/ f& E3 |5 s/ k0 s! h" m4 `
/* create a default heap */% y' Z8 O" ~" }3 k( M
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 \! ^! q' A8 r. ^var heapMemParams = new HeapMem.Params();( x) {8 ?& P2 e1 P+ r/ ]
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大# f% \$ G9 e# n

: b: g! G" Z" S& {# J
var Memory = xdc.useModule('xdc.runtime.Memory');
* p" z3 b# y+ ^Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 V/ W) |6 ?' D+ d1 H' p% s" M' W$ k: h+ X. B4 J
/* configure System module */, l) j) U2 J/ X9 ?0 ]
var SysMin = xdc.useModule('xdc.runtime.SysMin');' k/ Z3 B) {5 R% {: i# k( a: N" a
SysMin.bufSize = 0x1000;) u# o4 e6 P- `* p) R9 h. r
SysMin.flushAtExit = false;0 Z% R1 v9 I/ y8 u
- ~( i- O# J, L$ G0 c( X1 q
var System = xdc.useModule('xdc.runtime.System');0 ^5 e' t2 U' t4 y) V6 r
System.SupportProxy = SysMin;
' ~; D8 T+ U5 [3 E* l/ Y0 r" J$ |$ `" e$ g" X/ h3 `6 w4 `
/* configure SysBios to use the lower half of Timer 1 */
* J! y% l, Z/ w' J+ B- r9 i+ [var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
% Q! R! i& ^1 ?7 F* e' Ovar Clock = xdc.useModule('ti.sysbios.knl.Clock');
! I$ `/ V" _. ^. K$ d" ITimer.timerSettings[1].master = true;) n  j' Y4 K6 O. L
Timer.defaultHalf = Timer.Half_LOWER;
) D! [5 g2 a8 N1 x! D, U0 sClock.timerId = 1;& K0 {) R: r! X. l

# j, e8 I+ q8 O* Z; E/ g% m8 @) M- I$ ?# m3 K' k+ n- h+ p' X
/*- ?9 p6 Z& H# y7 Q
*  ======== Miscellaneous Configuration ========' `1 L8 @( ]+ r# l% e3 N6 e
*/
" F! ]6 I/ v& T4 _; S1 M8 }) U0 @) w9 u6 A# c9 j1 g
/* set default diags mask */' h9 w1 _1 D' u' a0 A
var Diags = xdc.useModule('xdc.runtime.Diags');' t0 p0 e" f. z1 [
var Defaults = xdc.useModule('xdc.runtime.Defaults');
, X) r+ A  ^7 _) ~
1 t' S  G; O2 ?$ |3 zDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 C" G/ V3 j' [& c4 GDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( m2 K6 `3 }: v8 N1 e7 B$ [Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
6 I/ |3 Q" {# P8 R7 j: [2 iDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
. M. E8 x7 x% a* h5 yDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
* w" \2 D: x: W+ O) E. wDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ b& `* g* _5 g( `& p* d0 F8 R  |Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;- z* p8 C7 Q; h  C6 V7 T( B
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
/ N- D( R3 B; T: Q+ zDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
6 d5 t2 M  i* z2 e+ Z3 m$ oDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 J2 K* T' y4 e1 o" V5 v
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
: O/ G8 H) ]! z/ mDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;) Y. G5 R1 H0 k. n) D
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& R4 r. H3 ]" _5 f& [" RDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;' ?2 ~$ x4 M! I: [( O+ a

1 {% J7 @2 W' s7 L2 K; D! Z3 k/* override diags mask for selected modules */5 j/ H8 K! ]* x9 H
xdc.useModule('xdc.runtime.Main');
5 T+ A% v/ w' W; HDiags.setMaskMeta(
7 C( p/ {% ]) T    "xdc.runtime.Main",6 u* @) d6 w9 o5 p7 t$ @
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
2 A. u# H$ i4 ^; N8 z    Diags.RUNTIME_ON# d, o5 Y7 f9 U
);# m9 p( i, R' T1 S

; w, l% x2 g: ~& y( o# wvar Registry = xdc.useModule('xdc.runtime.Registry');2 n$ @5 @5 ?  C$ k% ^% d! y
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;6 G4 t  k% k5 \9 l3 j8 Q
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
7 t! k; H/ ]: a) p; ]5 ~# P/ IRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
/ ?0 e' f+ _+ T' o, A! gRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;2 {/ F* F5 N' ~0 X

' O& p% Q% V/ W3 @" k* k/* create a logger instance */% ^. K6 `+ N. R8 R- A
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');- H: @$ |* ?1 ~9 O+ i7 M
var loggerBufP = new LoggerBuf.Params();
1 L) e% b6 O6 b4 _8 floggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 y( q3 w2 B& nloggerBufP.bufType = LoggerBuf.BufType_FIXED;9 x' X. {# d3 R: W

% O' g& i; n$ A: Uvar appLogger = LoggerBuf.create(loggerBufP);
* e; N9 a( f( T& g- g, \appLogger.instance.name = "AppLog_Core1";
$ c* \1 E8 K0 O6 Z# b- dDefaults.common$.logger = appLogger;0 S/ p$ p4 {) D; O
Memory.defaultHeapSize = 0x8192;    : L& Z% w; Z! y* s; H
Idle.idleFxns[0] = "&LEDStatus";/ w. R; P( a0 i
Cache.initSize.l2Size = Cache.L2Size_32K;* [* f4 j( t2 T2 V# w
; B: W" }7 Z8 x( J( v( R
回复 支持 反对

使用道具 举报

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 */
" Q# v7 J* L( M. F9 }var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 C& t) R9 J( j: m3 p
var heapMemParams = new HeapMem.Params();0 h8 I- Z% u7 f4 ]1 O5 E
heapMemParams.size = 0x4000;
! I5 i8 q0 G, ?' `" I- f: n9 g$ S$ l& @0 E
var Memory = xdc.useModule('xdc.runtime.Memory');" H5 j5 E4 ~. N* r1 M
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ ~. o; |$ N, U7 B. S3 {: _
( l: L* S6 A. s: p$ v我大约calloc  每次共计大小为5K*16bits,  e% Z% r: I; _
而默认配置才0x4000、需要改大。
$ s" j1 o8 c5 ~9 C$ y! m  a8 y- e1 h9 e; T8 {* T
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
. X; T8 \3 A2 sProgram.heap = 0;6 J( ^' ^; Q+ a* A: w
Program.argSize = 100;  /* minimum size */: Y- R/ M/ D2 X& G9 U+ Y
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-30 08:27 , Processed in 0.047412 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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