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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构) |7 A/ }7 Z: r9 |7 T: |
7 C4 ^" \; a1 y
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2560 Q0 e! H' m4 m

2 T% P- o* q" ^  u其他程序段。。。。。
' f5 V) W/ f8 F" [ 4 |$ Y8 ]4 y* O: o/ n* R/ t
   free(x_d);
! \( r+ c) b/ r  u; L$ w6 F4 f7 Q" J& i
使用DSP侧单独调试功能,验证动态申请没有问题,
: z$ V6 ]. U0 p4 N% j- X$ A1 ]# v/ ?/ D$ a; C) U
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
& C) q! i2 V( k/ C5 }( X

0 [: k/ ^* T0 l4 Q! h5 s6 |9 B1 T2 A7 t& F# O7 R

, P1 ^: w8 x* ]' O4 u9 |! C6 m- H3 {9 V1 A" J  [
3 ^2 m$ ^6 I: K7 _" x. @

. a* F4 X- F8 _* e4 u1 I, Y. n: h

  n9 M( B* W! K7 n) v! R" R, S# k5 `# Q) o. a
/ X# g( d$ ~5 ^8 T2 c2 L
分享到:  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 */! J6 s( ~9 J7 _# Y0 a0 F+ T- ]3 p
Program.heap = 0;- ?2 B! f9 |: a& ?; t
Program.argSize = 100;  /* minimum size */
7 C  K% l* l4 w/ x6 QProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */& k  N: R8 c6 n# k) o/ ~8 T7 ?1 v
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. L: J. t8 v! |: }
var heapMemParams = new HeapMem.Params();
. t7 H& s- q8 J" d' ~3 i, ~. UheapMemParams.size = 0x4000;
4 h/ c0 a/ a0 a% s7 k3 i8 Z8 X5 L* N9 |& [- d4 M) Q) ^
var Memory = xdc.useModule('xdc.runtime.Memory');6 e* j) N8 S9 u% U) Q, U2 m, v2 R- c
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);9 ^3 L2 U' y4 e* |8 [& N

* S* i' L; _. `7 K7 Z我大约calloc  每次共计大小为5K*16bits,
" s" h4 I: A( D' M# W3 V5 I而默认配置才0x4000、需要改大。
' {( n, A( q6 T1 [7 H1 o
2 J. S, h0 h1 i. [; n% \; Z5 z
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
+ j) {  I$ |. @我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
' d+ F. J. n5 k% H(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" a3 j! ~. Q! M, @
1 K) ]# K. a7 f& M  R: k' f
是不是需要在DSP.CFG中进行配置" [" k" o- ?; E) `5 W& x
我现在的配置为% D  E* O, Q- T# R- q" s# `
3 Y, y0 Y5 d* r' u! V- L# g- u
/*
: O4 D# E* X& T *  ======== Operating System Configuration ========
2 `+ x, @; V  A5 k */8 x9 W- @  x" D8 a$ j( z- O7 Z

) W  \" M- K0 q  _7 t3 H/* no rts heap */6 J# C- B: b; ]' v6 C3 k
Program.heap = 0;+ S  K# e3 w; q7 J) [4 [# q9 `
Program.argSize = 100;  /* minimum size */
" k7 [! H7 [/ |: K+ IProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
& ~# M, d. q  K  O
3 j/ g5 M) S8 I3 @/* create a default heap */
+ t2 G8 `2 W/ X% e* Q1 w+ [* {var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) L9 u0 K- z2 E2 A. Tvar heapMemParams = new HeapMem.Params();
3 t. }+ C) j" _heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% V) I; t4 k  Y3 X% T! z+ \
+ ]+ ^' t3 ?, @$ |/ l: {- ~5 H2 _
var Memory = xdc.useModule('xdc.runtime.Memory');
5 i0 e9 @6 O) M7 O) \  M7 B! s) eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);/ V3 A- [7 L+ K. ~, V
' V9 ~. ^  l5 [' S
/* configure System module */
* C" N* G/ V  {4 Rvar SysMin = xdc.useModule('xdc.runtime.SysMin');
7 U' ?0 C* C7 J0 CSysMin.bufSize = 0x1000;) I: }& l! E" u/ d+ o2 a" c8 W
SysMin.flushAtExit = false;( b2 U7 O  b3 _* d0 B5 C& `
) g3 n& }- H5 g4 T
var System = xdc.useModule('xdc.runtime.System');( [, ~: ]1 l5 m1 K$ }8 j
System.SupportProxy = SysMin;
' z6 K5 z/ p% E4 o; g% b) S5 _5 f* t( ^% k4 y4 X6 ^2 k9 U
/* configure SysBios to use the lower half of Timer 1 */
9 P4 ]7 R" x; u& Lvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
- ?0 e' h  \1 S) x- j+ e( ^& gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');4 H0 @2 x! m5 w) @8 d
Timer.timerSettings[1].master = true;2 k$ Y- k# Q4 x5 a  A, T
Timer.defaultHalf = Timer.Half_LOWER;
: @2 \1 K7 b, E& Z0 q" {2 zClock.timerId = 1;
' k5 T  f# l) n: h, Y) h! M- J# m  h' F6 V7 J5 o2 H

) k$ P$ l1 j, E/ r; d3 ]) r: U' A/*
7 E& i) @8 Q0 L, c+ n *  ======== Miscellaneous Configuration ========
' j% u: _: S* V2 P6 d7 S  t */) e% `2 Y( T+ S* @! C4 f! D" G8 }

