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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

0 p" }* U0 `6 ]  [    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: X4 r3 u! ?- g, A, A& W! f" d% C5 {, V: P5 B2 T4 V
其他程序段。。。。。9 k1 O/ H9 d3 P; A8 m

& m; F3 f3 [9 }9 E2 S8 F   free(x_d);7 ^/ e1 p* R* P6 H

) Y' u1 A' N0 z5 @使用DSP侧单独调试功能,验证动态申请没有问题,/ @9 o, o- d9 n3 N! _' [: m

# M! s$ R3 e& P" E但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
) x8 T" P$ X! U% }4 U

5 T  X' r2 a9 _7 {& d. L" m: Y6 |% B# A4 O  Q$ q

; W( O( _4 a4 H# |  Z! i* S* S/ G
  ?( q0 @" q3 B7 o- b2 M; |8 {- q1 H2 o0 r- q8 V
2 n' O: J0 A, u7 w; Y4 G' K: z$ S
8 \2 |8 D9 u: |
8 w4 T) L3 I2 b$ C" B

- W! t) q. s# i" Z. v& C1 b# y0 d/ U6 @( H% `4 q
分享到:  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 */
# P$ y- n# K( ^3 l6 AProgram.heap = 0;
: `. a0 B7 L1 YProgram.argSize = 100;  /* minimum size */
- ]2 g5 p; ]$ u, {; E3 AProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */  ?& c0 N" t( |7 X' q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" G/ s- s% W7 m' o* j& z
var heapMemParams = new HeapMem.Params();6 N& [: p4 ]9 p
heapMemParams.size = 0x4000;; S: c% m  z! u6 a3 h# V/ U

4 e3 f( s0 z) u$ U8 rvar Memory = xdc.useModule('xdc.runtime.Memory');% a! n/ v* J3 a+ b5 U7 b% W: D
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 K5 O0 i4 u* N0 C* J9 y

# O9 E$ b7 K& a  h我大约calloc  每次共计大小为5K*16bits,# ~+ n8 ~9 R+ w1 L  _
而默认配置才0x4000、需要改大。
( {" t' M9 U/ I2 n& K
) P. M. P' b6 d* 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 | 只看该作者
补充说明6 B& f4 a8 S: e+ \& J) E% F
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& ~. K! R# P  R/ u9 a, i& ]
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 ?8 f6 s& q) i% {2 m7 O

( h  R/ s0 @- Q/ e是不是需要在DSP.CFG中进行配置( C) T3 C2 I# l1 M9 g! P& g
我现在的配置为" m+ \; F: v1 k( a" Q1 Y" b

% j5 M# O% h1 O/ Q/*7 M+ l! _3 _4 ~& V5 W; _
*  ======== Operating System Configuration ========
; r+ R- O( `3 O, I- n$ C1 W */& ]7 U2 R* |: Y+ |4 ]; x3 K  P

' u$ y/ V- Q3 g9 Y4 z3 y/* no rts heap */$ e1 F2 x# @6 e2 Z
Program.heap = 0;8 G; x5 H) R$ F; B9 Z* ^
Program.argSize = 100;  /* minimum size */
7 m2 T4 P* F6 QProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大9 j) D4 X" o6 E& N! D

