关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
4 {& h% h3 t  _/ {# `5 n; A/ N" J8 G: W( |' @6 A# {
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
( w1 ]3 h; _% H- ?* V! e/ u, ]' t- s( _8 K/ u$ P5 p8 G: K
其他程序段。。。。。
0 _3 \' b2 F0 [! Q; D9 y * \( b& X3 g# y$ v) f8 Q
   free(x_d);
, P4 F3 T8 S% ]- L1 Z# R/ Z* U# |  B8 a# T: T3 L' O
使用DSP侧单独调试功能,验证动态申请没有问题,
4 l4 O9 X/ G/ |/ G. v: o7 q# S  y/ t' i+ ^0 S
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
1 i: k$ v# t" a% W
9 M2 C; p! g$ U: t6 i

& J. S8 s" |+ Y2 t+ V1 }
& g9 s& d( U( B  x4 _9 G
7 h( [/ G! g: ~* M' l$ R3 B2 Q4 }8 p& x

3 e6 [+ x% S- V
& Y1 s; A" j$ a; h7 Z0 N8 D
( M  n" B8 X3 F# Y7 ^4 _0 a- R# W. A  I" ^$ a' |+ g  w3 b/ E$ Q- v

; x) ~: U3 j5 X5 F5 R4 ]+ n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明  Z* T2 n" Y" F( }2 h
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下3 x# o9 @; |: o8 W. E! e2 G
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)# \$ l( i  H' ~7 m5 {

* V  v: u: U; |2 h, \* \是不是需要在DSP.CFG中进行配置
  V! l% h  ?9 _9 B" t% n' V我现在的配置为
+ @" n# ]! R7 @' ?2 q. [2 E& i0 ?/ R7 r0 L! F+ H  |: j" p
/*, s* y1 X- C4 P* `
*  ======== Operating System Configuration ========
; c8 ^4 m! j3 q" b */
) L: `6 R/ n" i, E: u' g2 Y% ?/ O" i. x, s
/* no rts heap */# R. q# L& U9 Z) ~! {1 @& A1 b
Program.heap = 0;! ~0 L% N2 N- A$ v! o' m
Program.argSize = 100;  /* minimum size */
$ x7 n; o% F" }Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 M7 Q0 V3 x# {9 ?3 W5 N

; u( L* \$ R% X* F6 ~/* create a default heap */
; Q' `4 \2 U0 _( G1 Evar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 {5 C; U2 K- Z: E7 cvar heapMemParams = new HeapMem.Params();
9 O) w6 z  h/ d9 SheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
( F6 Z% k5 W. I$ K
+ W6 |  e1 e3 V
var Memory = xdc.useModule('xdc.runtime.Memory');2 ~. b0 ?1 i# O3 U5 w8 G
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 _& w0 ~, \' b) u. V3 e+ y! _% r9 q% X/ g+ {4 ]3 e/ b
/* configure System module */3 H7 Y3 Z$ G  G% c+ ]* ]$ T; y0 L
var SysMin = xdc.useModule('xdc.runtime.SysMin');# B( F% a( @7 r( P5 ?
SysMin.bufSize = 0x1000;2 C- k3 x. _9 k, X( o4 z
SysMin.flushAtExit = false;  R1 Y9 z- l  U* C

7 i9 n) u/ J! w; q! K7 I2 fvar System = xdc.useModule('xdc.runtime.System');
$ H) I6 r- T& P, wSystem.SupportProxy = SysMin;
( X4 r( `) \/ O2 {6 S" k0 y4 ?6 N5 l% D6 m
/* configure SysBios to use the lower half of Timer 1 */& X2 v6 V# }/ O0 s5 V2 N! w
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');$ S3 W9 O/ X, X. L+ o
var Clock = xdc.useModule('ti.sysbios.knl.Clock');6 ?- i" k# ]- H* {! k& }
Timer.timerSettings[1].master = true;
0 [& o; u( W, ATimer.defaultHalf = Timer.Half_LOWER;6 y8 g# {5 S: g, G2 v
Clock.timerId = 1;. P, f; y" T$ x% ^& q" m
: u6 F' t3 x5 U: D0 E
  _$ h1 ]8 W6 ?5 C, o* @, S) u$ }, a1 I
/*
: M, A+ I: U  g *  ======== Miscellaneous Configuration ========
" d% S) m: v7 |% k */1 v' o9 O7 p7 q, g

# x$ ^8 i2 O" s7 d8 f/* set default diags mask */' h; }* H. b  o/ f, x
var Diags = xdc.useModule('xdc.runtime.Diags');! y7 t9 o' Z/ l
var Defaults = xdc.useModule('xdc.runtime.Defaults');
& |/ E* C7 r0 D5 k/ d% y- G4 Z  e/ H% ]4 ~( P- I
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
5 h9 I: m" _" K" qDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
% r2 ^8 D1 R* H! [7 cDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
- i! {4 E% Q/ Z: Q+ ~; A9 rDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */" d1 ]+ g! {7 e
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  [" U: L( A# i2 K3 @" l$ A
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  P  a: \; h4 T' U+ _) S
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;/ d$ [/ k' B3 H* y" C) ]5 L
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;' R6 f! }4 v7 X0 ?# M1 r9 j( f
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 A4 I  h$ n, q& n. R% |; J
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;& ]: d/ @! H' ^% n
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;/ t1 ]7 g( E: f9 k
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
' n& W3 s! d: T) Q. ]9 ~, Q7 \Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
$ |; i6 B! v1 c1 b% u9 k3 A9 NDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
- B# e: ~; ]+ M/ Y$ Y
& N& B& V7 Y! Q, o/* override diags mask for selected modules */
% _) |8 |/ C( \' [1 D. Axdc.useModule('xdc.runtime.Main');& M% Z. c# Z8 ?4 O- y/ c
Diags.setMaskMeta(: \; h% p( E$ |) C' \+ [8 \
    "xdc.runtime.Main",
# K3 f" a# q7 c- [; ^8 x: |    Diags.ENTRY | Diags.EXIT | Diags.INFO,: q8 J5 d/ @$ Y0 h( q- x+ P
    Diags.RUNTIME_ON& r" |, Y) f9 X: ?$ D9 x/ |
);9 Z0 u6 \$ |8 w1 d4 Y

5 X# I& P; L8 s1 Y, _* yvar Registry = xdc.useModule('xdc.runtime.Registry');( k" g- Y$ E" L: w
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% l4 F7 c  c2 o' cRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% R3 Q1 o. L3 d& `2 ]3 S! h5 q6 ]Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;; `8 {! {$ p# r6 [: ?5 j# ?! o
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;/ N/ d; [3 v' [+ _
8 f1 j) E" t8 y0 a8 |" @
/* create a logger instance */
9 {" x/ a, Y& m. h$ X) g- a4 tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');: _$ T: C  i7 |! {* ^0 ?
var loggerBufP = new LoggerBuf.Params();
0 D- Y9 ]/ d. ?loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */' o/ Z& C4 E2 C
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 K: ^3 m  C( `7 j& p& m, _( Y0 ?* a+ @1 d% s: A
var appLogger = LoggerBuf.create(loggerBufP);
. q+ H, `8 s& tappLogger.instance.name = "AppLog_Core1";4 c8 Z4 p* i8 y
Defaults.common$.logger = appLogger;
/ |- K) ]: N) T: v+ R- H1 o( SMemory.defaultHeapSize = 0x8192;    5 G* \: C. E* T* u* k! b: z
Idle.idleFxns[0] = "&LEDStatus";
9 i/ [' u% d1 t/ N( e( g( {% L. Y. m- zCache.initSize.l2Size = Cache.L2Size_32K;
4 a) @$ B3 j, b  T5 {; F, {9 z
+ X: h9 C* q; X% n
回复 支持 反对

使用道具 举报

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 *// s# E8 j7 O7 A! O; W
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 m" e+ M/ A0 n6 T0 y3 P/ u* H: \var heapMemParams = new HeapMem.Params();- c% L1 z- x& b
heapMemParams.size = 0x4000;
; o' W! i) W9 S" m) [7 {
8 p6 \( V/ S' X- Zvar Memory = xdc.useModule('xdc.runtime.Memory');
4 u% f* G- Q! V# O* }  n8 g) [2 ~: UMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 J6 w8 x2 K9 |& i8 [$ G% Z2 w( H) u3 Y6 a+ a4 A; A. x8 ~
我大约calloc  每次共计大小为5K*16bits,
: k, U* I, y5 I' U而默认配置才0x4000、需要改大。5 s5 D& O9 f; |/ M1 C8 R

) `) ^- h! F: A
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
9 `8 q, K9 F( L! C. RProgram.heap = 0;
0 T% @& b) n4 L$ u5 T# m2 }' iProgram.argSize = 100;  /* minimum size */$ S: Q8 C. ^; E$ O0 l8 ]; N
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-2 23:02 , Processed in 0.041373 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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