; @% s9 e' \- ^! d. b0 ]/* set default diags mask */
/ P  a2 A( t$ Z1 k7 X+ xvar Diags = xdc.useModule('xdc.runtime.Diags');
0 T$ @( \9 q) Z7 }var Defaults = xdc.useModule('xdc.runtime.Defaults');7 U5 d+ o2 Z* N% }- v+ e

/ q/ S$ A4 C5 M6 _# ^Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 z7 ]- ?5 R2 R5 W# [- {
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
; }) j( I. w* K. BDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 _& S, C  V& S: M, ~: o5 MDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 I& `9 u4 X3 ]
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& }; L5 S" u; X$ a2 J8 L; n5 ]) ]Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  b1 o8 c5 j3 j+ D/ |
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 b" K9 `' c7 z/ E2 e3 u7 @+ HDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;+ c) N' P9 L$ c2 q- U; Q9 y
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) b! E3 [: [9 b. D& O  z5 ^Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
0 X) [  v) B( c( R( _Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 G. t  r' }6 J# W. [2 E! y# I
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
: }  A/ w3 N: X+ {/ o5 @Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;& I4 [, E* {: g( r* m7 @
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
- g7 O$ d' m1 d5 i" c4 b- J; q4 ^, X2 i0 @
/* override diags mask for selected modules */8 `- a! H8 J2 \
xdc.useModule('xdc.runtime.Main');
# j+ q6 d+ f6 }1 O+ P7 V4 YDiags.setMaskMeta(4 u2 P( U6 U4 ]: z! Z7 m5 S
    "xdc.runtime.Main",% I4 o6 y8 z+ c7 q6 r: Z9 H" M4 K
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
3 I( l. y/ [0 G9 A; x+ D    Diags.RUNTIME_ON
" Y4 |2 H" O9 @5 [);- |: e& Y( Q1 M0 S) f* n; y: m/ p. p
& \% U# P" }% N4 L: c
var Registry = xdc.useModule('xdc.runtime.Registry');, T0 D0 k- F2 k! t$ K0 n
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
" G- l* y8 R) b- e" q9 ?Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;& t( n' G6 W+ Y2 b
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
* S3 i2 B4 g6 \( T+ @$ ^* nRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 E' u5 m) W9 B, r* i* k  C6 {3 d: k: \4 h3 Q
/* create a logger instance */
2 r9 A- s6 N) j4 k1 Ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& @$ r, N: ~7 q
var loggerBufP = new LoggerBuf.Params();4 h" W* z" n  k$ H! l, J+ ]0 c/ y; ?
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
: B% k& B  n. {7 [loggerBufP.bufType = LoggerBuf.BufType_FIXED;
" y$ R/ A- g) x
3 X, N, K+ N% o- f) M2 P4 O4 Xvar appLogger = LoggerBuf.create(loggerBufP);
! _4 P  i! g& y+ [/ @8 S. E3 M1 s$ DappLogger.instance.name = "AppLog_Core1";
) S' [9 n; }; FDefaults.common$.logger = appLogger;
$ e0 A' a3 {  r# QMemory.defaultHeapSize = 0x8192;    5 O$ {1 O) r7 y, `" y
Idle.idleFxns[0] = "&LEDStatus";" V! X0 w  c1 E
Cache.initSize.l2Size = Cache.L2Size_32K;
( \& g) w0 S0 j; \. N4 t- p& N- \7 I: X7 O3 o- m& P
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-2 16:53 , Processed in 0.040625 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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