, [/ @4 c  a4 H+ b" ^2 l  e/* create a default heap */
9 n% h4 Z; p: R$ y  Gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. |. M$ h4 D8 |3 e
var heapMemParams = new HeapMem.Params();4 m& X3 e8 T% ^) m! ?
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
2 u; ^2 r9 l! L+ m2 m" G3 q- l) T1 ~: B, B: F; H/ q( ~: K- v
var Memory = xdc.useModule('xdc.runtime.Memory');; p2 l+ z% d+ W: X* v
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 s( J1 r* r, O% e2 l
/ |; D: T! W4 ~7 Z% ~  {2 @/ Q% O& v/* configure System module */: t/ j* u: [3 P% Y4 n  }- a+ m
var SysMin = xdc.useModule('xdc.runtime.SysMin');8 {. o, q* Y- g6 f' K) o! m- s
SysMin.bufSize = 0x1000;9 U, [2 T4 W' {+ c1 I/ n- b
SysMin.flushAtExit = false;1 T1 U7 o2 g+ I: R( |
* Z* P! H  }: e5 w9 a( z# n
var System = xdc.useModule('xdc.runtime.System');
/ }7 W4 e" ?+ V0 q* |! n, dSystem.SupportProxy = SysMin;
+ {1 H3 g5 T( ?6 X6 ]6 x2 A3 K7 k; X7 x* L. E
/* configure SysBios to use the lower half of Timer 1 */, }. Y6 O/ C  S- C2 Q2 K
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
) }; O) d$ n* H9 H$ H! Wvar Clock = xdc.useModule('ti.sysbios.knl.Clock');1 o  E- r, X/ @$ o, f3 u1 [" N
Timer.timerSettings[1].master = true;
3 _! ?0 Y9 V$ `, D  t6 H* yTimer.defaultHalf = Timer.Half_LOWER;9 |# |7 c5 H% h; `
Clock.timerId = 1;! X( q; l$ H' m  r! x, X/ k

* J( E/ ~2 E+ \# h; \
7 U0 T1 c$ c/ A9 f# w) Q/*
' S( @  l' [7 k5 o$ V$ O *  ======== Miscellaneous Configuration ========2 }0 k+ \5 R. g% n/ W  |
*/- D( z1 v2 Q& e& ], g) ~
) Y" K, L3 ?2 D, b
/* set default diags mask */
; I, e6 u) J$ d$ \/ [* K: V2 z! Avar Diags = xdc.useModule('xdc.runtime.Diags');# G' O( e8 t- L5 K* M
var Defaults = xdc.useModule('xdc.runtime.Defaults');0 h5 ?8 o- v- k1 H

8 I+ E+ h* k& G( _1 ADefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
. A1 {+ T  c8 N( X! L& D6 |Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( h/ Y6 h. m# }% jDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 t) ?/ i* F9 R' h$ P! U
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
* w% E4 o, W/ t. q* R8 a7 _, J9 WDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 u! D; {) @) ^* I1 k
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
: U3 {! o; V: Z' }/ }Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
( J2 Z4 A( ?2 {- L, W1 I: U0 NDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;# H$ S2 x- Z+ J
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
7 Q8 M, l" _+ N6 XDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
+ x& Y  Y2 `, l) f0 H/ X* K& rDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
: [1 I' l8 r& V) S" ODefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;1 Y! J2 u* N$ i
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
, S# L, n( |" g; T+ _4 ADefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 y/ l5 t+ r) U, U  Y

* q1 v3 N$ [' f0 U( j/* override diags mask for selected modules */
+ u) K4 p6 D' C; yxdc.useModule('xdc.runtime.Main');7 h. h* I; T+ `0 a& q( R- j* d6 S
Diags.setMaskMeta(6 ~0 u4 y# O9 d
    "xdc.runtime.Main",
+ E9 z- b7 h- J0 ^3 p4 c* P    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 H4 w+ j! e+ l6 X# F$ S) d% o. m
    Diags.RUNTIME_ON$ f9 Z7 p' K% R
);
8 X7 j) z1 S) H
( h% V# T+ ]+ K" R; }! Qvar Registry = xdc.useModule('xdc.runtime.Registry');1 z9 s3 {: K/ s* p9 G# i
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;" C) E& P& K* I
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;8 _- e) N& n0 U' K0 v
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
9 t5 s) D/ Z1 j/ |: N% r2 @Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
- {  K8 a4 z! q
7 c) m6 W1 _# H  w3 W& J7 Z9 G/* create a logger instance */
+ O2 d7 c% ^, t1 {/ t  a9 M# Lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
& I) S) G( Q; F7 F: Nvar loggerBufP = new LoggerBuf.Params();, l  r5 J: l+ X) Z. [1 f1 I) v7 W2 i
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */* S# a+ M3 E' v
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
% M+ V, K4 H* s, K5 V! \0 b4 {7 n, G' X6 t, v
var appLogger = LoggerBuf.create(loggerBufP);" u% E/ W- k$ o" D5 @% s5 \# [) [
appLogger.instance.name = "AppLog_Core1";
3 a/ w1 F" y$ J0 w5 p' ]3 mDefaults.common$.logger = appLogger;! H$ A) \3 P, O( {9 a7 ], {$ V
Memory.defaultHeapSize = 0x8192;   
7 `+ v; g* X6 Q* Z3 Z4 f, sIdle.idleFxns[0] = "&LEDStatus";
/ l; r8 ]0 g  C  P: SCache.initSize.l2Size = Cache.L2Size_32K;
. `, v$ a8 Y8 n
: u/ E4 t$ H& M
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-15 18:44 , Processed in 0.050778 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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