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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构% c7 Q" U* ]: s/ p' B$ Q4 J8 L
5 [$ a/ U- F2 J* h& ~
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# H1 Z' P3 k0 P1 U; W5 Y! X7 i: G% }6 [
6 r, T7 I1 L) s; Z2 V& `: }
其他程序段。。。。。
. W( I4 ^' {9 C7 N/ d7 d. g/ { & N0 q6 D+ ?% h/ E* ?. n
   free(x_d);, D( S9 {% w$ Q  {; w
$ V% R8 T' a; W1 W# Y/ {+ {
使用DSP侧单独调试功能,验证动态申请没有问题,
5 I" S* H2 N* M  t' v' o) L# `7 D  R( n7 x5 [3 {) {
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。2 X8 |% d9 ~: T4 U, _
, d4 C5 B4 n2 k' t
, u' F+ j  _4 B& Z% T; W# y
1 Y. e% J6 E6 K" n. M; t" a- K

3 U, d; e; `0 {: c% c
8 {' n% ?# m- Y0 T+ }+ |
* ^- Z: _6 [9 I3 {! E4 v0 Q& r  o9 V! S5 }* T5 B5 p3 b
9 y8 n& K4 v. ?: L" e+ z
. l' ~* P6 z5 I6 _: f+ [
$ V) a& W, }" I# |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明* g7 s8 l( D7 w! ~
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# H6 s( D: V$ ^8 G- _8 |" w(不过疑惑的是,为何单独DSP仿真就没有问题呢?), M0 z; i$ F* h/ p) o% C8 s
" K7 [1 c0 W! s
是不是需要在DSP.CFG中进行配置
/ i/ O( q: X- g# f; p我现在的配置为
9 A$ ~1 d2 q8 g2 b0 n6 B7 L- R$ l4 N# ]0 T8 p! N; c) e$ V) W
/*
6 y( F: x0 O# O) P& g. C$ | *  ======== Operating System Configuration ========1 V' |3 D) M- q; H8 y! A
*/' b! ?% j/ O: o& d7 ~
8 r- n$ G6 w4 U% t: h. d
/* no rts heap */
. c" z; a$ R, C8 v2 yProgram.heap = 0;! z+ Z$ K8 ~& }* J) B
Program.argSize = 100;  /* minimum size */; c! b) a2 H& i) A+ G1 Y2 ?& n
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大: P; _! r: R. [, S

$ ~2 g5 j2 ?9 L5 e- I/* create a default heap */
$ M3 ~, F) `4 t) t* l8 Uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" D3 C3 ]; w- H$ U$ `var heapMemParams = new HeapMem.Params();
( z7 |: [( ?( C. t- A2 wheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大, \( W, S8 i/ b- }4 I

. G4 _3 n- _4 r1 T* a# L$ P: W
var Memory = xdc.useModule('xdc.runtime.Memory');
# Z0 _6 n: @3 C5 k+ U! WMemory.defaultHeapInstance = HeapMem.create(heapMemParams);* `7 K; }0 e" U' l& T

9 m1 a9 ?% z0 F. R3 r/* configure System module */1 J; p  y3 z8 u( l8 K, r
var SysMin = xdc.useModule('xdc.runtime.SysMin');
% u  o4 X0 g! K" tSysMin.bufSize = 0x1000;7 B: o$ z* y$ W  k  `" d) \
SysMin.flushAtExit = false;
9 `$ F3 }" H; S+ A& o$ l  L8 s. L. `: Q; T; f7 C* S* ?) h) q
var System = xdc.useModule('xdc.runtime.System');
5 `! `  z: G2 s7 K3 eSystem.SupportProxy = SysMin;
% U8 z: C, m: r6 K8 e0 ~) Q( Q2 _# Q% E7 ?" D: v" d( l
/* configure SysBios to use the lower half of Timer 1 */
& C" x; }9 N4 Q5 P# Ivar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
8 }" C& V. w- d3 f( q3 ivar Clock = xdc.useModule('ti.sysbios.knl.Clock');5 U7 }7 r. D! Z0 g5 i
Timer.timerSettings[1].master = true;
. r; a6 v0 I2 }2 D! `9 I: |6 {Timer.defaultHalf = Timer.Half_LOWER;+ b) T+ }$ U# b! O9 f9 T
Clock.timerId = 1;& _, V) L7 y/ `5 N/ A

! p5 Y0 P4 d9 u, u
: X- Y4 ~1 |* o3 U' [/*' Y" ^1 y- z; g& ~; G- J* [
*  ======== Miscellaneous Configuration ========/ o- u& t5 I# Y# m" l
*/
' X  A% d6 X6 ?8 s" H: j/ q
! E: m6 T3 n3 S0 d+ }/* set default diags mask */
' v3 }+ ]  E* c: Evar Diags = xdc.useModule('xdc.runtime.Diags');: L  L+ U" o, R+ }" e( Y
var Defaults = xdc.useModule('xdc.runtime.Defaults');
3 o; R1 ]$ j$ R. l* v! j8 O3 O2 M3 n2 u
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
; }7 f+ n5 n* A. N  w; `( ~Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 J. @3 C) C6 |8 A( S
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 ^& E; @0 a3 e" j3 h
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
2 A4 c/ `7 T9 Y! c1 EDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' T& J* ]* L. Q1 Q3 y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  k- N, [1 ]2 K) D, z/ @+ W% ODefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
# Y( c, |  P! P7 [; A0 ~Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
2 i6 F! x  g0 k5 {; A3 ]1 {Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 [$ y/ H. {1 M0 m8 h, e$ C
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% n3 s" X" i% K9 b
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
3 N* t0 A, s: v! Y4 A1 i' S( gDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
6 M' U+ y$ X. J- m& VDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;8 M( x: t9 E' `
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;# g. U3 i0 i0 v1 `1 M/ ~

7 H8 o' z4 p+ P" U/* override diags mask for selected modules */
+ s6 _7 C6 V4 ?& Bxdc.useModule('xdc.runtime.Main');
( k- U* u' M. [7 o; ?: lDiags.setMaskMeta(1 p- k" L' W$ c( D3 ~" ~0 @
    "xdc.runtime.Main",4 N' Q* e- K- A( n
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
) f  a! |% w5 ]" N" g; O: b2 x6 V    Diags.RUNTIME_ON) h# ^( ]& M, h: j2 W- F3 R; E
);4 s+ y/ t' O  O8 s1 b0 o

; \  s  L" U5 O6 m4 E& w" Mvar Registry = xdc.useModule('xdc.runtime.Registry');
; z% Z$ ~7 i/ v. o" x, `$ kRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ d: g$ [% E; ]8 o1 |0 P5 C& Y) G
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;$ K$ E+ \/ w4 F) y) G& B
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
8 O( Y9 i# l: \( T3 E  [; rRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
$ M0 K) k* f. |; f; I: {8 I* Q) M% p4 v8 l2 i8 a' k8 \
/* create a logger instance */; t- n8 Y- H( M! E
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" e' h  v5 s. t# T5 g: }$ u
var loggerBufP = new LoggerBuf.Params();3 p0 Z% e9 A9 D7 g1 `( P( Y
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
/ j2 @# K8 Y, Q; y/ \loggerBufP.bufType = LoggerBuf.BufType_FIXED;5 ~& c6 z" }' S
; ^9 g" }7 N3 ^% D3 N- H
var appLogger = LoggerBuf.create(loggerBufP);
: x( v5 N6 T7 z) X' L- nappLogger.instance.name = "AppLog_Core1";8 }& R! M. h7 G" G  ]
Defaults.common$.logger = appLogger;* R4 m/ X1 V2 p0 A* E
Memory.defaultHeapSize = 0x8192;   
* r7 c! `3 F7 SIdle.idleFxns[0] = "&LEDStatus";/ \3 V$ `! C. ?
Cache.initSize.l2Size = Cache.L2Size_32K;
. v3 d) E* G# c) ?5 q# _, P; z# r0 A# Q8 V3 |4 [! ~( |
回复 支持 反对

使用道具 举报

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 */
7 x# b9 b$ b8 s8 qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" C- }4 x# ?; a* Kvar heapMemParams = new HeapMem.Params();# f* K- {& F  H
heapMemParams.size = 0x4000;1 f5 q4 {- J" z6 W3 @$ N( J0 h
8 O3 z! v/ F* |8 n
var Memory = xdc.useModule('xdc.runtime.Memory');5 U  {/ {/ A. S1 m7 e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* a& ~: R9 H6 |
9 F4 n$ W0 z3 m$ d& @! Y我大约calloc  每次共计大小为5K*16bits," {9 X9 c& H2 g  b0 `6 E( C9 A2 v+ m
而默认配置才0x4000、需要改大。1 [6 G# t, u, _: x1 e

! U; y8 I& V6 D
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */2 F( N9 t7 q% ~( ~% T4 M
Program.heap = 0;* \8 N( J) ?0 @- V
Program.argSize = 100;  /* minimum size */
: p/ l7 \# @# O6 a+ n4 JProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-22 13:43 , Processed in 0.041633 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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